修改 decimal 默认值为0.00 sql_SQL之朝花夕拾(三)

0faf5f2c41690fa476458f296fcf8167.png

完美地建个表~

在我们第一天便简单介绍了SQL中表的创建方式,而今天,我们将学习更“完善”的表创建和操纵。

万物基础的“CREATE TABLE”

其实目前市场上有不少针对SQL具有交互式创建和管理表的工具,而在运用那些工具时,实际上使用的还是MySQL语句。只不过那些语句不是用户亲自编写的,而是界面工具会自动生成并执行相应的MySQL语句,更改也是同理。

不过当然,我们今天的重点还是如何利用MySQL语句对表进行操纵。

在SQL中创建表最基础的便是CREATE TABLE语句,它需要:

  • 在关键字CREATE TABLE之后给出的新表名称;
  • 表列的名字和定义,用逗号分隔。

具体详情可以参考《SQL之突然入门》。

需要多提一句的是,在创建新表时,指定的表名必须不存在,否则SQL将会出错。如果要防止意外覆盖已有的表,SQL要求首先手工删除该表,然后再重建它,而不是简单地用创建表语句覆盖它。

而删除表的做法也很简单,使用DROP TABLE即可:

DROP 

注意!执行这条语句后该表便永久删除无法恢复了!

ce67724568e8ab2d99a99bb77de7220c.png

或者,我们也可以RENAME(重命名)一个表:

RENAME 

在这里,我们将“表一”的名字改成了“表名”。

我们甚至可以一口气重命名多个表:

RENAME 

一板一眼的“NOT NULL”

我们之前有提过的,NULL就是空值或是缺值。而在建立表的过程中,其实我们可以强制性规定指定列是否可以允许出现NULL值:

CREATE 

在这里,列名一的列将不被允许出现NULL值,而列名二的列可以接受NULL值。

如果不允许NULL值,那SQL便不会接受该列没有值的行。

NULL值限定举例

是时候再次祭出我们之前所建立的奇奇怪怪的表了:

CREATE 

这里,我们规定了除单价和产品名外都不允许有NULL值,那就让我们试试不同的效果吧~

这里是完整的列表:

INSERT 

2a3fbeb4273dc1c46373944b8795b6e0.png

这里是信息不完整的列表:

INSERT 

8b57dcd1157f8e7199b6e4bd4469e6ae.png

我们直接得到了报错···

但如果我们只在单价和产品名中设置NULL:

INSERT 

afc7811e04c98172d8931b9ebb4d1138.png

这样就显示正常了。

重温主外键

我们之前在《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 

bbc546205bc101b81d566e23216425fc.png

在这个例子里,我们虽然没有人为设置订单号的值,但是自动增量已经帮我们填充了数值。

SELECT 

4fa2d7f0e2634d1787594b27bed60a65.png

这里可以看到所有的增量值。

随和的指定默认

如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定:

列名 

默认举例

我们在刚才的列表中添加一个“商品数量”的列,并将它的默认值设置为一:

CREATE 

aec13698a1ea5e23f9c18b71cc13589d.png

我们没有在语句中插入商品数量时,SQL默认其数量为1.

慵懒的更新

为更新表定义,可使用ALTER TABLE语句。但在理想状态下,当表中存储数据以后,该表就不应该再被更新。

ALTER TABLE中,我们只需要相应的表名和列名即可。

更新举例

比如刚才我们想给刚才的订单表加一个列“商品数量”,若是在SQL中直接操作便是这样的:

CREATE 

aec13698a1ea5e23f9c18b71cc13589d.png

返回结果相同。

为了对单个表进行多个更改,可以使用单条ALTER TABLE语句,每个更改用逗号分隔。

小结

今天我们复习了CREATE TABLE的用法以及如何在其中对列表属性进行定义,并学习了ALTER TABLE(更改表)和DROP/RENAME TABLE(删除/重命名表)的用法。


希望大家看了今天的内容后能熟练掌握在SQL中建立表格的技巧,如果还是有什么疑问或是建议的话,欢迎留言询问~

祝各位学习愉快!

#这里是画风逐渐飘逸【不】的正经(?)学习公众号:

9600359fe989e5360c7cbfb5fc33f1f7.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值