MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息;
约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。
常用五类约束:
not null:非空约束,指定某列不为空
unique: 唯一约束,指定某列和几列组合的数据不能重复
primary key:主键约束,指定某列的数据不能重复、唯一
foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据
check:检查,指定一个表达式,用于检验指定数据
注意: MySQL不支持check约束,但可以使用check约束,而没有任何效果;
根据约束数据列限制,约束可分为:
单列约束:每个约束只约束一列
多列约束:每个约束约束多列数据
参考:http://blog.csdn.net/kqygww/article/details/8882990
1.(not null)非空约束:列值不能为空;
CREATE TABLE sys_user(
id INT NOT NULL,
user_name VARCHAR(20) NOT NULL DEFAULT 'chensan',
salary DECIMAL(8,2),
birthday DATE
);
设置not null的列必须不能为空,否则操作报错;通常对非空的列设置默认值(default),当然未设置非空的列也可以设置default;
此表的id和user_name都为非空列,user_name列如果不设置值,会自动赋值‘chensan’;
CREATE TABLE sys_user(
id INT,
user_name VARCHAR(20),
salary DECIMAL(8,2),
birthday DATE
);
为id列增加非空约束:ALTER TABLE sys_user MODIFY id INT NOT NULL;-- 则id列不能为空;
去掉id列的非空约束:ALTER TABLE sys_user MODIFY id INT;-- 则id列可为空;
2.(unique)唯一约束:
CREATE TABLE sys_user(
id INT UNIQUE,
user_name VARCHAR(20),
salary DECIMAL(8,2),
birthday DATE
);
为id设置唯一约束,则不同记录行的id不允许相同;但请注意,当有记录行id的值为null,其它记录行的id也可以为null,因为每个null都不相等;