💖✨MySQL一万字深度总结,基础+进阶(七)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。数据库是一个按数据结构来存储和管理数据的计算机软件系统。

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;

微信截图_20220608201325.png

第四步 : 查看表中的数据

微信截图_20220608201400.png

插入错误的数据

insert into t_user(id,username,email) values(1,'ww','ww@123.com');

微信截图_20220608201416.png 解释 :报错的原因是插入的id的字段值与以前插入的字段值重复。

insert into t_user(username,email) values('ww','ww@123.com');

微信截图_20220608201427.png 解释 : 字段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 主键有什么作用


  • 表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键。
  • 主键的作用 : 主键值是这行记录在这张表当中的唯一标识。(就像一个人的身份证号一样)

微信截图_20220608201802.png

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;

微信截图_20220608201844.png 注意 : id此时为主键,所以NULL不能为YES,key字段为PRI,代表为主键。

第四步 : 查看表的数据

select * from t_user;

微信截图_20220608201857.png

插入错误的数据

insert into t_user(id,username) values(4,'cx');

微信截图_20220608201933.png 解释: 出现错误,原因是插入的id数据重复。


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');

查看此时表的结构 微信截图_20220608202131.png

注意 :extra代表的是 额外的,可以看到这个表结构中添加了额外的数据,即主键值自增。

查看表的数据

微信截图_20220608202142.png

注意 :可以看出id是从1开始自增的,

提示 ;在oracle中也提供了一个相同的自增机,叫做:序列(sequence)对象。

10.7 外键约束


10.7.1 关于外键约束的相关术语


  • 外键约束 : foreign key
  • 外键字段 : 添加有外键约束的字段
  • 外键值 : 外键字段中的每一个值

微信截图_20220608202333.png


10.7.2 将以上表的建表语句写出来 :


注意 : t_student中的classno字段引用t_class表中的cno字段,此时t_student表叫做子表。t_class表叫做父表。

微信截图_20220608202422.png

先删除子表在删除父表
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;

微信截图_20220608202532.png

10.7.4 外键字段引用其他表的某个字段的时候,被引用的字段必须是主键嘛?



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
53 0
|
3月前
|
存储 关系型数据库 MySQL
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
42 0
|
3月前
|
机器学习/深度学习 SQL 关系型数据库
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
39 0
|
4月前
|
关系型数据库 MySQL 数据库
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
深入MySQL数据库进阶实战:性能优化、高可用性与安全性
158 0
|
3月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
55 0
【MySQL进阶之路丨第十五篇】一文带你精通MySQL数据的导入与导出
|
4月前
|
SQL 关系型数据库 MySQL
MySQL进阶之性能优化与调优技巧
MySQL进阶之性能优化与调优技巧
|
2天前
|
SQL 关系型数据库 MySQL
MySQL数据库的约束+进阶版新增与查询-2
MySQL数据库的约束+进阶版新增与查询
12 1
|
3月前
|
SQL 关系型数据库 MySQL
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
|
3月前
|
SQL 监控 关系型数据库
MySQL Binlog深度解析:进阶应用与实战技巧【进阶应用】
MySQL Binlog深度解析:进阶应用与实战技巧【进阶应用】
47 0
|
3月前
|
关系型数据库 MySQL 数据库
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符
23 0