MySQL(三)——约束

约束constraint

  • 完整性约束条件,简称约束,用于保证表中数据的完整性和安全性。
  • 约束是对表进行的一种强制性的校验规则。
  • 在进行DML操作时,必须符合约束条件,否则不能执行。

非空约束 not null

  • 非空约束:not null,简称NN

  • 如果对字段设置了not null,在DML操作,不能为空。

  • 建表写法:

create table tableName(tid int,tname varchar(20) not null,tage int);
  • 建表后写法:
#格式alter table tableName modify colName type not null;#例子:create table t_person( id int primary key, pname varchar(255) );alter table t_person modify pname varchar(255) not null;

唯一性约束 unique

  • 唯一性约束:unique,简称 UK

  • 如果字段设置了唯一性约束,那么在表中此字段的值不能重复,但是可以为null(无穷大不等于无穷大)

  • 建表写法

create table tableName( tid int, tname varchar(20) not null, username varchar(20) unique);

主键约束 primary key

  • 主键约束:primary key,简称PK

  • 主键约束是非空约束和唯一性约束的组合形式,表示字段的值不能为null且唯一。通常用于作为记录的唯一标识来 使用。

  • 选择主键约束的字段要求:
    1.对业务需求没有意义的字段,比如序号
    2.如果设置了主键约束,那么此字段最好不好人为的修改。而是自动生成。使用auto_increment(自增序列)
    3.不建议对动态赋值的字段进行设置,比如时间戳。

  • 建表时写法:

create table tableName(tid int primary key auto_increment, tname varchar(20) not null);
  • 建表后设置:
alter table tableName add primary key(colName);#一个主键的情况create table t_person( id int primary key, pname varchar(255));#多个主键create table t_person( id int, pname varchar(255), primary key(id, pname));#先建表,后添加主键create table t_person( id int, pname varchar(255));alter table t_person add primary key (id, pname);

自增约束 auto_increment

create table t_person( id int primary key auto_increment, pname varchar(255));insert into t_person values (0, ‘张三丰‘);select * from t_person;

insert into t_person values (5, ‘张无忌‘);select * from t_person;

insert into t_person (pname) values (‘周芷若‘);select * from t_person;

insert into t_person values (100, ‘乔峰‘);select * from t_person;

insert into t_person values (0, ‘虚竹‘);select * from t_person;

delete from t_person;insert into t_person values (0, ‘扫地僧‘); select * from t_person;

truncate t_person;insert into t_person values (1, ‘王语嫣‘);select * from t_person;

外键约束

  • 外键约束:foreign key,简称FK

  • 外键约束是指 字段A的值,依赖于字段B的值。这两个字段可以在同一张表中,也可以在不同的表中。字段A所在的
    表称之为从表(副表),字段B所在的表称之为主表(父表)。字段A的值也可以为null. 字段B必须为主键约束。

  • 建表时写法

create table tableName(tid int primary key auto_increment, tname varchar(20), tmgr int,constraint constraintName Foreign key(tmgr) references tableName(tid));

建表后写法:

alter table tableName add constraint constraintName foreign key(colName1) references tableName2(colName2)
#建表时添加外键# 学生表: (学号、姓名、性别、年龄、班级)# 班级表: (班级号、班级名称)create table t_cls( cid int primary key auto_increment, cname varchar(255) not null);create table t_stu( sid int primary key auto_increment, sname varchar(255) not null, sage int default 0, cid int, -- 添加外键 constraint fk_stu_cls_cid foreign key(cid) references t_cls(cid));-- 建表之后追加外键alter table t_stu add constraint fk_stu_cls_cid foreign key(cid) references t_cls(cid);-- 外键的删除alter table t_stu drop foreign key fk_stu_cls_cid;

检查约束

  • 检查约束:check,简称ck。

  • mysql不支持,可以使用枚举代替。

  • 建表语句:

create table tableName( tid int, tname varchar(20), tgender char(1) check(tgender in(‘f‘,‘m‘)));
#案例:create table temp_5( tid int, tname varchar(20), tgender char(1) check(tgender in(‘f‘,‘m‘)) #语法通过,但是不生效 ); insert into temp_5 values (1001,‘zs‘,‘a‘); select * from temp_5; #案例:create table temp_6( tid int, tname varchar(20), tgender enum(‘f‘,‘m‘) #枚举写法 ); insert into temp_6 values (1001,‘zs‘,‘m‘);

相关文章