MySQL数据库(最全)
MySQL数据库
课程目标:
- MySQL数据库安装与配置
- MySQL表操作
- MySQL基本查询
- MySQL高级查询
- MySQL写入操作
- MySQL基本函数
- MySQL的综合应用
1. MySQL数据库安装与配置
1.1 数据库简介
什么是数据库系统:
- 数据库系统(DBMS)Database Management System 是指一个能为用户提供信息服务的系统。它实现了有组织地、动态地储存大量相关数据的功能,提供了数据处理和信息资源共享的便利手段。
什么是关系型数据库系统:
- 关系型数据库系统( RDBMS)Relational database management system是指使用了关系模型的数据库系统
- 关系模型中,数据是分类存放的,数据之间可以有联系
第一个关系型数据库
- 1976年BM的 System R团队在出版的论文中阐述了关系模型,1979年 Oracle公司推出了首个关系型数据库成品
- 关系型数据的应用
- 关系型数据库被应用在非常多的领域,教育系统,商业系统,医疗系统,而且关系型数据库可以有效组织和管理大量复杂的数据,所以关系型数据库才是最重要的数据库产品。
主流的关系型数据库
- DB2
- Oracle
- MySQL
- SQL Server
什么是 NOSQL数据库系统? - NOSQL数据库指的是数据分类存放,但是数据之间没有关联关系的数据库系统
- 主流的NoSQL数据库
- Redis 秒杀 ,微博
- MongoDB: 知乎,简书
- MemCache
- Ne04j
1.2 MySQL数据库安装与初始化
MySQL数据库:
- MySQL是应用最广泛、普及度最高的开源关系型数据库
- MySQL由瑞典 MySQL AB公司开发,目前属于 Oracle旗下产品
MySQL 大事记
- 1996 MySQL1.0 诞生
- 1999 MySQL AB公司成立
- 2000 MysQL4.0发布
- 2003 MySQL5.0发布
MySQL衍生版
- Oracle
- MariaDB
- Percona
1.3 用户管理
MySQL客户端:Navicat
- 官网地址 https://www.navicat.com.cn
重设root密码 - 创建一个TXT文件,定义修改密码的SQL语句
-ALTER USER root'@'localhost' IDENTIFIED BY ′123456′
注意本地localhost 加上%,代表可远程登录 - 右键,Window PowerShell管理员运行
- 停止:输入net stop mysql 80
- 启动:mysql --defaults-file=“路径\my.ini” --init-file=“TXT路径” --console
1.4 MySQL配置文件
MySQL配置文件
- 在my.ini文件中,我们可以设置各种 MySQL的配置,例如字符集、端口号、目录地址等等- `port=3306`#端口号`datadir=C:/ ProgramData/ MySQL/ MySQL Server8.0/Data`#数据目录`default authentication_ plugin= caching sha2_ password`#密码认证插件`default- storage- engine= INNODB`#默认存储引擎`sq1-mode=" STRICT TRANS TABLES, NO ENGINE SUBSTITUTION`"#开启严格模式`log- output=FILE`#用文件记录日志`genera1-10g=0`#关闭日志输出`genera1_1 og file=" DESKTOP-HB42AU2.1og`"#日志文件名称`slow- query-1og=1`#开启慢查询日志`query_1 og file=" DESKTOP-HB42AU2-s1ow.1og"`#慢查询日志文件名称`long query time=10`#大于多少秒的执行SQL被记录在慢查询日志`log- error=" DESKTOP-HB42AU2.err”`#错误日志名称`server-id=1`#数据库ID`lower case table names=1`#把表名转换成小写`secure-f1le-priv="C:/ ProgramData/MyQL/ lySQL Server8.0/ Uploads"`#导入导出数据的目录地址`max connections=151`#最大连接数`table open cache=2000``tmp table size=16M``thread cache size=10`#线程数量`myisam max sort file size=100G``myisam sort buffer size=8M``key buffer size=8M``read buffer size=0`
2. 数据库表的相关操作
2.1 定义逻辑库,数据表
什么是SQL语言:SQL是用于访问和处理数据的标准的计算机语言
SQL语言分类
- DML:添加 修改 删除 查询
- DCL:用户 权限 事务
- DDL:逻辑库 数据表 视图 索引
SQL语句注意事项
- SQL语句不区分大小写,但是字符串区分大小写 SELECT “HelloWorld”
- SQL语句必须以分号结尾
- SQL语句中的空白和换行没有限制,但是不能破坏语法
SQL语句的注释
- SQL语句的注释有两种,分别如下
- #这是一段注释文字
- /这是另一段注释文字/
创建逻辑库
- `mysql> CREATE DATABASE 逻辑库名称` #创建逻辑库- `mysql> SHOW DATABASES;` #展示逻辑库- `mysql> DROP DATABSE 逻辑库名称`;#展示逻辑库
创建数据表- `CREATE TABLE数据表 (` `列名1 数据类型 [约束][ COMMENT注释],``列名2 数据类型 [约束][ COMMENT注释],``...``)[ COMMENT=注释];`- `CREATE TABLE student(``id INT UNSIGNED PRIMARY KEY,``name VARCHAR(20) NOT NULL,``sex CHAR(1)NOT NULL,``birthday DATE NOT NULL,``tel CHAR(11) NOT NULL,``remark VARCHAR(200),` `);`
写入数据表
insert into student VALUES(1,"张三",“男”,“1995-05-13”,“13383838438”,NULL)
数据表的其他操作
`SHOW tables;`#查看逻辑表 `DESC Student;`#查看数据表 `SHOW CREATE TABLE student`,#查询建表语句 `DROP TABLE Student`#删除表文件
2.2 定义数据库语言:数据类型
- 数字类型:
- tinyint:小整数
- int 整数
- bigint: 大整数
- float:单精度浮点数
- double:双精度浮点数
- 字符串类型:
- char:固定长度字符串
- varchar 不固定长度字符串
- 日期类型:
- Date:日期
- Time:时间
- Year:年份
2.3 字段约束
数据库的范式: 构造数据库必须遵循一定的规则,这种规则就是范式
- 目前关系数据库有6种范式,一般情况下,只满足第三范式即可
第一范式:原子性
- 第一范式是数据库的基本要求,不满足这一点就不是关系数据库
- 数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。第二范式:唯一性
- 数据表中的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列用来存储唯一标识,这个唯一属性列被称作主键列第三范式:关联性
- 每列都与主键有直接关系,不存在传递依赖
- 依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联
字段约束
MySQL中的字段约束共有四种
- 主键约束 PRIMARY KEY 字段值唯一,且不能为NULL
- 主键约束要求字段的值在全表必须唯一,而且不能为NUL值
- 建议主键一定要使用数字类型,因为数字的检索速度会非常快
- 如果主键是数字类型,还可以设置自动增长
- 主键约束 PRIMARY KEY 字段值唯一,且不能为NULL
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO INCREMENT
...
);
- 非空约束 NOT NULL 字段值不能为NULL
- 非空约束要求字段的值不能为NULL值
- NULL值以为没有值,而不是"" 空字符串
- 非空约束 NOT NULL 字段值不能为NULL
`CREATE TABLE t_teacher(` `id INT PRIMARY KEY AUTO INCREMENT,` `name VARCHAR(200) NOT NULL` `married BOOLEAN NOT NULL deFAUlT False``);`
- 唯一约束 UNIQUE 字段值唯一,且可以为NULL
- 外键约束 FOREIGN KEY 保持关联数据的逻辑性
- 外键约束用来保证关联数据的逻辑关系
- 外键约束的定义是写在子表上的
- `CREATE TABLE t_dept(#父表``deptno INT UNSIGNED PRIMARY KEY``dname VARCHAR(20) NOT NULL UNIQUE``tel CHAR(4) UNIQUE``);`
`CREATE TABLE t_temp(``empno INT UNSIGNED PRIMARY KEY,``ename VARCHAR(20) NOT NULL``sex enum("男","女") NOT NULL`,#enum:只能选男或者女`deptno INT UNSIGNED``hiredate DATE NOT NUlL``FOREIGN KEY(deptno)REFERENCES t_dept(deptno)`
`);关联单词 references`
2.4 索引
数据排序的好处
- 一旦数据排序之后,查找的速度就会翻倍,现实世界跟程序世界都是如此
如何创建索引 CREATE TABLE表名称(
...,
INDEX[索引名称](字段),
...,
);
如何添加与删除索引
CREATE INDEX 索引名称 ON 表名(字段);
ALTER TABLE 表名称 ADD INDEX [索引名](字段)
SHOW INDEX FROM 表名
DROP INDEX 索引名称 ON 表名
索引的使用原则
- 数据量很大,而且经常被查询的数据表可以设置索引
- 索引只添加在经常被用作检索条件的字段上面
- 不要在大字段上创建索引
3. 数据库的基本查询
3.1 数据库操作语言:普通查询
记录查询
- 最基本的查询语句是由 SELECT和FROM关键字组成的
SELECT * FROM t_emp;
SELECT empno, ename, sal FROM t_emp;
- SELECT语句屏蔽了物理层的操作,用户不必关心数据的真实存储,交由数据库高效的査找数据
使用列别名 - 通常情况下, SELECT-子句中使用了表达式,那么这列的名字就默认为表达式,因此需要一种对列名重命名的机制
SELECT empno,sal * 12 as "income" FROM t_emp;
查询语句的子句执行顺序
- 词法分析与优化,读取SQL语句
- FROM 选择数据来源
- SELECT 选择输出内容
3.2 数据库操作语言:数据分页
数据分页
如我们查看朋友圈,只会加载少量部分信息,不用一次性加载全部朋友圈,那样只会浪费CPU时间、内存和网络带宽
如果结果集的记录很多,则可以使用limit关键字限定结果集数量
-SELECT .... FROM … LIMIT 起始位置,偏移量;
-SELECT empno, ename FROM t_emp LIMIT 0,20;
数据分页的简写用法
- 如果LIMIT子句只有一个参数,它表示的是偏移量,起始值默认为0
SELECT empno, ename FROM t emp LIMIT 10;
SELECT empno, ename FROM t emp LIMIT 0, 10;
- 如果LIMIT子句只有一个参数,它表示的是偏移量,起始值默认为0
查询语句的子句执行顺序
FROM -> SELECT -> LIMIT
3.3 数据操作语言:排序
结果集排序
- 如果没有设置,查询语句不会对结果集迸行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用 ORDER BY子句。
-SELECT FROM ORDER BY 列名 [ASC|DESC]
-SELECT ename,sal from t_emp ORDER BY sal;
排序关键字 - ASC代表升序(默认), DESC代表降序
- 如果排序列是数字类型,数据库就按照数字大小排序,
- 如果是日期类型就按照日期大小排序
- 如果是字符串就按照字符集序号排序。
SELECT ename, sal FROM t_emp order BY hiredate desc;
多个排序字段
- 我们可以使用 ORDER BY规定首要排序条件和次要排序条件。数据库会先按照首要排序条件排序,如果遇到首要排序內容相同的记录,那么就会启用次要排序条件接着排序
SELECT empno, ename, sal hiredate FROM t emp ORDER BY sal desc,hiredate Asc;
排序+分页- ORDER BY子句书写的时候放在LMIT子句的前面
FROM - SELECT - ORDER BY - LIMIT
- ORDER BY子句书写的时候放在LMIT子句的前面
3.4 数据操作语言:去除重复记录
去除重复记录
- 如果我们需要去除重复的数据,可以使用 DISTINCT关键字来实现
- SELECT D| STINCT 字段 FROM…;
- SELECT DISTINCT job FROM t emp;
- 注意事项
- 使用 DISTINCT的 SELECT子句中只能查询一列数据,如果查询多列,去除重复记录就会失效。
- DISTINCT关键字只能在 SELECT 子句中使用一次
3.5 数据操作语言:条件查询
条件查询
- 很多时候,用户感兴趣的并不是逻辑表里的全部记录,而只是它们当中能够满足某一种或某几种条件的记录。这类条件要用 WHERE子句来实现数据的筛选
SELECT FROM WHERE条件[AND|OR]条件 .....;
SELECT empno, ename, sal FRom t emp WHERE deptno=10 AND sal >=2000;
- 算数运算符
- +加法
- -减法
- *乘法
- /除法
- %求模 - 比较运算符
- 包含 IN
- 为空 IS NULL
- BETWEEN AND 范围
- LIKE 模糊查询
- REGEXP 正则表达式 - 逻辑运算符
- AND 与关系
- OR 或关系
- NOT 非关系 - WHERE子句的注意事项
- WHERE子句中,条件执行的顺序是从左到右的。所以我们应该把索引条件,或者筛选掉记录最多的条件写在最左侧
SELECT empno, ename FROM t emp WHERE ename = FORD AND sal >=2000
SELECT empno, ename FROM t emp Where deptno =10 AND sal >=2000
- 各种子句的执行顺序
- 条件查询中, WHERE子句应该是第几个执行?
FROM -> WHERE- >LECT -> ORDER BY ->LIMIT
- 条件查询中, WHERE子句应该是第几个执行?
4. 数据库的高级查询
4.1数据操作语言:聚合函数
什么是聚合函数
- 聚合函数在数据的查询分析中,应用十分广泛。聚合函数可以对数据求和、求最大值和最小值、求平均值等等。
聚合函数 - SUM函数
- SUM函数用于求和,只能用于数字类型,字符类型的统计结果为0,日期类型统计结果是毫秒数相加。
SELECT SUM(ename) FROM t emp;
SELECT SUM(sal) FROM t emp;
WHERE deptno In (10, 20);
- SUM函数用于求和,只能用于数字类型,字符类型的统计结果为0,日期类型统计结果是毫秒数相加。
- MAX函数
- MAX函数用于获得非空值的最大值。
-
SELECT MAX (comm) FROM t empi
-
- 问题1:查询10和20部门中,月收入最高的员工?
SELECT MAX (sal+IFNULL(comm, 0)) FROM t emp WhERE deptno IN(10,20)
- 问题2:查询员工名字最长的是几个字符?
SELECT MAX (LENGTH (ename)) FROM t emp
- MAX函数用于获得非空值的最大值。
- MIN函数
- MIN函数用于获得非空值的最小值。
SELECT MIN (empno) FROM t emp;
SELECT MIN (hiredate) FRoM t empi
- AVG函数
- AVG函数用于获得非空值的平均值,非数字数据统计结果为0
SELECT AVG(sal+IFNULL(comm)) FROM t empi
- AVG函数用于获得非空值的平均值,非数字数据统计结果为0
- COUNT函数
- COUNT()用于获得包含空值的记录数, COUNT(列名)用于获得包含非空值的记录数。
SELECT COUNT(*) FROM t emp;
- COUNT()用于获得包含空值的记录数, COUNT(列名)用于获得包含非空值的记录数。
- COUNT函数
- 查询10和20部门中,底薪超过2000元并且工龄超过15年的员工人数?
SELECT COUNT(*)FROM t emp WhERE deptno IN (10, 20) AND sal>=2000 AND DATEDIFF(NOW(hiredate)/365>=15
- 查询1985年以后入职的员工,底薪超过公司平均底薪的员工数量?
SELECT COUNT (* FROM t emp WHERE hiredate>=1985-01-01 AND Sal>AVG(sal)
- 查询10和20部门中,底薪超过2000元并且工龄超过15年的员工人数?
4.2数据操作语言:分组查询
为什么要分组?
- 默认情况下汇总函数是对全表范围内的数据做统计
- GROUP BY子句的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对每个小区域分别进行数据汇总处理
SELECT deptno, AVG(sal) FROM t_emp GROUP BY deptno
逐级分组- 数据库支持多列分组条件,执行的时候逐级分组。
- 查询每个部门里,每种职位的人员数量和平均底薪
SELECT deptno, job, COUNT(*), AVG(sal) FROM t emp GroUP BY deptno, job ORDER BY deptno
对 SELECT子句的要求
- 查询语句中如果含有 GROUP BY子句,那么 SELECT-子句中的内容就必须要遵守规定: SELECT子句中可以包括聚合函数,或者 GROUP BY子句的分组列,其余内容均不可以出现在 SELECT子句中
SELECT deptno, CoUNT(*), AVG(sal) FROM t emp GroUP BY deptno;
selECt deptno, CoUNT(), AVG(sal), sal FROM t emp GroUP BY deptno;
- 对分组结果集再次做汇总计算
SELECT deptno, CoUNT(*),AVG(sal), MAX (sal), MIN (sal) ROM t emp groUP BY deptno WITH ROLLUP;
- GROUP CONCAT函数
- GROUP CONCAT函数可以把分组查询中的某个字段拼接成一个字符串
- 查询每个部门内底薪超过2000元的人数和员工姓名
SELECT deptno, GroUP CONCAT (ename), COUNT(*) FROM t emp WHERE sal>=2000 GROUP BY deptno
- 各种子句的执行顺序
- 查询语句中, GROUP BY子句应该第几个执行?
FROM - WHERE-> GROUP BY -> SELECT - ORDER BY -> LIMIT
- 查询语句中, GROUP BY子句应该第几个执行?
4.3数据操作语言: HAVING子句
- HAVING子句的特殊用法
按照数字1分组, MySQL会依据 SELECT子句中的列进行分组,HAVING子句也可以正常使用
4.4 表连接查询
从多张表中提取数据
- 从多张表中提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连接,产生笛卡尔积。
- 从多张表中提取数据规定了连接条件的表连接语句,就不会出现笛卡尔积
SELECT e empno, e. ename, d dname
FROM t emp e join t dept d
oN e deptno=d. deptnoi
- 表连接的分类
- 内连接: 内连接是结果集中只保留符合连接条件的记录
- 内连接的简介
- 内连接是最常见的一种表连接,用于查询多张关系表符合连接条件的记录。
SELECT FROM表1
[|NER] JON表2 ON 条件
[NER] JON表3 ON 条件
- 内连接的多种语法形式
SELECT ...FROM 表1 J0IN 表2 0N 连接条件
SELECT ...FROM 表1 J0IN 表2 WHERE 连接条件;
SELECT…FROM表1,表2 WHERE连接条件
- 内连接是最常见的一种表连接,用于查询多张关系表符合连接条件的记录。
- 外连接: 外连接是不管符不符合连接条件,记录都要保留在结果集中
- 外连接简介 外连接与内连接的区别在于,除了符合条件的记录之外,结果集中还会保留不符合条件的记录。
- 左连接和右连接
- 左外连接就是保留左表所有的记录,与右表做连接。如果右表有符合条件的记录就与左表连接。如果右表没有符合条件的记录,就用NUL与左表连接。右外连接也是如此。
- 外连接的注意事项
内连接只保留符合条件的记录,所以查询条件写在ON子句和WHERE子句中的效果是相同的。但是外连接里,条件写在 WHERE子句里,不合符条件的记录是会被过滤掉的,而不是保留下来。
4.5 子查询
子查询简介
- 子查询是一种査询中嵌套查询的语句
- 查询底薪超过公司平均底薪的员工的信息
子查询的分类
- 子查询可以写在三个地方: WHERE子句、FROM子句、 SELECT子句,但是只有FROM子句子查询是最可取的
WHERE子查询
- 这种子查询最简单,最容易理解,但是却是效率很低的子查询
- 查询底薪超过公司平均底薪的员工的信息
FROM子查询
- 这种子查询只会执行一次,所以查询效率很高
SELECT-子查询
- 这种子查询每输出一条记录的时候都要执行一次,查询效率很低
单行子查询和多行子查询
- 单行子查询的结果集只有一条记录,多行子查询结果集有多行记录
- 多行子查询只能出现在 WHERE子句和FROM子句中
- WHERE子句中的多行子查询
- WHERE子句中,可以使用N、ALL、ANY、 EXISTS关键字来处理多行表达式结果集的条件判断
- EXISTS关键字
- EXISTS关键字是把原来在子查询之外的条件判断,写到了子查询的里面。
SELECT……FROM表名 WHERE[NOT] EXISTS(子查询)
5. MySQL对数据的基本操作
5.1数据操作语言: INSERT语句
- INSERT语句可以向数据表写入记录,可以是一条记录,也可以是多条记录
INSERT INTO 表名(字段1,字段2,…) VALUES(值1,值2,)
INSERT INTO 表名(字段1,字段2,… VALUES(值1,值2,……),(值1,值2,…)
- INSERT语句方言
- MYSQL的 NSERT语句还有一种方言语法
INSERT INTO表名SET字段1=值1,字段2=值2,……
- IGNORE关键字
- IGNORE关键字会让 INSERT只插入数据库不存在的记录
INSERT [IGNORE] INTO表名
- IGNORE关键字会让 INSERT只插入数据库不存在的记录
5.2 数据操作语言: UPDATE语句
- UPDATE语句
- UPDATE语句用于修改表的记录
UPDATE[ GNORE]表名
SET字段1=值1,字段2=值2,
[WHERE条件1…]
[ ORDER BY…]
[LIMIT …….]
练习题- 把每个员工的编号和上司的编号+1,用 ORDER BY子句完成
- 把月收入前三名的员工底薪减100元,用LMT子句完成
- 把10部门中,工龄超过20年的员工,底薪增加200元
- 把ALEN调往 RESEARCH部门,职务调整为 ANALYST
- UPDATE语句的表连接
- 因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造 UPDATE语句
UPDATE表10表2 ON条件 SET字段1=值1,字段2=值2,.....,
- 表连接的 UPDATE语句可以修改多张表的记录
- UPDATE语句的表连接既可以是内连接,又可以是外连接
UPDATE 表1[ LEFT I RIGHT]JOIN 表2 0N条件 SET字段1=值1,字段2=值2,…,
- 因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造 UPDATE语句
5.5数据操作语言: DELECT 语句
- DELETE语句
- DELETE语句用于删除记录,语法如下:
DELETE [ GNORE] FROM 表名
[ WHERE 条件1,条件2,…]
[ORDER BY ,.....]
[LMIT….];
- 练习:
- 删除10部门中,工龄超过20年的员工记录
删除20部门中工资最高的员工记录 - DELETE语句的表连接(一)
- 因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造 DELETE语句
DELETE表1, FROM 表1 J0IN 表2 ON条件
[ WHERE条件1,条件2.,,,,,,]
[ORDER BY......]
[LIMIT…]
- 因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造 DELETE语句
- 练习
- 删除 SALES部门和该部门的全部员工记录
- 删除每个低于部门平均底薪的员工记录 - DELETE语句的表连接(二)
- DELETE语句的表连接既可以是内连接,又可以是外连接
DELETE表1,……FROM表1 LEFT IRGHTJOIN 表2 ON条件
- DELETE语句的表连接既可以是内连接,又可以是外连接
- 快速删除数据表全部记录
- DELETE语句是在事务机制下删除记录,删除记录之前,先把将要删除的记录保存到日志文件里,然后再删除记录
- TRUNCATE语句在事务机制之外删除记录,速度远超过 DELETE语句
TRUNCATE TABLE表名
- DELETE语句用于删除记录,语法如下:
6. MySQL基本函数的使用
6.1 MySQL的函数
函数的定义:像编程语言利用函数封装业务功能一样,数据库也把一些复杂的功能封装到函数里,供使用者调用
- 函数的分类
- 数字函数
- 字符函数
- 日期函数
- 条件函数
6.2 数字函数
- ABS 绝对值
- ROUND 四舍五入
- POWER 幂函数
- LOG 对数函数
- LN 对数函数
6.3 日期函数
- 获取系统时间函数
- NOW() 函数能获得系统日期和时间,格式yy-MM-dh:mm:ss
- CURDATE() 函数能获得当前系统日期,格式yy-MM-dd
- CURTIME() 函数能获得当前系统时间,格式hh:mm:Ss
- DATE FORMAT() 函数用于格式化曰期,返回用户想要的日期格式
DATE FORMAT(日期,表达式)
SELECT ename, DATE FORMAT(hiredater,“%Y”)FROM t emp
练习- 利用日期函数,查询明年你的生日是星期几?
- 利用日期函数,查询1981年上半年入职的员工有多少人?
- 日期计算的注意事项
- MySQL数据库里面,两个日期不能直接加減,日期也不能与数字加减
- 日期偏移计算
- DATE ADD0函数可以实现日期的偏移计算,而且时间单位很灵活
DATE ADD(日期, NTERVAL偏移量时间单位)
- DATE ADD0函数可以实现日期的偏移计算,而且时间单位很灵活
- 计算日期之间相隔的天数
- DATEDIFFOI函数用来计算两个日期之间相差的天数
DATEDIFF(日期,日期)
- DATEDIFFOI函数用来计算两个日期之间相差的天数
6.4字符函数
字符函数
- LOWER 转换小写字符
- UPPER 转换大写字符
- LENGTH 字符数量
- CONCAT 连接字符串
- INSTR 字符出现的位置
- INSERT 插入/替换字符
- SUBSTR截取字符串
- SUBSTRING截取字符串
- TRIM 去除首尾
6.5条件函数
- SQL语句中可以利用条件函数来实现编程语言里的条件判断
- IFNUL(表达式,值)
- IF(表达式,值1,值2)
练习- 中秋节公司发放礼品, SALES部门发放礼品A,其余部门发放礼品B,打印每名员工获得的礼品。
- 条件语句
- 复杂的条件判断可以用条件语句来实现,比F语句功能更强大
CASE
WHEN 表达式 THEN 值1
WHEN 表达式 THEN 值2
ELSE 值 N
END
- 复杂的条件判断可以用条件语句来实现,比F语句功能更强大
- 练习
- 公司年庆决定组织员工集体旅游,每个部门旅游目的地是不同的。 SALES部门去P1地点, ACCOUNTING部门去P2地点, RESEARCH部门去P3地点,查询每名员工的旅行地点。
7. MySQL的综合应用
7.1事务机制
避免写入直接操作数据文件
- 如果数据的写入直接操作数据文件是非常危险的事情
- 利用日志来实现间接写入
- MySQL总共有5种日志,其中只有redo日志和undo日志与事务有关
- 事务机制( Transaction)
RDBMS=SQL语句+事务(ACID)
事务是一个或者多个SQL语句组成的整体,要么全部执行成功,要么全都执行失败 - 事务执行流程
- 开启事物
UPDATE语句
DELETE语句
提交事物
- 开启事物
- 管理事务
- 默认情况下, MySQL执行每条SQL语句都会自动开启和提交事务
- 为了让多条SQL语句纳入到一个事务之下,可以手动管理事务
- START TRANSACTION
SQL语句I COMMIT I ROLLBACK I
- 事务的ACD属性
- 原子性:一个事务中的所有操作要么全部完成,要么全部失败。事务执行后不允许停留在中间某个状态
- 一致性:事务的一致性。不管在任何给定的时间、并发事务有多少,事务必须保证运行结果的一致性
- 隔离性:隔离性要求事务不受其他并发事务的影响,如同在给定的时间內该事务是数据库唯一运行的事物,默认情况下A事务,只能看到日志中该事务的相关数据
- 持久性:事务一旦提交,结果便是永久性的。即便发生宕机,仍然可以依靠事务日志完成数据的持久化
- 事务的四个隔离级别
- read uncommitted 读取未提交数据
- read committed 读取已提交数据
- repeatable read 重复读取
- serializable序列化
- 修改事务隔离级别
- READ UNCOMMITTED代表可以读取其他事务未提交的数据
SET SESSION TRANSACTON工 SOLATION LEVEL READ UNCOMMITTED
- READ COMMITTED代表只能读取其他事务提交的数据
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
- READ COMMITTED代表只能读取其他事务提交的数据
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
- 事务的序列化
- 由于事务并发执行所带来的各种问题,前三种隔离级别只适用在某些业务场景中,但是序列化的隔离性,让事务逐一执行,就不会产生上述问题
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
- 由于事务并发执行所带来的各种问题,前三种隔离级别只适用在某些业务场景中,但是序列化的隔离性,让事务逐一执行,就不会产生上述问题
- READ UNCOMMITTED代表可以读取其他事务未提交的数据
7.2 数据导入与导出
- 数据导出与备份的区别
- 数据导出,导出的纯粹是业务数据
- 数据备份,备份的是数据文件、日志文件、索引文件等等
- 数据导出的分类
- SQL文档
- 文本文档
- 导入SQL文件
- mysqldump用来把业务数据导出成SQL文件,其中也包括了表结构
mysqldump -uroot-p[ no-data]逻辑库>路径
- mysqldump用来把业务数据导出成SQL文件,其中也包括了表结构
MySQL数据库(最全)相关推荐
- MySQL数据库之全量+增量+二进制日志的备份与恢复
一.简介数据的备份与恢复 1.为什么备份? 灾难恢复:人为错误.硬件故障(冗余).软件故障(bug).自然灾害.黑客攻击.误操作.-: 测试: 2.备份时应该注意些什么? 能容忍最多丢失多少数据: 恢 ...
- MYSQL数据库备份全攻略
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.有时,正是MySQL管理员造成破坏.管理员已经知道表已破坏,用 ...
- mysql数据库教程全解_MySQL数据库基础教程详解
为了确保数据的完整性和一致性,在创建表时指定字段名称,字段类型和字段属性外,还需要使用约束(constraint),索引(index),主键(primary key)和外键(foregin key)等 ...
- Linux MySQL数据库的备份
Linux MySQL数据库的全库和单库备份 MySQL数据库的备份重要性不用多说,备份方式也很多,但常用的是MySQL自带的备份程序MySQLdump,该程序一键备份,一 ...
- 互联网寒冬!技术站最全MySQL数据库实战规范
享学课堂特邀作者:老顾 转载请声明出处! 前言 我们小伙伴们经常使用到mysql数据库,一般就这么一用,很少会考虑mysql里面的细节问题,如sql语句的规范,或索引有没有起到相应的效果,今天老顾就给 ...
- mysql 数据库定时备份 增量/全备份
echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile cd $BakDir/daily /bin/rm -f * 2)增量备份脚本(脚本 ...
- mysql数据库诊断_RDS MySQL 数据库全量SQL诊断
三大难点问题 使用MySQL数据库的用户,不可避免都会遇到下面三个难题: 1.历史问题难定位 数据库凌晨3点发生了CPU 100%的告警,但是该时间段却没有任何慢SQL,怎么继续查找原因? 2.SQL ...
- dw2019连接mysql数据库_Dreamweaver 8.0连接Mysql数据库全攻略
1 Dreamweaver 8.0 连接 Mysql 数据库全攻略 一.所需安装文件清单: 1 . Dreamweaver8.0 2 . SP2DBFix1.0.2.mxp ( Dreamweaver ...
- 1Python全栈之路系列之MySQL数据库基本操作
Python全栈之路系列之MySQL数据库基本操作 MySQL数据库介绍 MySQL是一种快速易用的关系型数据库管理系统(RDBMS),很多企业都在使用它来构建自己的数据库. MySQL由一家瑞典公司 ...
- SQL数据库不用SQL语句能显示全表的内容_详解mysql数据库sql优化技巧总结
概述 关于SQL优化的教程很多,但是比较杂乱.所以抽空整理了一下,也写出来跟大家分享一下.以下主要针对MySQL数据库,Oracle数据库也可以参考. 优化技巧总结 1.建索引 对查询进行优化,要尽量 ...
最新文章
- 机器指令到汇编再到高级编程语言!
- 树莓派安装oepncv3.43
- 普通话计算机考试相关信息,普通话考试常见问题有哪些
- PYTHON -MYSQLDB安装遇到的问题和解决办法
- 后台开发经典书籍--深入理解计算机系统
- linux shell 字符串 数组,bash shell函数返回数组字符串
- python 之路N01'
- invalid currency could not be saved in AG3
- 4999元起!三星在中国正式发布Galaxy S22系列
- Intellij idea 快捷键 生成序列化ID
- InstallShield 2012 Spring新功能试用(6): InstallScript工程支持64位组件(Components)...
- Qt QT的I/O流 QT输入输出
- Hibernate 与 Mybatis 如何共存?打破你的认知!
- 分布式定时任务之3:elasticjob状态一直是分片待调整
- sip协议详解(一)
- Nmap扫描端口常用指令
- VMware Tools安装
- spring 实现小程序抖音去水印后台
- 学习了pr后的收获_学习后的感想和收获
- 记第一次挖洞交洞历程