Mysql键表约束

1. 主键约束

它能够唯一确定表中的一条记录,也就是通过给某个字段添加约束,就可以使得该字段不重复且不为空。
create table user(
id int primary key,
name varchar(20)
);
insert into user values(1,‘张三’); // id=1,name= 张三
//重复插入1.张三就会报错,因为id是主键,具有唯一性所以再插入一个需要修改id
insert into user values(2,‘张三’); // id=2,name= 张三 可以插入
insert into user values(null,‘张三’); // id=null,name= 张三 报错,主键不可以为空值

联合主键
只要联合主键值加起来不重复既可,联合主键中任意一个字段都不能为空
create table user2(
id int,
name varchar(20),
primary key(id,name)
);

//表示id和name 一起作为主键不可重复
insert into user2 values(1,‘张三’);
insert into user2 values(2,‘张三’); // 可以,主键值加起来不为空
insert into user2 values(1,‘lisi’); // 可以
insert into user2 values(null,‘lisi’); // 不可以不能有空值

2.自增约束

一般对主键使用,使其能够自动增长,并且能够默认初始化
create table user3(
id int primary key auto_increment,
name varchar(20)
); // 主键id auto_increment 主键自增,不为空,id字段初始为1,不赋值情况下自增1
insert into user3 values(‘张三’); // 默认初始值为1,插入数据为id=1,name = ‘张三’;
insert into user3 values(‘张三’); // 插入id=2,name =‘张三’;
– 如果创建表的时候忘记创建主键约束?如果修改?
create table user4(
id int,
name varchar(20)
); // 没有主键约束
//查看字段的属性
describe user4; //查看表的所有字段信息
desc user4; // 也可以
在这里插入图片描述// 添加主键约束
alter table user4 add primary key(id);
desc user4;
在这里插入图片描述// 删除主键约束
alter table user4 drop primary key;
desc user4; //查看字段信息发现主键消除了
在这里插入图片描述

//使用modify 修改字段,添加约束
alter table user4 modify id int primary key; // 将id 修改为主键 显示key pri
在这里插入图片描述

3.唯一约束

约束 修饰的字段的值不可以重复,但是可以为空,
create table user5(
id int,
name varchar(20)
);
//添加唯一约束,表示user5 表中的name字段不能重复
alter table user5 add unique(name); // name字段显示UNI表示唯一约束

describe user5; // 显示user5表中的字段信息
insert into user5 values(1,‘zhangsan’);
insert into user5 values(2,‘zhangsan’); // 报错
insert into user5 values(1,‘lisi’); // 插入成功

select * from user5; //打印表中的数据

create table user6(
id int,
name varchar(20),
unique(name)
); // 规定唯一约束 字段name

create table user7(
id int,
name varchar(20) unique
); // 规定唯一约束 字段name

create table user8(
id int,
name varchar(20),
unique(id,name)
);
// 规定唯一约束 字段id,name 联合唯一约束 此时显示key为MUL
//跟联合主键的功能差不多,表示联合的键的相加不同即可,但是其字段可以为null

insert into user8 values(1,‘zhangsan’);
insert into user8 values(2,‘zhangsan’);
//插入成功

–删除唯一约束
alter table user7 drop index name;

–添加唯一约束
alter table user7 modify name varchar(20) unique;
alter table user7 add unique(name);

小结:
1.建表时就添加约束
2.可以使用alter table 表名 modify 字段名 字段类型 unique;
3.alter table 表名 add unique(字段名);
4.删除 alter table 表名 drop index name; // 这是因为唯一键约束添加以后实际上建立了一个索引,将该索引删除就等于删除了唯一约束。

ps:
show index from 表名; // 显示索引表,唯一键,主键

4. 非空约束

修饰的字段不能为空null
create table user9(
id int,
name varchar(20) not null
); // name 字段非空
ps: 主键不能为空不能重复,唯一是不能重复可以为空,非空就是不能为空可以重复

insert into user9 (id) values(1); // error name notnull
insert into user9 values(1,‘zhangsan’); // query ok
insert into user9 (name) values(‘zhangsan’); // query ok

select * from user9;
默认约束
就是当我们插入字段值时,如果没有传值,就会使用默认值

create table user10(
id int,
name varchar(20),
age int default 10
); // 默认值为10
describe user10; // 显示此时user10中age的default 属性值为10
insert into user10(id,name) values(1,'zhangsan');
select * from user10; // 此时显示user10中数据为1 zhangsan 10
insert into user10 values(1,'zhangsan',20); // 传值就会使用传入的值
select * from user10; // 此时显示user10中数据为1 zhangsan 20

在这里插入图片描述

5.外键约束

涉及到两个表:父表/主表,子表/副表

–班级
create table class(
id int primary key,
name varchar(20)
);

–学生
create table students(
id int primary key,
name varchar(20),
class_id int,
foregin key(class_id) references classes(id)
);

show tables;

insert into class values(1,‘oneclass’);
insert into class values(2,‘twoclass’);
insert into class values(3,‘threeclass’);
insert into class values(4,‘fourclass’);

insert into students values(1001,‘zhangsan’,1);
insert into students values(1002,‘lisi’,2);
insert into students values(1003,‘wangwu’,3);
insert into students values(1004,‘zhangsan’,4);
insert into students values(1005,‘zhangsan’,5); // 报错,主表中没有的数据量不能被插入因为主表中没有5的id所以无法插入第五个数据

  1. 主表(父表)class 中没有的数据值,在副表(子表)students 中不可以使用;
  2. 主表(父表)中的记录被副表(子表)引用,是不可以被删除或更改。 // 副表正在使用的数据不可以在主表中删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值