1. 约束
什么是约束?
就是在表中为某些列添加约束,使该列得值必须符合这个约束。
分类:
约束是作用于表中==字段==上的,可以再==创建表==/==修改表==的时候添加约束。
create table t_teacher(
id int primary key auto_increment, -- 要求该列得值必须唯一且不能为null.
tname varchar(20) unique, -- unique 唯一约束 表示该列得值必须唯一。但是可以运行多个null
age int not null, -- not null 非空约束 表示该列得值不能为null.
sex char(2) default '男' -- default 默认约束 表示如果该列没有给定值 则默认为男
)
select * from t_teacher;
insert into t_teacher(id,tname,age,sex) values(null,'刘德华',15,'女');
-- Duplicate entry '刘德华' for key 'tname' 由于tname具有唯一约束 表中有名字为刘德华 所以不能在添加刘德华名称
insert into t_teacher(id,tname,age,sex) values(null,'刘德华',18,'男');
-- Column 'age' cannot be null 因为age设置了非空约束所以 添加数据时年龄必须有值。
insert into t_teacher(id,tname,age,sex) values(null,'张学友',null,'男');
-- 因为sex有默认约束 所以在添加数据时可以不为sex设置值,则采用默认值。
insert into t_teacher(id,tname,age) values(null,'张学友',22);
2. 外键约束
外键约束用来让两张图的数据之间建立连接,保证数据的一致性和完整性。
-- 外键
create table t_class(
cid int primary key auto_increment,
cname varchar(20)
);
create table t_stu(
sid int primary key auto_increment,
sname varchar(20),
classid int -- 表示外键列。
);
-- add contraint 约束得名称 foregin key 外键得列名 REFERENCES 主表名(主键)
-- alter table 从表名 add contraint 约束名随便起 foreign key 外键列名 references 主表(主键)
alter table t_stu add CONSTRAINT fk_stu_class FOREIGN key (classid) REFERENCES t_class(cid);
insert into t_class values(null,'QY145'),(null,'QY151');
insert into t_stu values(null,'李青华',2);
-- 因为classid=3 这个值 在我们得班级表中不存在。所以不能添加
insert into t_stu values(null,'张青',1);
注意: 外键列得数据类型 必须和主表中主键得数据类型一致。