python进阶(八、mysql:完整性约束)

3.mysql数据库
3.6 完整性约束
约束某一字段:
3.6.1. 无符号(+-):数值型 unsigned
3.6.2. 不能为空:not null
1)建表:

2)插入数据:

设置严格模式后,非空字段不赋值会新增失败。

3)设置严格模式:
不支持对not null字段插入null值
不支持对自增长字段插入””值
不支持text字段有默认值
方法一:直接在mysql中生效(重启失效):
mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

方法二:配置文件(my.ini)添加(永久失效):
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
注意:最好用pycharm或Notepad++打开“my.ini”,不要更改文件的utf-8编码方式

非空字段赋值后,数据添加成功

3.6.3. 默认值:default
1)建表

2)插入数据

3.6.4. 唯一约束:unique
唯一约束,指定某列或几列组合不能重复。mysql可以写入多个空(NULL)
1)建表


Key PRI(主键):第一个非空且唯一(not null unique)的字段

2)插入数据

3)mysql可以写入多个空(NULL)
字段id约束唯一,但添加多个数据时没有赋值id,可以添加成功

4)联合唯一

(1)建表

(2)插入数据

3.6.5. 主键:primary key
主键:表中的每一条数据的该字段都是表格中的唯一值。
主键要求:唯一 + 非空

1)默认主键
第一个非空且唯一的字段会成为这张表的primary key(主键),每张表只有一个主键。

2)指定主键 primary key

3)联合主键(很少使用)
主键可以包含一个字段或多个字段。当主键包含多个栏位时,称为联合主键。

查看建表详细信息,定义联合主键后ip和port被赋予默认值’’(空字符串)。

联合主键要求联合后的数据不为空且唯一。

修改数据后,添加成功

3.6.6. 自增:auto_increment
自增只对数值类型的字段有效。
自增至少要在unique(唯一)约束之后,可在primary key之后。
自增主要用于id字段,当新增数据时,可能不知道最后的id是多少,查出来再加一很麻烦,直接使用自增即可。

1)建表

通常使用时,设置主键并自增。

2)添加数据

自增字段赋值后,再新增数据会在赋值的基础上继续自增。

自增字段赋值后,再新增数据会在最大值基础上继续自增。

最大值数据被删除后,再新增数据。自增字段的数值会在原来最大值的基础上增加。

注意:设置了自增,建议不要手动赋值。容易造成数据混乱。
如果自增从某一数值(例如:10001)开始,可以在新增第一条数据时进行赋值,后面的数据自增

3.6.7. 外键:foreign key
1)外键的使用条件:
(1)两个表必须是InnoDB表,MyISAM表暂时不支持外键
(2)外键关系的两个表的字段必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以

2)外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。

3)外键的使用:
(1)创建表单时,先创建被关联的表单
(2)被关联的字段,即references指定的另外一个表的字段,必须保证唯一(unique或primary key)
(3)创建数据时,先创建被关联的数据


(4)要先删除关联数据,才能删除被关联数据。

(5)修改被关联字段报错

4)级连更新和级连删除
cascade方式:在父表上update/delete记录时,同步update/delete掉子表的匹配记录



注意:on delete cascade尽量不用,容易误删除数据

原文地址:https://www.cnblogs.com/bdzxh/p/14084079.html