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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL DuckDB 分析主实例,集群系列 8核16GB
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 外键字段引用其他表的某个字段的时候,被引用的字段必须是主键嘛?



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 SQL 关系型数据库
MySQL语句详解:从基础到进阶的全面指南
MySQL语句详解:从基础到进阶的全面指南
|
存储 关系型数据库 MySQL
MySQL数据库进阶第三篇(MySQL性能优化)
MySQL数据库进阶第三篇(MySQL性能优化)
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
SQL 关系型数据库 MySQL
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
185 1
|
JSON 关系型数据库 MySQL
MySQL常用函数解读:从基础到进阶的全方位指南
MySQL常用函数解读:从基础到进阶的全方位指南
|
SQL 关系型数据库 MySQL
Python进阶第二篇(Python与MySQL数据库)
Python进阶第二篇(Python与MySQL数据库)
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)

推荐镜像

更多