MYSQL——11.主键及其约束条件

主键约束

视频链接:55韩顺平MySQL主键哔哩哔哩bilibili

-- mysql 约束
-- primary key(主键) 的使用
字段名 字段类型 primary key 
用于唯一的标识表行的数据,当定义主键约束后,该列不能重复,且不能为null
create table test1(
    id int primary key,
    `name` varchar(30),
    email varchar(30)
)
或者
create table test2(
    id int ,
    `name` varchar(30),
    email varchar(30),
    primary key(id)
)
desc test1;
desc test2;
​
select * from test1;
insert into test1 values(1 , '张三' , '1111@test.com');
insert into test1 values(1 , '张三' , '1111@test.com');
​
-- 一张表只能有一个主键,但是可以有复合主键(别白痴说有第二个主键)
create table test3(
    id int ,
    `name` varchar(30),
    `email` varchar(30),
    primary key(id , name)
)
select * from test3;
insert into test3 values(1 , '张三' , '234212');
insert into test3 values(1 , '李四' , '234212');
insert into test3 values(1 , '张三' , '234244412');
复合主键,可以是多个,这里是id+name ,其中一个相同无所谓,只要别两个一起相同就可以了。
desc test3;
​
​
​
-- unique 关键字 
优里龟   表示该列不能重复,但是如果是null,就可以重复
unique + not null =  primary key  主键
​
create table test4(
    id int unique,
    `name` varchar(30),
    `email` varchar(30)
)
select * from test4;
insert into test4 values(1 , '张三' , '234212');
insert into test4 values(1 , '张三' , '234212');
insert into test4 values(null , '张三' , '234212');
insert into test4 values(null , '张三11' , '234212');
desc test4;
​
​

外键约束

-- 外键约束 foreign key(外键)
外键约束
1.外键指向的表的字段,要求必须是unique 或者 primary key 约束的
2.表的类型是innodb,这样的表才支持外键
3.外键字段的类型必须与主键字段的类型一致(长度可以不同)
4.外键字段的值,必须在主键字段里面出现过,或者为null(前提是外键字段可以为null)
5.一旦建立主外键的关系,数据就不能随便删除了。也就是必须主键的值先删,才可以删掉外键的值。
select * from test4;
desc test4;
create table test5(
    id int primary key,
    `name` varchar(30),
    test4_id int,
    foreign key (test4_id) REFERENCES test4(id)
)
select * from test5;
insert into test5 values (1,'张三' , 1); 插入成功
insert into test5 values (2,'张三' , 2); 插入失败,因为test4没有id为2的。
​
-- 删除数据
delete from test4 where id =1; 删除失败
​
删除成功。需要先删掉使用到的其他表的外键,才可以删掉这个数据。
delete from test5 where id =1; 
delete from test4 where id =1; 
​
实际开发当中,基本上不会用到外键约束,都是逻辑约束。
​

check

用于强制满足某些条件。

条件:mysql8.0以下不支持这个约束条件。以上就可以。oracle和SqlServer都满足。

create table test6(
    id int unique CHECK(id > 10 and id < 20),
    `name` varchar(30) check (`name` in ('石' , '张三' , '李四')),
    `email` varchar(30)
)
​
insert into test6 values(1 , '张三' , 'asdasdad'); 插入失败,不满足约束条件。
insert into test6 values(11 , '张三' , 'asdasdad'); 插入成功,满足约束条件。
insert into test6 values(16 , '张三1' , 'asdasdad'); 插入失败,不满足约束条件。
insert into test6 values(16 , '还好' , 'asdasdad'); 插入成功,满足约束条件。
​
select * from test6;
desc test6;
​

DEFAULT

​
给个默认值。DEFAULT 
create table test7(
    id int unique CHECK(id > 10 and id < 20),
    `name` varchar(30) check (`name` in ('与' , '张三' , '李四')),
    `email` varchar(30) DEFAULT '2648532'
)
select * from test7;
insert into test7(id , `name`) values(11 , '张三'); 
​
一般直接给`email` varchar(30) DEFAULT ''  就可以了。

自增

auto_increment

在要自增的字段后面加上这个就可以了。

在插入的时候,自增的字段插入null就可以,实现自增了。或者直接不指明插入这个列,就可以了。

1.一般来说,也主键一起使用。

2.如果单独使用,也可以,但是需要配合unique一起来使用。

3.都是与int也就是整形使用,小数也可以,但是不推荐。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_48261292

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值