007_SQL约束

1. SQL约束用于规定表中的数据规则。如果存在违反约束的数据行为, 行为会被约束终止。

2. 约束可以在创建表时规定(通过 create table 语句), 或者在表创建之后规定(通过alter table语句)。

3. 在SQL中, 常用的有如下约束

3.1. not null: 指示某列不能存储null值。

3.2. unique: 保证某列的每行必须有唯一的值。

3.3. primary key: not null和unique的结合。确保某列(或两个列多个列的结合)有唯一标识, 有助于更容易更快速地找到表中的一个特定的记录。

3.4. foreign key: 保证一个表中的数据匹配另一个表中的值的参照完整性。

3.5. check: 保证列中的值符合指定的条件。

3.6. default: 规定没有给列赋值时的默认值。

4. not null约束

4.1. 在默认的情况下, 数据库字段基本都是null值。但是实际开发时, 尽可能保证字段不为空, 因为数据为空没办法参与运算。null一般配合default使用: default null。

4.2. not null约束强制字段始终包含值。这意味着, 如果不向字段添加值, 就无法插入新记录或者更新记录。

4.3. 创建一个notNull表使用not null约束和null默认值。

4.4. 向notNull表中只插入name值, 会报错提示:Field 'age' doesn't have a default value, 因为我们设置age为not null, 也没有默认值。向notNull表中只插入age值, 会插入成功, 因为name默认是为空的。

4.5. 给name字段添加not null约束(其实就是修改列)。

4.6. 删除name字段的not null约束(其实就是修改列)。

5. default约束

5.1. 如果某一种数据会经常性的出现某个具体的值, 可以在一开始就指定好, 在需要真实数据的时候, 用户可以选择性的使用默认值。

5.2. 创建一张defaultValue表, sex字段使用默认值。

5.3. 在插入数据的时候不给sex字段赋值, 就使用默认值。

5.4. 给name字段添加默认值约束。

5.5. 删除name字段的默认值约束

6. unique约束

6.1. unique约束唯一标识数据库表中的每条记录。

6.2. 每个表可以有多个unique约束, 唯一键允许为空, 但不能重复, 空字段不做唯一性比较, 也就是说可以允许多个null值。

6.3. 唯一约束实际上也是一个索引。

6.4. 创建一个uniqueConstraints1表, 并在id字段使用唯一约束。

6.5. 创建一个uniqueConstraints2表, 并在id字段使用唯一约束, 约束名字为uc2。

6.6. 创建一个uniqueConstraints3表, 并在id和name字段使用唯一约束。

6.7. 创建一个uniqueConstraints4表, 并在id和name字段使用唯一约束, 约束名字为uc4。

6.8. 撤销unique约束。

6.9. 添加unique约束。

6.10. 插入表数据, 唯一列可以插入null(因为我们也设置了允许为空), 多行数据可以有多个null。当插入相同值时, 就会报错。

7. primary key约束

7.1. primary key约束唯一标识数据库表中的每条记录。

7.2. 主键列不能包含null值。

7.3. primary key约束拥有自动定义的unique约束。

7.4. 每个表都应该有一个主键, 并且每个表只能有一个主键。

7.5. 主键有单主键和复合主键之分。

7.6. 创建一个primaryKey1表, 并给id字段添加主键约束。

7.7. 创建一个primaryKey2表, 并给id字段添加主键约束, 约束名为pk2。

7.8. 创建一个primaryKey3表, 并给id和name字段添加主键约束。

7.9. 创建一个primaryKey4表, 并给id和name字段添加主键约束, 约束名为pk4。

7.10. 删除主键约束。

7.11. 添加主键约束。

8. 自增长auto_increment

8.1. auto_increment会在新记录插入表中时生成一个唯一的数字。

8.2. 一般使用主键和自增长搭配使用。

8.3. auto_increment对应的字段, 如果把一个NULL插入到一个AUTO_INCREMENT数据列里去, MySQL将自动生成下一个序列编号。

8.4. 默认地, auto_increment的开始值是1, 每条新记录递增1。

8.5. 创建autoIncrement1表, id是主键, 并且自动增长。

8.6. 插入几条数据id字段都传入NULL值, id会自动从1开始递增。

8.7. 删除数据, 从新插入, 自动增长列是从之前的最大值继续开始增长的, 并不是从我们表中已有数据的值开始增长。说明MySQL自己维护了一个序列编号, 不受我们删除数据的影响。

8.8. 设置自动递增从100开始。

8.9. 插入数据, 查询自动递增从100开始的表数据。

8.10. 删除字段的自动递增(其实就是修改列)。

8.11. 给字段添加自动递增(其实就是修改列)。

9. foreign key约束

9.1. 一个表中的foreign key指向另一个表中的unique key(唯一约束的键)。

9.2. foreign key约束能防止非法数据插入外键列, 因为它必须是它指向的那个表中的值之一。

9.3. 添加外键约束的同时会添加一个唯一约束。

9.4. 创建一个User表, id是主键。创建一个Orders表, id是主键, uid是外键, uid指向User表的id列。

9.5. 卸载外键约束。

9.6. 添加外键约束。

10. check约束

10.1. check约束用于限制列中的值的范围。

10.2. 如果对单个列定义check约束, 那么该列只允许特定的值。

10.3. 创建一个Check1表, 给id列添加大于0约束。

10.4. 创建一个Check2表, 给id列添加大于0约束, 并且设置约束名为c2。

10.5. 创建一个Check3表, 给id列添加大于0和name列姓李约束。

10.6. 创建一个Check4表, 给id列添加大于0和name列姓李约束, 并且设置约束名为c4。

10.7. 删除check约束。

10.8. 添加check约束。

11. 列描述comment

11.1. comment没有实际含义, 专门用来描述字段, 会根据表创建语句保存, 用来给程序员或DBA来进行了解。

11.2. 创建commentDesc表, 使用comment进行字段描述。

11.3. 删除name字段的comment描述(其实就是修改列)。

11.4. 添加name字段的comment描述(其实就是修改列)。

12. zerofill自动填充0

12.1. 如果某一数值列规定了zerofill, 则自动把此列变为无符号整数。如果数据长度没有达到规定长度, 则在数据前自动填充0。只能用于约束数值类型。

12.2. 创建zeroFill表, age字段使用zerofill。

12.3. 插入数据, age的值是16, 不满足11为长度, 使用0来填充。zerofill属性只是设置了一种格式化输出而已,数据库内部存储的还是本来的数。

12.4. 删除age字段的零填充(其实就是修改列)。

12.5. 添加age字段的零填充(其实就是修改列)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值