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尽量不用,容易误删除数据