完美地建个表~
在我们第一天便简单介绍了SQL中表的创建方式,而今天,我们将学习更“完善”的表创建和操纵。
万物基础的“CREATE TABLE”
其实目前市场上有不少针对SQL具有交互式创建和管理表的工具,而在运用那些工具时,实际上使用的还是MySQL语句。只不过那些语句不是用户亲自编写的,而是界面工具会自动生成并执行相应的MySQL语句,更改也是同理。
不过当然,我们今天的重点还是如何利用MySQL语句对表进行操纵。
在SQL中创建表最基础的便是CREATE TABLE语句,它需要:
- 在关键字CREATE TABLE之后给出的新表名称;
- 表列的名字和定义,用逗号分隔。
具体详情可以参考《SQL之突然入门》。
需要多提一句的是,在创建新表时,指定的表名必须不存在,否则SQL将会出错。如果要防止意外覆盖已有的表,SQL要求首先手工删除该表,然后再重建它,而不是简单地用创建表语句覆盖它。
而删除表的做法也很简单,使用DROP TABLE即可:
DROP
注意!执行这条语句后该表便永久删除无法恢复了!
或者,我们也可以RENAME(重命名)一个表:
RENAME
在这里,我们将“表一”的名字改成了“表名”。
我们甚至可以一口气重命名多个表:
RENAME
一板一眼的“NOT NULL”
我们之前有提过的,NULL就是空值或是缺值。而在建立表的过程中,其实我们可以强制性规定指定列是否可以允许出现NULL值:
CREATE
在这里,列名一的列将不被允许出现NULL值,而列名二的列可以接受NULL值。
如果不允许NULL值,那SQL便不会接受该列没有值的行。
NULL值限定举例
是时候再次祭出我们之前所建立的奇奇怪怪的表了:
CREATE
这里,我们规定了除单价和产品名外都不允许有NULL值,那就让我们试试不同的效果吧~
这里是完整的列表:
INSERT
这里是信息不完整的列表:
INSERT
我们直接得到了报错···
但如果我们只在单价和产品名中设置NULL:
INSERT
这样就显示正常了。
重温主外键
我们之前在《SQL之分久必合(一)》中介绍了主键的概念。主键值必须唯一,表中的每个行必须具有唯一的主键值。
如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。
主键可以在CREATE TABLE中用以下的语句定义:
PRIMARY
定义外键则是:
FOREIGN
主键外键也可以利用ALTER TABLE(下文便有介绍)在事后定义。
主键定义举例
在刚才的订单详情表中,构成主键的其实是订单号和订单货码的组合,因此,我们要将两者结合定义主键:
CREATE
若是订单号是作为唯一值出现的话,那便可以用它设置主键:
PRIMARY
注意,主键中只能使用不允许NULL值的列,因为允许NULL值的列不能作为唯一标识。
高冷的自动增量
有些时候我们需要为增加的每一张订单、每一个新顾客,或者是每一个货品都创建一个新ID。ID本身并没有具体意义,所以最简单的做法就是使用下一个编号。
比如我们的顾客分别是1,2,3,4,5,新增进来的顾客便会用6作为ID。
虽然看着简单,我们可以找到当前的最大值后往上加一,但当多用户应用时,多命令下很容易造成先后执行混乱,并且因为它需要执行额外的MySQL操作而导致效率较低。
这就是AUTO_INCREMENT(自动增量)的作用了。
列名
AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量。这样给每个行分配一个唯一的ID,从而可以用作主键值。
每个表只允许一个AUTO_INCREMENT列,而且它必须被索引,比如用它作为主键。
想要找到最后一个AUTO_INCREMENT的值,可以使用如下代码:
SELECT
自动增量举例
我们来重新建个简单的表来看一下使用自动增量会有什么返回:
CREATE
在这个例子里,我们虽然没有人为设置订单号的值,但是自动增量已经帮我们填充了数值。
SELECT
这里可以看到所有的增量值。
随和的指定默认
如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定:
列名
默认举例
我们在刚才的列表中添加一个“商品数量”的列,并将它的默认值设置为一:
CREATE
我们没有在语句中插入商品数量时,SQL默认其数量为1.
慵懒的更新
为更新表定义,可使用ALTER TABLE语句。但在理想状态下,当表中存储数据以后,该表就不应该再被更新。
ALTER TABLE中,我们只需要相应的表名和列名即可。
更新举例
比如刚才我们想给刚才的订单表加一个列“商品数量”,若是在SQL中直接操作便是这样的:
CREATE
返回结果相同。
为了对单个表进行多个更改,可以使用单条ALTER TABLE语句,每个更改用逗号分隔。
小结
今天我们复习了CREATE TABLE的用法以及如何在其中对列表属性进行定义,并学习了ALTER TABLE(更改表)和DROP/RENAME TABLE(删除/重命名表)的用法。
希望大家看了今天的内容后能熟练掌握在SQL中建立表格的技巧,如果还是有什么疑问或是建议的话,欢迎留言询问~
祝各位学习愉快!
#这里是画风逐渐飘逸【不】的正经(?)学习公众号: