💖✨MySQL一万字深度总结,基础+进阶(六)
这是我参与 8 月更文挑战的第 9 天,活动详情查看: 8月更文挑战。
👨🎓作者:Java学术趴
💌公众号:Java学术趴
🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。
🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。
☠️每日毒鸡汤:最早的心灵鸡汤,比如圣经之中的约伯记。
👋大家好!我是你们的老朋友Java学术趴,今天继续给大家分享小编精心为大家整理的一万字MySQL数据库核心知识、在接下来的几天为大家持续分享,💘关注不迷路呦!!!💘。数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。数据库是一个按数据结构来存储和管理数据的计算机软件系统。🦄
10.5 主键约束
重点 : 一张表只有一个主键,必须记住。
10.5.1 怎么给一张表添加主键约束 (使用列级约束加入主键约束)
第一步: 判断是否存在t_user表,如果存在将整个表删除并创建一个新的表
drop table if exists t_user;
create table t_user(
id int primary key,
username varchar(255),
email varchar(255)
);
第二步: 插入数据
insert into t_user(id,username,email) values(1,'zs','zs@123.com'); insert into t_user(id,username,email) values(3,'ls','ls@123.com'); insert into t_user(id,username,email) values(2,'ww','ww@123.com');
第三步 : 查看表结构
desc t_user;
第四步 : 查看表中的数据
插入错误的数据
insert into t_user(id,username,email) values(1,'ww','ww@123.com');
解释 :报错的原因是插入的id的字段值与以前插入的字段值重复。
insert into t_user(username,email) values('ww','ww@123.com');
解释 : 字段id没有默认值,报错的原因是插入id字段值为NULL。
10.5.2 根据以上的测试得出的结论:
- id是主键,因为添加了主键约束,主键字段中的数据不能为NULL,也不能重复。
10.5.3 主键的特点 :
- 不能为NULL
- 不能重复
10.5.3 主键的相关的术语
- 主键约束 : primary key
- 主键字段 : i字段添加primary key之后,id叫做主键字段
- 主键值 : id字段中的每一个值都是主键值
10.5.4 主键有什么作用
- 表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键。
- 主键的作用 : 主键值是这行记录在这张表当中的唯一标识。(就像一个人的身份证号一样)
10.5.5 使用表级约束方式定义主键 :
第一步 :删除表并创建新表
drop table if exists t_user;
create table t_user(
id int,
username varchar(255),
primary key(id)
);
第二步 : 插入数据
insert into t_user(id,username) values(1,'zs'); insert into t_user(id,username) values(2,'ls'); insert into t_user(id,username) values(3,'ww'); insert into t_user(id,username) values(4,'cs');
第三步 : 查看表结构
desc t_user;
注意 : id此时为主键,所以NULL不能为YES,key字段为PRI,代表为主键。
第四步 : 查看表的数据
select * from t_user;
插入错误的数据
insert into t_user(id,username) values(4,'cx');
10.6 主键值自增 (重点)
10.6.1 mysql提供主键值自增:
删除旧表,创建新表
drop table if exists t_user;
create table t_user(
id int primary key auto_increment,
username varchar(255)
);
注意 :id字段自动维护一个自增的数字,从1开始,以1递增。
插入数据 :
insert into t_user(username) values('a'); insert into t_user(username) values('a'); insert into t_user(username) values('a'); insert into t_user(username) values('a'); insert into t_user(username) values('a'); insert into t_user(username) values('a');
注意 :extra代表的是 额外的,可以看到这个表结构中添加了额外的数据,即主键值自增。
注意 :可以看出id是从1开始自增的,
提示 ;在oracle中也提供了一个相同的自增机,叫做:序列(sequence)对象。
10.7 外键约束
10.7.1 关于外键约束的相关术语
- 外键约束 : foreign key
- 外键字段 : 添加有外键约束的字段
- 外键值 : 外键字段中的每一个值
10.7.2 将以上表的建表语句写出来 :
注意 : t_student中的classno字段引用t_class表中的cno字段,此时t_student表叫做子表。t_class表叫做父表。
先删除子表在删除父表
drop table if exists t_student;
drop table if exists t_class;
先创建父表在创建子表
create table t_class(
cno int,
cname varchar(255),
primary key(cno)
);
create table t_student(
son int,
sname varchar(255),
classno int,
foreign key(classno) references t_class(cno)
);
insert into t_class values(101,'xxxxxxxxxxxxx');
insert into t_class values(102,'yyyyyyyyyyyyy');
insert into t_student values(1,'zs1',101);
insert into t_student values(1,'zs1',101);
insert into t_student values(1,'zs1',101);
insert into t_student values(1,'zs1',101);
insert into t_student values(1,'zs1',101);
select * from t_class;
select * from t_student;
插入错误数据
insert into t_student values(7,'lisi',103);
错误信息 :
mysql> insert into t_student values(7,'lisi',103); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (bjpowernode.t_student, CONSTRAINT t_student_ibfk_1 FOREIGN KEY (classno) REFERENCES t_class (cno))
10.7.3 外键可以为你NULL嘛?
外键值可以为 NULL。
第一步 : 插入外键为空的
insert into t_student(son,sname) values(6,'zs6');
第二步 : 查看数据
select * from t_student;
10.7.4 外键字段引用其他表的某个字段的时候,被引用的字段必须是主键嘛?
注意: 被引用的字段不一定是主键,但至少具有unique约束。
今天就先分享到这里,明天继续给大家分享,关注不迷路呦,我们明天见😊。
以上项目的源代码,点击星球🌍进行免费获取 星球(Github地址)如果没有Github的小伙伴儿。可以搜索🔍微信公众号:Java学术趴,📭发送MySQL,免费给发给大家项目源码,代码是经过小编亲自测试🔧的,绝对可靠,免费拿去使用。
--------💘看完的大佬们可以关注一下小编,会一直更新小技巧,免费分享给大家呦!!!💝---------
点击🌍星球可快速进入小编的Github星球呦!!里边还有更多好玩的技术,等待大家去探索呦💪!!