17.1 创建表

使用CREATE TABLE语句创建表。

不同的DBMS中CREATE TABLE语句的语法可能不同。

17.1.1 表创建基础

利用CREATE TABLE创建表,必须具备如下信息:

  • 新表的名字,在关键字CREATE TABLE之后给出
  • 表列的名字和定义,用逗号分隔
  • 有的DBMS还要求指定表的位置

实际的表定义(所有列)括在圆括号之中,各列之间用逗号分隔。

在创建新的表时,指定的表名必须不存在,否则会出错。

  1. MariaDB [sqlbzbh]> SHOW TABLES;
  2. +-------------------+
  3. | Tables_in_sqlbzbh |
  4. +-------------------+
  5. | CustCopy |
  6. | CustNew |
  7. | Customers |
  8. | OrderItems |
  9. | Orders |
  10. | Products |
  11. | Vendors |
  12. +-------------------+
  13. 7 rows in set (0.00 sec)
  14. MariaDB [sqlbzbh]>
  15. MariaDB [sqlbzbh]> CREATE TABLE ProductsNew
  16. -> (
  17. -> prod_id char(10) NOT NULL ,
  18. -> vend_id char(10) NOT NULL ,
  19. -> prod_name char(255) NOT NULL ,
  20. -> prod_price decimal(8,2) NOT NULL ,
  21. -> prod_desc text NULL
  22. -> );
  23. Query OK, 0 rows affected (0.00 sec)
  24. MariaDB [sqlbzbh]>
  25. MariaDB [sqlbzbh]> SHOW TABLES;
  26. +-------------------+
  27. | Tables_in_sqlbzbh |
  28. +-------------------+
  29. | CustCopy |
  30. | CustNew |
  31. | Customers |
  32. | OrderItems |
  33. | Orders |
  34. | Products |
  35. | ProductsNew |
  36. | Vendors |
  37. +-------------------+
  38. 8 rows in set (0.00 sec)
  39. MariaDB [sqlbzbh]>

17.1.2 使用NULL值

NULL值含义是没有值或缺值,不是空字符串。

每个表列要么是NULL列,要么是NOT NULL列,这种状态在创建时由表的定义规定。

大多数DBMS中,如果不指定NOT NULL时,将默认为NULL。

主键是其值唯一标识表中每一行的列。只有不允许NULL值的列可作为主键。

  1. MariaDB [sqlbzbh]> CREATE TABLE VendorsNew
  2. -> (
  3. -> vend_id char(10) NOT NULL ,
  4. -> vend_name char(50) NOT NULL ,
  5. -> vend_address char(50) NULL ,
  6. -> vend_city char(50) NULL ,
  7. -> vend_state char(5) NULL ,
  8. -> vend_zip char(10) NULL ,
  9. -> vend_country char(50) NULL
  10. -> );
  11. Query OK, 0 rows affected (0.00 sec)
  12. MariaDB [sqlbzbh]>

17.1.3 指定默认值

在CREATE TABLE语句的列定义中用关键字DEFAULT指定默认值。

建议使用DEFAULT值而不是NULL值。

默认值经常用于日期或时间戳列。

  1. MariaDB [sqlbzbh]> CREATE TABLE OrderItemsNew
  2. -> (
  3. -> order_num int NOT NULL ,
  4. -> order_item int NOT NULL ,
  5. -> prod_id char(10) NOT NULL ,
  6. -> quantity int NOT NULL DEFAULT '1',
  7. -> item_price decimal(8,2) NOT NULL
  8. -> );
  9. Query OK, 0 rows affected (0.00 sec)
  10. MariaDB [sqlbzbh]>
  11. MariaDB [sqlbzbh]> SELECT CURRENT_DATE();
  12. +----------------+
  13. | CURRENT_DATE() |
  14. +----------------+
  15. | 2016-12-29 |
  16. +----------------+
  17. 1 row in set (0.00 sec)
  18. MariaDB [sqlbzbh]>

17.2 更新表

使用ALTER TABLE语句更新表定义。

  • 理想情况下,不要在表中包含数据时对其进行更新。
  • 不同DBMS对允许更新的内容差别巨大,需要慎重地区别对待。

使用ALTER TABLE更改表结构,必须具备下面信息:

  • 要更改的表名(必须已经存在)
  • 要更改的列

添加、更改或删除列、增加约束或增加键,这些操作都使用类似的语法。

复杂的表结构更改,一般需要手动建新表、复制数据、检验、重命名或删除旧表等过程,而且可能需要重建触发器、存储过程、索引和外键。

使用ALTER TABLE必须极为小心,应该提前做好完整的备份(表结构和数据的备份)。

  1. MariaDB [sqlbzbh]> SELECT * FROM Vendors;
  2. +---------+-----------------+-----------------+------------+------------+----------+--------------+
  3. | vend_id | vend_name | vend_address | vend_city | vend_state | vend_zip | vend_country |
  4. +---------+-----------------+-----------------+------------+------------+----------+--------------+
  5. | BRE02 | Bear Emporium | 500 Park Street | Anytown | OH | 44333 | USA |
  6. | BRS01 | Bears R Us | 123 Main Street | Bear Town | MI | 44444 | USA |
  7. | DLL01 | Doll House Inc. | 555 High Street | Dollsville | CA | 99999 | USA |
  8. | FNG01 | Fun and Games | 42 Galaxy Road | London | NULL | N16 6PS | England |
  9. | FRB01 | Furball Inc. | 1000 5th Avenue | New York | NY | 11111 | USA |
  10. | JTS01 | Jouets et ours | 1 Rue Amusement | Paris | NULL | 45678 | France |
  11. +---------+-----------------+-----------------+------------+------------+----------+--------------+
  12. 6 rows in set (0.00 sec)
  13. MariaDB [sqlbzbh]>
  14. MariaDB [sqlbzbh]> ALTER TABLE Vendors ADD vend_phone CHAR(20);
  15. Query OK, 6 rows affected (0.01 sec)
  16. Records: 6 Duplicates: 0 Warnings: 0
  17. MariaDB [sqlbzbh]>
  18. MariaDB [sqlbzbh]> SELECT * FROM Vendors;
  19. +---------+-----------------+-----------------+------------+------------+----------+--------------+------------+
  20. | vend_id | vend_name | vend_address | vend_city | vend_state | vend_zip | vend_country | vend_phone |
  21. +---------+-----------------+-----------------+------------+------------+----------+--------------+------------+
  22. | BRE02 | Bear Emporium | 500 Park Street | Anytown | OH | 44333 | USA | NULL |
  23. | BRS01 | Bears R Us | 123 Main Street | Bear Town | MI | 44444 | USA | NULL |
  24. | DLL01 | Doll House Inc. | 555 High Street | Dollsville | CA | 99999 | USA | NULL |
  25. | FNG01 | Fun and Games | 42 Galaxy Road | London | NULL | N16 6PS | England | NULL |
  26. | FRB01 | Furball Inc. | 1000 5th Avenue | New York | NY | 11111 | USA | NULL |
  27. | JTS01 | Jouets et ours | 1 Rue Amusement | Paris | NULL | 45678 | France | NULL |
  28. +---------+-----------------+-----------------+------------+------------+----------+--------------+------------+
  29. 6 rows in set (0.00 sec)
  30. MariaDB [sqlbzbh]>

17.3 删除表

使用DROP TABLE语句删除表。

许多DBMS允许强制实施有关规则,防止删除与其他表相关联的表。

  1. MariaDB [sqlbzbh]> SHOW TABLES;
  2. +-------------------+
  3. | Tables_in_sqlbzbh |
  4. +-------------------+
  5. | CustCopy |
  6. | Customers |
  7. | OrderItems |
  8. | Orders |
  9. | Products |
  10. | Vendors |
  11. +-------------------+
  12. 6 rows in set (0.00 sec)
  13. MariaDB [sqlbzbh]>
  14. MariaDB [sqlbzbh]>
  15. MariaDB [sqlbzbh]> DROP TABLE CustCopy;
  16. Query OK, 0 rows affected (0.00 sec)
  17. MariaDB [sqlbzbh]>
  18. MariaDB [sqlbzbh]> SHOW TABLES;
  19. +-------------------+
  20. | Tables_in_sqlbzbh |
  21. +-------------------+
  22. | Customers |
  23. | OrderItems |
  24. | Orders |
  25. | Products |
  26. | Vendors |
  27. +-------------------+
  28. 5 rows in set (0.00 sec)
  29. MariaDB [sqlbzbh]>

17.4 重命名表

不同的DBMS对重命名操作的有不同的定义和实现。

MySQL和MariaDB使用RENAME语句。

所有重命名操作的基本语法都要求指定旧表名和新表名。

读书笔记--SQL必知必会17--创建和操纵表的更多相关文章

  1. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  2. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  3. 读书笔记--SQL必知必会--建立练习环境

    书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...

  4. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  5. SQL语法语句总结(《SQL必知必会》读书笔记)

    一.SQL语句语法 ALTER TABLE ALTER TABLE 用来更新已存在表的结构. ALTER TABLE tablename (ADD|DROP column datatype [NULL ...

  6. [SQL必知必会] 读书笔记

    第1课 数据库 这一课介绍SQL究竟是什么,它能做什么事情.   1.1 数据库基础 下面是一些数据库概念的简要介绍,如果你刚开始接触数据库,可以由此了解必需的基本知识.   1.1.1 数据库 数据 ...

  7. 【读书笔记】【数据库】SQL必知必会

    第1课 了解SQL 简单介绍了sql,和dbms,无重点. 第2课 检索数据 重点:select语句,distinct,limit,注释 1. select 语句如果没有明确排序查询结果,那么返回的数 ...

  8. 《SQL 必知必会》读书笔记

    第1课 了解 SQL 这章主要介绍了数据库,表,字段类型,行,列,主键和SQL等基本概念. 数据库:以某种形式存储的数据集合,在计算机上的表现形式可能是一个文件或者一组文件.我们平时所说的数据库,往往 ...

  9. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  10. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

随机推荐

  1. Tomcat一个BUG造成CLOSE_WAIT

    之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...

  2. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  3. AngularJS过滤器filter-保留小数,小数点-$filter

    AngularJS      保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...

  4. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  5. (JS+CSS)实现图片放大效果

    代码很简单,在这里就不过多阐述,先上示例图: 实现过程: html部分代码很简单 <div id="outer"> <p>点击图片</p> &l ...

  6. PHP好用但又容易忽略的小知识

    1.PHP函数之判断函数是否存在 当我们创建了自定义函数,并且了解了可变函数的用法,为了确保程序调用的函数是存在的,经常会先使用function_exists判断一下函数是否存在.同样的method_ ...

  7. SQL-union

    集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个结果)联合(union)与连接(jo ...

  8. Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  9. 使用MonoTouch.Dialog简化iOS界面开发

    MonoTouch.Dialog简称MT.D,是Xamarin.iOS的一个RAD工具包.它提供易于使用的声明式API,不需要使用导航控制器.表格等ViewController来定义复杂的应用程序UI ...

  10. ABP教程-通过ABPboilerplate模版创建项目

    开篇说明: 此篇博客是属于半教程博客,为什么说是半教程呢.因为我不会打算说什么理论性的东西,没必要.要看理论性的资料以及基础信息,请前往tkb至简和@阳光铭睿的博客查看文档资料. 开发环境: vs20 ...