mysql的约束

文章目录

  • 一、主键约束
  • 二、主键约束+自增
  • 三、联合主键
  • 四、外键约束
  • 五、非空约束
  • 六、唯一约束
  • 七、默认约束
  • 八、检查约束


一、主键约束

  • 作用:保证主键的值唯一且非空
  • 1张表只能创建1个主键
  • 格式
-- 创建表时添加
create table t1
(
    id int primary key
);

-- 创建表之后添加
alter table t1 add primary key (id);

-- 删除
alter table t1 drop primary key;

二、主键约束+自增

  • 规则
    • 插入数据null就会自增1
    • 即使自增1,也可以插入任意id:1、2、10
    • 自增数值只增不减,在历史的最大值的基础上+1;删除的数据也算是历史记录
  • 格式
-- 创建表时添加
create table t2
(
    id int primary key auto_increment
);

-- 创建表之后添加
alter table t2 add primary key auto_increment(id);

三、联合主键

  • 作用:保证多个字段联合在一起是唯一的
  • 1张表主键只能存在1个,当表中存在主键后,就不能再创建联合主键了
  • 联合主键列中任意单个字段是可以重复的
  • 使用场景:比如教师学生关联表,需要教师id、学生id两个个字段联合起来是唯一的,此时该表可以不创建主键字段
  • 格式
-- 创建表时添加
create table teacher_student
(
    t_id int comment '教师id',
    s_id int comment '学生id',
    primary key(t_id,s_id)
);

-- 窗机岸标之后添加
alter table teacher_student add primary key (t_id,s_id);

-- 删除
alter table teacher_student drop primary key;

四、外键约束

  • 外键:外键是用于建立关系的字段,值通常指向另外一张表的主键
  • 添加外键约束的字段,值可以为null,可以重复,但是值不能是关联表中不存在的数据,外键指向的数据不能先删除,外键指向的表也不能先删除,就是不能失去依赖
  • 格式
-- 语法
constraint 约束名称(一般fk_表名_字段名) foreign key(外键字段名) references 依赖的表名(依赖的字段名)

-- 创建表时添加
-- 分类id关联分类表的id
create table t2
(
    id bigint primary key auto_increment,
    category_id bigint comment '分类id',
    constraint fk_t2_category_id foreign key(category_id) references category(id)
);

-- 创建表之后添加
alter table t2 add constraint fk_t2_category_id foreign key(category_id) references category(id);

-- 删除
alter table t2 drop foreign key fk_t2_category_id;

五、非空约束

  • 作用:保证该字段的值不能为null
  • 插入null值时会报错!
  • 格式
create table t1
(
    create_time datetime not null comment '创建时间'
);

六、唯一约束

  • 作用:该字段的值不能重复
  • 与主键的异同:
    • 唯一约束和主键约束相似的是它们都可以确保列的唯一性
    • 唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值
  • 添加唯一约束时,会为表创建一个相应的BTREE索引,所以删除索引即可删除约束
  • 格式
-- 创建表时添加
create table t1
(
    name varchar(50) unique comment '姓名'
);

-- 创建表之后
alter table t1 add unique(name);

-- 删除
drop index name on t1;

七、默认约束

  • 作用:插入数据没有赋值时,会为该列赋值设置的默认值
  • 格式
-- 创建表时添加
create table t1
(
    num int default 0 comment '数量'
);

--创建表之后添加
alter table t1 modify num int default 0 comment '数量';

-- 删除
alter table t1 modify num int comment '数量';

八、检查约束

  • 作用:限定这个字段的值
  • 格式
-- 创建表时添加
create table t1
(
    num int check(num=1 or num=2) comment '数量',
    age int check(age>0 and age<150) comment '年龄'
);

-- 创表之后添加
alter table t1 add constraint num check(num>0);

-- 删除
alter table t1 drop constraint num;

你可能感兴趣的:(mysql,mysql,sql,数据库)