一、表约束:1.非空约束 ((not null))
例子:
createtabletb1(
idintnotnull,#非空约束字段,insert 的时候,必须添加字段,不能省略,空字符不等于null
namevarchar(20)notnull
);
# 如果在创建表时没有添加非空约束
# 后续手动添加非空约束(必须这个字段,没有NULL值)
altertabletb1# 修改表结构
modifyidintnotnull;
# 取消非空约束
altertabletb1
modifyidint;
2.唯一约束 (unique key)
例子:
createtabletb2(
idintuniquekey,# 防止id相同
)
# 如果在创建表时没有添加非空约束
# 后续手动添加唯一约束
altertabletb1# 修改表结构
adduniquekey(name);
# 删除唯一约束
altertabletb1
dropkeyname;
3.自增长 (auto_increment)
createtablestu3(
idintprimarykeyauto_increment,# 自增长,输错时在终端不会占用数据,在其他连接工具如pycharm中就会占用一条数据
namevarchar(10)
)auto_increment100
insertintostu3value('a');
insertintostu3(name)value('bc');
select*fromstu3;
# 如果在创建表时没有添加自动增长
# 后续手动添加自动增长
altertablestu3# 修改表结构
modifyidintauto_increment;
# 删除自动增长
altertablestu3
modifyidint;
4.默认约束 (default)
createtablestu4(
idintprimarykeyauto_increment,
namevarchar(20)notnull,
ageintnotnulldefault18# 默认约束
);
insertintostu4value(1,'张三','18');
insertintostu4value(2,'李四','');#会报错
insertintostu4(id,name)value(2,'玲玲');#设置要输入的字段值,age可为空字符串
insertintostu4value(6,'',19);#空字符串 != null
# 如果在创建表时没有添加默认约束
# 后续手动添加默认约束
altertablestu4# 修改表结构
modifyageintdefault20;
# 删除默认约束
altertablestu4
modifyageint;
5.主键约束 (primary key)
主键作用:
主键特性:
createtablestu2(
idintprimarykey,# id是主键,主键不能为空
namevarchar(10)
);
descstu2# 此时可以看到id的key变为pri,且Null下变为NO
# 如果在创建表时没有添加主键约束
# 后续手动添加主键约束
altertablestu2# 修改表结构
addprimarykey(id);
# 删除主键约束
altertablestu2# 修改表结构
dropprimarykey;
6.外键约束 (foreign key)
# 表a
createtablea(
a_idintprimarykeyauto_increment,
a_namevarchar(20)notnull
);
# 表b
createtableb(
b_idintprimaryke,
b_namevarchar(20)notnull,
fy_idintnotnull,
constraintAB_idforeignkey(fy_id)referencesa(a_id)# 外键约束定义
);
# 说明:
1,通过(fy_id)关联到(a_id)中,然后重新命名为 AB_id(其中constraint 可不写)
2,外键约束定义,B表中的fy_id,只能添加a_id中已有的数据。A表中的a_id 被参照的数据,不能被修改和删除。
# 如果在创建表时没有添加外键约束
# 后续手动添加外键约束
altertableb# 修改表结构
constraintAB_idforeignkey(fy_id)referencesa(a_id);
# 删除外键约束
altertablestu2# 修改表结构
dropforeignkeyAB_id;
二、表关系
1,一对一:
用外键的方式,把两个主键关联
2,一对多:
3,多对多:
#创建学生表
createtablesst(
idintprimarykeyauto_increment,
namevarchar(10)notnull
);
#创建选课表(中间表)
createtablecourse(
s_idintprimarykey,#记录学生的id
course_idint,#用来记录课程id
primarykey(s_id,course_id)#联合主键(此组合为唯一的,防止一个id重复报一个课程)
foreignkey(s_id)referencesstudent(id_v),#关联学生id 外键
foreignkey(course_id)references(course_id)#关联课程id 外键
namevarchar(10)notnull,
);
insertintocoursvalues(001,'py'),(002,'java'),(003,'japan');
insertintosshvalues(11,'a'),(22,'b'),(33,'c');
insertintocoursevalues(22,3),(11,2);# 用中间表来多对多
select*fromcourse;
领取专属 10元无门槛券
私享最新 技术干货