💖✨MySQL一万字深度总结,基础+进阶(五)
这是我参与 8 月更文挑战的第 8 天,活动详情查看: 8月更文挑战。
👨🎓作者:Java学术趴
💌公众号:Java学术趴
🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。
🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。
☠️每日毒鸡汤:最早的心灵鸡汤,比如圣经之中的约伯记。
👋大家好!我是你们的老朋友Java学术趴,今天继续给大家分享小编精心为大家整理的一万字MySQL数据库核心知识、在接下来的几天为大家持续分享,💘关注不迷路呦!!!💘。数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。数据库是一个按数据结构来存储和管理数据的计算机软件系统。🦄
1.约束
1.1 什么是约束? 常见的约束有哪些?
注意:比如注册一个新的用户,底层就相当于执行一次insert语句
在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。
常见的约束有哪些 ?
- 非空约束 (not null) : 约束的字段不能为 NULL
- 唯一性 (unique) : 约束的字段不能重复
- 主键约束 (primary key) : 约束的字段既不能为NULL,也不能重复(简称pk)
- 外键约束 (foreign key) : ...(简称FK)
- 检查约束 (check) : 注意oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。
1.2非空约束 (not null)
第一步 :创建一个新的表
drop table if exists t_user;
create table t_user(
id int,
username varchar(255) not null,
password varchar(255)
);
第二步 : 向表中插入数据
insert into t_user(id,username,password) values(1,'zhangsan','123');
第三步 :查看表的数据
select * from t_user;
错误案例 :
insert into t_user(id,password) values(1,'444');
注意 :
错误原因,在创建表的时候已经声明username不能为null
查看表的结构可以发现,在username字段的NULL为NO,说明username必须有值,不能为null
desc t_user;
1.3唯一性约束 (unique)
1.3.1 唯一性约束修饰的字段具有唯一性,不能重复,但可以为NULL
1.3.2 案列 :给一个字段(列)加约束条件
第一步 :判断是否存在t_user表,如果存在将整个表删除并创建一个新的表,使用的是 drop table if exists t_user; create table t_user( id int, username varchar(255) unique );
第二步 : 插入数据
insert into t_user values(1,'zhangsan'); insert into t_user values(2,'zhangsan');
注意:
- 第一条语句可以插入成功,但是执行第二条语句插入失败,错误原因:
- 第二条语句中的username字段的值与第一条语句中username的值一样,报错
- 因为在建表的时候username字段加入了约束条件,该字段的值不能重复。
第三步 : 查看表的结构
desc t_user;
注意 : 查看表结构的时候发现,表结构中的username中的Key字段有UNI关键字,说明这个字段的值不能重复。
1.3.3 username可以为NULL
第一步 :插入数据,不给定username的值,默认值为NULL(空)
insert into t_user(id) values(2); insert into t_user(id) values(3); insert into t_user(id) values(4);
第二步 : 查看表的数据
select * from t_user;
1.3.4给多个字段(列)加约束条件
1.3.4.1表级约束 多个字段联合起来添加一个约束unique
第一步 :判断是否存在t_user表,如果存在将整个表删除并创建一个新的表
重点 :
-
这样的语法格式,代表将usercode与username合并为一个字段,使用的是一个约束条件,
-
即只有当usercode与username的字段值都与上一次的字段值相同值相同时,才会报错,当作同一个数据。
drop table if exists t_user; create table t_user( id int, usercode varchar(255), username varchar(255), unique(usercode,username) );
第二步 : 插入数据
insert into t_user values(1,'111','zhangsan'); insert into t_user values(2,'111','wangwu'); insert into t_user values(3,'222','zhangsan');
第三步 :查看表的结构
desc t_user;
注意 : 此时即表级约束中,发现usercode与username中只有usercode中的Key字段都为UNI;而username不为UNI,此时他两是绑在一起的。
第四步 : 查看表中的数据
select * from t_user;
第五步 : 插入重复的数据
insert into t_user values(4,'111','zhangsan');
注意:此时会报错(usercode”键的重复条目“111 zhangsan),因为插入的数据与第一次插入的数据usercode字段值和username字段值都一样.
1.3.4.2 列级约束 各自管自己的,只有当约束的字段值全不重复的时,才会成功,不会报错。
第一步 :判断是否存在t_user表,如果存在将整个表删除并创建一个新的表
重点 :
-
这样的语法格式,代表将usercode与username各为一个字段,使用的是两个个约束条件,
-
即当usercode与username的字段值只要有一个不一样的时候就会报错。
drop table if exists t_user; create table t_user( id int, usercode varchar(255) unique, username varchar(255) unique );
第二步 : 插入数据
insert into t_user values(1,'111','zhangsan'); insert into t_user values(2,'222','wangwu'); insert into t_user values(2,'111','wangwu'); insert into t_user values(3,'222','zhangsan');
注意 :
- 此时只有1行与2行的数据插入成功,因为前两行usercode与username的字段值都不行同
- 而后来两行数据中,usercode与username的字段值其中有一个字段是重复的,报错 第三步 :查看表的结构
desc t_user;
注意 : 此时即列级约束中,发现usercode与username中的Key字段都为UNI;
第四步 : 查看表中的数据
select * from t_user;
注意 :只有前两行数据,后边的两行插入失败,因为有重复。
1.4注意 : not null约束只有列级约束,没有表级约束。
今天就先分享到这里,明天继续给大家分享,关注不迷路呦,我们明天见😊。
以上项目的源代码,点击星球🌍进行免费获取 星球(Github地址)如果没有Github的小伙伴儿。可以搜索🔍微信公众号:Java学术趴,📭发送MySQL,免费给发给大家项目源码,代码是经过小编亲自测试🔧的,绝对可靠,免费拿去使用。
--------💘看完的大佬们可以关注一下小编,会一直更新小技巧,免费分享给大家呦!!!💝---------
点击🌍星球可快速进入小编的Github星球呦!!里边还有更多好玩的技术,等待大家去探索呦💪!!