1.MysqL概述
2.sql
全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。
2.1 sql通用语法
- sql语句可以单行或多行书写,以分号结尾。
- sql语句可以使用空格/缩进来增强语句的可读性。
- MysqL数据库的sql语句不区分大小写,关键字建议使用大写。
- 注释:
单行注释:-- 注释内容 或 # 注释内容
多行注释:/* 注释内容 */
2.2 sql分类
- DDL Data DeFinition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
- DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
- DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
- DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限
2.3 DDL
Data DeFinition Language,数据定义语言,用来定义数据库对象(数据库,表,字段)
2.3.1 数据库操作
- 查询所有数据库
show databases; - 查询当前数据库
select database(); - 创建数据库
create database [if not exists] 数据库名 [default charst 字符集] ; - 删除数据库
drop database [if exists] 数据库名; - 切换数据库
use 数据库名 ;
2.3.2 表操作
2.3.2.1 表操作-查询创建
- 查询当前数据库所有表
show tables; - 查看指定表结构
desc 表名 ;
3.查询指定表的建表语句
show create table 表名 ;
4.创建表结构
CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ],
…
字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
2.3.2.2 表操作-数据类型
- 数值类型
- 字符串类型
- 日期时间类型
2.3.2.4 表操作-修改
- 添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ]; - 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度); - 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [COMMENT 注释 ] [ 约束 ]; - 删除字段
ALTER TABLE 表名 DROP 字段名; - 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
2.3.2.5 表操作-删除
2.4 DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
- 添加数据(INSERT)
- 修改数据(UPDATE)
- 删除数据(DELETE)
2.4.1 添加数据
- 给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, …) VALUES (值1, 值2, …); - 给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, …); - 批量添加数据
INSERT INTO 表名 (字段名1, 字段名2, …) VALUES (值1, 值2, …), (值1, 值2, …), (值1, 值2, …) ;
2.4.2 修改数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , … [ WHERE 条件 ] ;
2.4.3 删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
2.5 DQL
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
- 查询数据(SELECT)
2.5.1 基本语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
2.5.2 基础查询
- 查询多个字段
SELECT * FROM 表名; - 字段设置别名
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] … FROM 表名; - 去除重复记录
SELECT disTINCT 字段列表 FROM 表名;
2.5.3 条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
2.5.4 聚合函数
SELECT 聚合函数(字段列表) FROM 表名 ;
2.5.5 分组查询
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
2.5.6 排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
- ASC : 升序(默认值)
- DESC: 降序
2.5.7 分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
2.6 DCL
DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。
2.6.1 管理用户
- 查询用户
select * from MysqL.user; - 创建用户
CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’; - 修改用户密码
ALTER USER ‘用户名’@‘主机名’ IDENTIFIED WITH MysqL_native_password BY ‘新密码’ ; - 删除用户
DROP USER ‘用户名’@‘主机名’ ;
2.6.2 权限控制
- 查询权限
SHOW GRANTS FOR ‘用户名’@‘主机名’ ; - 授予权限
GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘主机名’; - 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名’@‘主机名’;
3.函数
3.1 字符串函数
3.2 数值函数
3.3 日期函数
3.4 流程函数
4.约束
4.1 语法
4.2 删除/更新行为
添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:
具体语法为:
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
5.多表查询
5.1 多表关系
各个表之间的联系:
* 一对多(多对一)
* 多对多
* 一对一
5.1.1 一对多
5.1.2 多对多
- 案例: 学生 与 课程的关系
- 关系: 一个学生可以选修多门课程,一门课程也可以供多个学生选择
- 实现: 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
5.1.3 一对一
- 案例: 用户 与 用户详情的关系
- 关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
- 实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
5.2 多表查询概述
分类
1. 连接查询
* 内连接:相当于查询A、B交集部分数据
* 外连接:
* 左外连接:查询左表所有数据,以及两张表交集部分数据
* 右外连接:查询右表所有数据,以及两张表交集部分数据
* 自连接:当前表与自身的连接查询,自连接必须使用表别名
2. 子查询
5.3 内连接
内连接查询的是两张表交集部分的数据。
- 隐式内连接
SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 … ; - 显式内连接
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 … ;
5.4 外连接
- 左外连接
左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 … ; - 右外连接
右外连接相当于查询表2(右表)的所有数据,当然也包含表1和表2交集部分的数据。
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 … ;
5.5 自连接
5.5.1 自连接查询
自己连接自己,也就是把一张表连接查询多次。
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 … ;
5.5.2 联合查询
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。
** SELECT 字段列表 FROM 表A …
UNION [ ALL ]
SELECT 字段列表 FROM 表B …;**
- 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
- union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。
5.6 子查询
- 概念
sql语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。 - 分类
根据子查询结果不同,分为:
A. 标量子查询(子查询结果为单个值)
B. 列子查询(子查询结果为一列)
C. 行子查询(子查询结果为一行)
D. 表子查询(子查询结果为多行多列)
根据子查询位置,分为:
A. WHERE之后
B. FROM之后
C. SELECT之后
5.6.1 标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
常用的操作符:= <> > >= < <=
5.6.2 列子查询
子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
5.6.3 行子查询
子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<> 、IN 、NOT IN
5.6.4 表子查询
子查询返回的结果是多行多列,这种子查询称为表子查询。
常用的操作符:IN
6.事务
6.1 事务简介
事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
6.2 事务操作
6.2.1 控制事务1
- 查看/设置事务提交方式
SELECT @@autocommit ;
SET @@autocommit = 0 ; - 提交事务
COMMIT; - 回滚事务
ROLLBACK;
注意:上述的这种方式,我们是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提交, 此时我们执行的DML语句都不会提交, 需要手动的执行commit进行提交。
6.2.2 控制事务2
- 开启事务
START TRANSACTION 或 BEGIN ; - 提交事务
COMMIT; - 回滚事务
ROLLBACK;
6.3 事务四大特征
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
6.4 并发事务问题
-
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
6.5 事务隔离级别
- 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION; - 设置事务隔离级别
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
注意:事务隔离级别越高,数据越安全,但是性能越低。
原文地址:https://www.jb51.cc/wenti/3279959.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。