【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

这篇具有很好参考价值的文章主要介绍了【数据库通关之路】 MySQL 全路线学习知识点梳理(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文是MYSQL零基础小白学习系列的第三篇文章,点此阅读 上一篇文章

文末 包邮随机送《MySQL数据库进阶实战 》五本(点击下方目录直达)
【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

13. 主键约束

目的:主键是一行数据的唯一标识,要求非空且唯一

添加约束:

CREATE TABLE 表名(
	列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],);

CREATE TABLE 表名(
	列名 数据类型,
	[CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);

建完表后添加主键约束:

ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

删除约束:

ALTER TABLE 表名 DROP PRIMARY KEY;

14. 默认约束

目的:保存数据时,未指定值则采用默认值

添加约束:

CREATE TABLE 表名(
	列名 数据类型 DEFAULT 默认值,);

建完表后添加默认约束:

ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;

删除约束:

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

15. 外键约束

当我们添加了外键以后,就在数据库层面建立了两张表的关系。

目的:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

添加约束:

CREATE TABLE 表名(
	列名 数据类型,[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);

建完表后添加外键约束:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

删除约束:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

16. 约束的案例练习

首先,我们使用以下的案例来练习约束:

-- 删除stu表
drop table if exists stu;
-- 创建stu表
CREATE TABLE stu (
id int primary key, -- 编号 主键
name varchar(10)  not null unique, -- 姓名 非空,唯一
age int not null, -- 年龄 非空
gender varchar(5) not null, -- 性别 非空
math double(5,2) not null, -- 数学成绩  非空
english double(5,2) default 0 -- 英语成绩 默认为0
);

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

验证主键约束,其特点是非空且唯一,先添加一条数据:

insert into stu(id,name,age,gender,math,english) values(1,'小张',23,'男',66,78);

添加第二条数据时,尝试 id 添加为空值:

insert into stu(id,name,age,gender,math,english) values (null,'小李',20,'女',98,87);

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

尝试 id 添加为重复的值:

insert into stu(id,name,age,gender,math,english) values (1,'小陈',55,'男',56,77);

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)我们已经验证了主键约束,当我们添加不合法的数据时,添加失败。

验证非空约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math,english) values (2,NULL,20,'女',76,65);

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)
验证唯一约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math,english) values 
(5,'小张',20,'男',86,NULL);

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)验证默认约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math) values (6,'小赵',23,'男',99);

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

验证外键约束:

我们使用一下的案例来验证外键约束:

-- 删除表
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
-- 部门表
CREATE TABLE dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);

此时,我们在员工表中添加了外键,相当于在数据库层面上建立了两张表的关系,此时如果员工表中有员工 a ,他属于 1 号部门,那么我们想要删除部门表中的 1 号部门就会删除失败,因为员工 a 是属于 1 号部门的,此时两张表建立了关系。

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

添加数据:

-- 添加 2 个部门
insert into dept(dep_name,addr) values
('研发部','西安'),('销售部', '成都');
-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO emp (NAME, age, dep_id) VALUES
('张三', 20, 1),
('李四', 20, 2);

此时想要是删除销售部门时,发现删除失败。

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

17. 数据库设计

17.1 概念

数据库设计是软件研发过程中很重要的一个环节,在学习数据库设计之前,要先了解软件研发的步骤。

一个成熟的软件,从想法的产生到成功上线,要经历需求调研及分析,设计,编码,测试和部署等过程,在开始阶段产品经理会根据客户的需求设计产品原型,而设计一般有架构师和开发工程师完成,这其中就包括数据库设计,还有软件结构设计,接口设计等,接着就是由开发工程师来编写代码,由测试工程师来测试,接着就可以部署上线。

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

数据库设计就是根据业务系统的具体需求,结合我们所选用的 DBMS,为这个业务系统构造出最优的数据存储模型。通俗的说就是建立数据库中的表结构以及表与表之间的关联关系的过程,分析有哪些表,哪些字段等。

数据库设计分为以下几个步骤:

  • 需求分析
  • 逻辑分析
  • 物理分析
  • 维护设计

17.2 表的关系

表和表之间的关系有一对一的关系,主要用于表的拆分,利于把常用数据和不常用数据分开存储,提高查询的效率。一对多或者多对一的关系,例如部门表和员工表的关系,多对多的关系,例如商品和订单的关系。

一对多的关系中,在表示多的一方建立外键,指向另一方的主键,示例:

-- 删除表
DROP TABLE IF EXISTS tb_emp;
DROP TABLE IF EXISTS tb_dept;
-- 部门表
CREATE TABLE tb_dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE tb_emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES tb_dept(id)
);

查看两表结构模型:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

多对多的关系中,建立第三张中间表,中间表至少包含两个外键,分别关联两方主键,例如商品表和订单表。示例:

-- 删除表
DROP TABLE IF EXISTS tb_order_goods;
DROP TABLE IF EXISTS tb_order;
DROP TABLE IF EXISTS tb_goods;

-- 订单表
CREATE TABLE tb_order(
	id int primary key auto_increment,
	payment double(10,2),
	payment_type TINYINT,
	status TINYINT
);

-- 商品表
CREATE TABLE tb_goods(
	id int primary key auto_increment,
	title varchar(100),
	price double(10,2)
);

-- 订单商品中间表
CREATE TABLE tb_order_goods(
	id int primary key auto_increment,
	order_id int,
	goods_id int,
	count int
);

-- 建完表后,添加外键
alter table tb_order_goods add CONSTRAINT fk_order_id FOREIGN key(order_id) REFERENCES
tb_order(id);
alter table tb_order_goods add CONSTRAINT fk_goods_id FOREIGN key(goods_id) REFERENCES
tb_goods(id);

查看两表的结构模型:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

一对一的关系中,在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE),例如用户和用户详情。

示例:

create table tb_user_desc (
	id int primary key auto_increment,
	city varchar(20),
	edu varchar(10),
	income int,
	status char(2),
	des varchar(100)
);
create table tb_user (
	id int primary key auto_increment,
	photo varchar(100),
	nickname varchar(50),
	age int,
	gender char(1),
	desc_id int unique,
-- 添加外键
CONSTRAINT fk_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id)
);

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

18. 多表查询

前面学习查询操作时,一直是从一张表中查询数据,而数据库的多表查询操作也是非常重要的一部分。多表查询就是一次性从多张表中查询出需要的数据。

在MySQL中多表查询分为连接查询和子查询,而连接查询又分为内连接查询和外连接查询,外连接查询的方式有左外连接查询和右外连接查询。下面对多表查询做一些基础的练习!

下面是演示多表查询使用的 sql:

DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;

# 创建部门表
CREATE TABLE dept(
	did INT PRIMARY KEY AUTO_INCREMENT,
	dname VARCHAR(20)
);
# 创建员工表
CREATE TABLE emp (
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(10),
	gender CHAR(1), -- 性别
	salary DOUBLE, -- 工资
	dep_id INT,
	FOREIGN KEY (dep_id) REFERENCES dept(did) -- 外键,关联部门表(部门表的主键)
);
-- 添加部门数据
INSERT INTO dept (dNAME) VALUES ('研发部'),('财务部'),('销售部');
-- 添加员工数据
INSERT INTO emp(NAME,gender,salary,dep_id) VALUES
('小张','男',3000,1),
('小李','女',3600,2),
('小王','男',9000,2),
('小美','女',5000,null);

执行 sql ,创建表:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

18.1 内连接查询

内连接查询分为隐式内连接查询和显式内连接查询,表示查询 A 集合和 B 集合的交集。

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

语法:

-- 隐式内连接查询
SELECT 字段列表 FROM1,2WHERE 条件;

-- 显示内连接查询
SELECT 字段列表 FROM1 [INNER] JOIN2 ON 条件;

隐式内连接查询示例:

select * from emp,dept where dep_id=did;

结果:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

显式内连接查询示例:

select * from emp inner join dept on dep_id=did;

结果:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

18.2 外连接查询

外连接查询分为作为连接查询和右外连接查询。左外连接查询:相当于查询A表所有数据和交集部分数据。

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

右外连接查询:相当于查询B表所有数据和交集部分数据。

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

语法:

-- 左外连接
SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件;

-- 右外连接
SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件;

左外连接查询示例:

select * from emp left outer join dept on dep_id=did;

结果:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

右外连接查询示例:

select * from emp right outer join dept on dep_id=did;

结果:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

18.3 子查询

子查询是指查询中嵌套有查询,以下的几种情况通常使用嵌套查询:

子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断,例如查询员工中工资大于小李的员工信息:

select * from emp where salary >(select salary from emp where name='小李');

结果:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断,例如查询研发部和财务部员工信息:


select * from emp where dep_id in (select did from dept where dname='研发部' or dname= '财务部');

结果:

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

子查询语句结果是多行多列,子查询语句作为虚拟表,例如查询员工中工资大于3000的员工的信息和部门信息:

select * from (select * from emp where salary>3000) t1, dept where t1.dep_id=dept.did;

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

19. 事务

19.1 概念

数据库的事务是一种机制,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。

例如在进行转账操作时,张三转账给李四 500 元,首先会验证张三账户余额是否充足,如果是,则张三账户减少 500,李四账户增加 500 。如果在这过程中,由于某种原因出现错误,李四的账户没有增加 500 ,那么张三账户减少 500 的操作也不能完成。也就是要保证在这个过程中张三和李四账户余额总和要保持不变。

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

19.2 语法

开启事务:

START TRANSACTION;
或者
BEGIN;

回滚事务:

commit;

提交事务:

rollback;

小练习:张三转账给李四

DROP TABLE IF EXISTS account;
-- 创建账户表
CREATE TABLE account(
	id int PRIMARY KEY auto_increment,
	name varchar(10),
	money double(10,2)
);
-- 添加数据
INSERT INTO account(name,money) values('张三',1000),('李四',1000);

添加事务:

-- 开启事务
BEGIN;
-- 转账操作
-- 1. 查询李四账户金额是否大于500
-- 2. 张三账户 -500
UPDATE account set money = money - 500 where name = '张三';
3%0;--出现异常
-- 3. 李四账户 +500
UPDATE account set money = money + 500 where name = '李四';
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;

如果不添加事务,张三的账户就会减少 500 ,而李四的账户并不会增加 500,这样并不符合我们的实际生活。否则张三的 500 便不翼而飞了,哈哈哈!可见事务的重要性。

19.3 特征

MySQl 事务具有四大特征,分别是:

  • 原子性: 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
  • 一致性 :事务完成时,必须使所有的数据都保持一致状态
  • 隔离性: 多个事务之间,操作的可见性
  • 持久性: 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

20. 总结

至此,我们完成了 MYSQL 入门学习的全部内容。

未来是一个数字化的时代,数据是我们最为宝贵的资源,不论是哪个专业出身,未来或多或少都会卷入数据时代的浪潮之中。而那些前提性的工作基本都是依靠数据库来完成。

希望我的知识分享对你有所帮助,如果你还有什么要补充的话,欢迎私信留言。

【免费赠书】

【数据库通关之路】 MySQL 全路线学习知识点梳理(下)

【!参与方式!】

点赞+收藏+评论本文“人生苦短,我爱MySQL
截止日期:2023-04-23 早上9:00

注:抽奖方式为<程序随机抽取>,会在我的主页动态如期公布中奖者,包邮到家。


【内容简介↓】

本书是作者基于多年的教学与实践进行的总结,重点介绍了MySQL数据库的核心原理与体系架构,涉及开发、运维、管理与架构等知识.

全书共12章,包括MySQL数据库基础、详解 InnoDB存储引擎、MySQL用户管理与访问控制、管理MySQL的数据库对象、MySQL应用程序开发、MySQL的事务与锁、MySQL备份与恢复、MySQL的主从复制与主主复制、MySQL的高可用架构、MySQL性能优化与运维管理、MySQL数据库的监控和使用MySQL数据库的中间件。读者根据本书中的实战步骤进行操作,可以在实际项目的生产环境中快速应用并实施MySQL。
本书基于MySQL 8.0版本编写,为读者提供了完整的实例代码。本书适合对MySQL数据库技术感兴趣的平台架构师、运维管理人员和项目开发人员阅读。读者无论是否接触过数据库技术,只要具备基础的Linux和SQL知识,都能够通过本书快速掌握MySQL并提升实战经验。

京东自营购买链接:《MySQL数据库进阶实战 》


【数据库通关之路】 MySQL 全路线学习知识点梳理(下)文章来源地址https://www.toymoban.com/news/detail-439961.html

到了这里,关于【数据库通关之路】 MySQL 全路线学习知识点梳理(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【WEB前端进阶之路】 HTML 全路线学习知识点梳理(中)

    本文是HTML零基础学习系列的第二篇文章,点此阅读 上一篇文章。 标题是通过 h1 - h6 标签进行定义的。 h1 定义最大的标题。 h6 定义最小的标题。浏览器会自动地在标题的前后添加空行,例如: 标题用来正确的显示文章结构 ,通过不同的标题可以为文章建立索引,所以,标题

    2024年02月02日
    浏览(44)
  • 【MySQL进阶之路丨第二篇】数据库的安装与配置

    下载地址:MySQL下载地址 进入网址后,点击 MySQL Community Server : 选择版本: 我们选择历史版本中的5.7.24版本 安装到D盘的MySQL文件夹中 解压后复制bin目录路径 在系统变量的Path中添加bin目录路径 接着在D:SoftwareMySQLmysql-5.7.24-winx64目录下新增加一个配置文件mysql.ini和一个data文

    2024年02月10日
    浏览(41)
  • 黑豹程序员-架构师学习路线图-百科:PowerDesigner数据库建模的行业标准

    PowerDesigner最初由Xiao-Yun Wang(王晓昀)在SDP Technologies公司开发完成。 目前PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。 PowerDesigner独具匠心地将多

    2024年02月08日
    浏览(39)
  • iwebsec靶场 数据库漏洞通关2-Redis数据库漏洞

    iwebsec靶场的redis漏洞为未授权漏洞,如下所示。 那么这个未授权漏洞的原理是什么呢?Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(

    2024年02月09日
    浏览(36)
  • MYSQL数据库-数据库的学习

    1、数据库的英文单词:DataBase 简称 : DB 2、什么数据库? 用于存储和管理数据的仓库. 3、数据库的特点 持久化存储数据的.其实数据库就是要给文件系统 方便存储和管理数据 使用了统一的方式操作数据库 – SQL 1、关系型数据库:MySQL(免费)、Orcale(收费)、SQL Server(免费)

    2024年02月16日
    浏览(55)
  • 【MySQL系列】数据库基础学习_简单认识数据库

    「前言」文章内容大致是数据库基础,以及数据库的基本知识。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 我见青山多妩媚,料青山、见我应如是。 ——辛弃疾《贺新郎》 MySQL实际上是一个网络服务(client/server模式

    2024年02月15日
    浏览(41)
  • MySql数据库的学习

    MySQL 是最流行的 关系型数据库 管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System: 关系数据库管理系统) 应用软件之一。 参考博客: MySQL 教程 | 菜鸟教程 (runoob.com) 数据库(Database,DB)是按照数据结构来组织、存储和管理数据的仓库。它本身可

    2024年02月12日
    浏览(40)
  • Mysql数据库学习思路

    学习 MySQL(或其他数据库管理系统)需要一系列步骤和资源,以帮助您掌握数据库设计、查询语言(SQL)和数据库管理的基础知识。以下是一些建议的学习步骤: 学习数据库基础知识: 了解什么是数据库、数据库管理系统(DBMS)以及不同类型的数据库(如关系型数据库、

    2024年02月06日
    浏览(44)
  • MYSQL数据库学习笔记

    以分号结尾加回车为一个命令 show databases;//展示所有数据库 create database xxx;//创建新的数据库 create database if not exists xxx;//检查是否创建XXX数据库,没有则创建,有则不创建 create database default charset (字节大小);//创建指定字节大小的数据库 drop database xxx;//删除数据库 use xxx;//使用

    2024年02月16日
    浏览(47)
  • 【MySQL 数据库】11、学习 MySQL 中的【锁】

    锁是计算机协调多个进程或线程并发访问某一资源的机制 在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题 锁冲突是影响数据库并发访问性能的一个

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包