数据库表需要设置各种约束,以保证数据的准确性。约束的本质是通过技术手段强制程序员插入正确的数据。
一、非空约束
字段取值通常为 NULL(默认)和 NOT NULL(不为空)。
数据库默认字段基本允许为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
NULL 与空字符串的区别
NULL:表示什么都没有; '':有,但是为空。
二、Default 约束
DEFAULT 类似于 C++ 的缺省值。
NOT NULL AND DEFAULT:如果表中未设置 DEFAULT 和 NOT NULL,默认行为可能因引擎而异,建议显式声明。
三、Comment 列描述
列描述即列注释,用于说明字段含义。
四、Zerofill 约束
ZEROFILL 通常配合 INT 类型使用。例如 int(10) 配合 zerofill,若数值不足 10 位则用 0 补充显示。
五、主键约束
PRIMARY KEY 用于唯一约束字段数据,不可重复且不可为空。一张表最多只能有一个主键,通常使用整数类型。
去除主键约束:
ALTER TABLE table_name DROP PRIMARY KEY;
添加主键约束:
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
复合主键:可以给多列设置主键。只有当所有主键列的值同时与过往数据相同时,才会产生主键冲突。
六、Auto Increment 约束
AUTO_INCREMENT 字段在插入时若无值,系统会自动从当前最大值 +1。通常与主键搭配作为逻辑主键。
自增长的特点:
- 任何一个字段要做自增长,前提是本身是一个索引。
- 自增长字段必须是整数。
- 一张表最多只能有一个自增长。
自定义自增长值:可以指定自增长字段的初始值。
查看最后一次的插入的自增长的值:
SELECT LAST_INSERT_ID();
七、唯一键
主键不允许为 NULL,而唯一键允许为 NULL。NULL 不参与计算。
注意:一张表中只能有一个主键,但是可以有多个唯一键。
八、外键
外键主要用于定义表与表之间的关系,通常定义在从表上。主表必须有主键或 UNIQUE 约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为 NULL。
创建外键示例:
ALTER TABLE child_table ADD FOREIGN KEY (column_name) REFERENCES parent_table(primary_key);


