mysql 字段常见约束

含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性

分类---六大约束:
 

not null:非空,用于保证该字段的值不能为空;比如用户名字段、学号字段等必填项;

default:默认值,用于保证该字段有默认值;比如头像等非必填项,但又需要有个值的字段;

primary key:主键,用于保证该字段的值具有唯一性并且非空;比如学号,员工编号等;

unique:唯一,用于保证该字段的值具有唯一性但可以为空;比如座位号,可以不写,但是写了就不能重复;

check:检查约束【mysql中不支持】;比如年龄、性别,可以检查插入的值是否为设定好的值或设定范围内的值;

foreign key:外键,用于限制两个表的关系的,用于保证该字段的值必须来自于主表关联列的值;比如学生表的专业编号、员工表的部门编号等;

 

添加约束的时机:
 

1、创建表时

2、修改表时

 

约束的添加分类:

1、列级约束

六大约束语法上都支持,但外键约束没有效果

语法:直接在字段名和类型后面追加 约束类型 即可;只支持默认、非空、主键、唯一

//创建学员表
create table stuinfo(
    id int primary key,//主键约束
    stuName varchar(20) not null,//非空约束
    gender char(1) check(gender='男' or gender='女'),//检查约束(mysql不支持,但不报错)
    seat int unique,//唯一约束
    age int default 18,//默认约束
    majorId int references major(id)//外键(在这加不起作用)
);


//创建专业表
create table major(
    id int primary key,
    majorName varchar(20)
);

2、表级约束

六大约束中除了非空和默认,其他都支持

语法:在各个字段的最下面加【constraint 约束名】约束类型(字段名),中括号里的可以省略,会自动生成索引名

create table stuinfo(
    id int,
    stuName varchar(20),
    gender char(1),
    age int default 18,
    seat int,
    majorId int,

    //在这里开始加约束
    primary key(id),//主键约束
    unique(seat),//唯一约束
    foreign key(majorId) references major(id)//外键
    
);

3、通用写法

create table stuinfo(
    id int primary key,
    stuName varchar(20) not null,
    age int default 18,
    seat int unique,
    majorId int,
    
    //加外键
    constraint fk_stuinfo_major foreign key(majorId) references major(id)
    //一般外键起名字,并且开头用fk_,后面接本表名,后面再接外键主表名,通俗易懂
    //foreign key()写的是本表也叫从表的字段名,references major(id)后面接的是主表名和主表关联的字段名
);

 

主键和唯一的对比:
 

1、都可以保证唯一性

2、主键不可以为空,唯一可以为空(但也只允许一条记录为null)

3、主键每个表中至多有一个,唯一可以有多个

4、主键和唯一都可以组合,但不推荐(组合即让两个或多个字段同为主键或唯一,只有当这些字段都相同时才报错)

 

外键的特点:
 

1、要求在从表设置外键关系

2、从表的外键列类型和主表的关联列类型要求一致或兼容,名称无要求

3、主表的关联列必须是一个key(一般是主键或唯一)

4、插入数据时,要先插入主表,再插入从表

5、删除数据时,先删除从表,再删除主表

6、外键有一个更新时和删除时的选项,有以下四种,默认是RESTRICT

①CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;
②SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;
③RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;
④NO ACTION:同 RESTRICT,也是首先先检查外键;

 

修改表时添加约束:

语法:

1、添加列级约束:alter table 表名 modify 字段名 类型 新约束;

2、添加表级约束:alter table 表名 add 【constraint 名称】 约束类型(字段名) 【外键引用】

//所有支持列级添加的都可以这么添加
alter table stuinfo modify column stuName varchar(20) not null;
alter table stuinfo add unique(seat);

//外键只支持表级添加,用下面的方式
alter table stuinfo add constraint fk_stuinfo_major foreign key(majorId) references major(id);

 

修改表时删除约束:


//删除字段stuName的非空约束
alter table stuinfo modify column stuName null;

//删除默认age约束
alter table stuinfo modify column age int;

//删除主键约束
alter table stuinfo drop primary key;

//删除唯一约束
alter table stuinfo drop index seat;

//删除外键约束
alter table stuinfo drop doreign key fk_stuinfo_major;

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读