MySQL - 建表约束

  • 主键约束

能够唯一确定一张表中的一条记录

create table user(
    -> id int primary key,
    -> name varchar(20));
    • 联合主键:

允许一列有重复,只要不是所有主键列都重复即可,且任何一个字段不能为空

create table user2(
    -> id int,
    -> name varchar(20),
    -> password varchar(20),
    -> primary key(id,name));
    •  如果建表时未创建主键约束

修改表结构,添加主键

alter table user4 add primary key(id);

如何删除

alter table user4 drop primary key;

修改字段的方式添加主键

alter table user4 modify id int primary key;
  • 自增约束
create table user3(
    -> id int primary key auto_increment,
    -> name varchar(20));
  • 唯一键约束

被修饰的字段的值不能重复

unique(id,name)
允许一列有重复,只要不是所有唯一键列都重复即可
create table user6(id int,name varchar(20) unique);

create table user7(id int,name varchar(20),unique(name));

create table user8(id int,name varchar(20),unique(id,name));
删除唯一键
alter table user7 drop index name;

添加唯一键

alter table user5 add unique(name);

alter table user7 modify name varchar(20) unique;
  • 非空约束
create table user9(
    -> id int,
    -> name varchar(20) not null);
  • 默认约束
create table user10(
    -> id int,
    -> name varchar(20),
    -> age int default 10);
  • 外键约束
涉及到两个表:主表和副表
create table classes(
    -> id int primary key,
    -> name varchar(20));

create table students(
    -> id int primary key,
    -> name varchar(20),
    -> class_id int,
    -> foreign key(class_id) references classes(id));
主表中没有的数据值,在副表中是不可以使用的
insert into students values(1005,'赵六',5);

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test0311`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))
主表中的记录被副表引用时,是不可以被删除的
delete from classes where id=4;

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test0311`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))
posted @ 2021-03-12 21:19  小王随便写  阅读(118)  评论(0)    收藏  举报