111018-17405394181be9

SQL

Mysql Sql通用语法

  1. SQL语句可以单行或多行书写,以分号结尾。
  2. SQL语句可以使用空格/缩进来增强语句的可读性
  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
  4. 注释:
    • 单行注释: –注释内容 或 # 注释内容(MySQL特有)
    • 多行注释: /*注释内容 */

Sql语句分类

img

DDL

DDL主要用来操作数据库,表,字段。

DDL-数据库操作

  • 查询

查询所有数据库

1
2
3
4
5
-- 查询所有数据库
show databases;

-- 查询当前数据库
select database();
  • 创建数据库
1
2
3
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集][COLLATE 排序规则];
-- 创建案例
create database if not exists db default char set 'utf8mb4' COLLATE 'utf8mb4_general_ci'
  • 删除数据库
1
drop database [if exists] 数据库名;
  • 使用数据库
1
USE 数据库名;

DDL-表操作

  • 查询当前数据库所有表
1
show tables;
  • 查询表结构
1
desc 表名;
  • 查询指定表的建表语句
1
show create table 表名;
  • 创建数据库表
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段2 字段2类型[COMMENT 字段2注释],
字段3 字段3类型[COMMENT 字段3注释],
字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];

create table user(
name varchar(32) comment '姓名',
age tinyint(32) comment '年龄'
) comment '用户表';
  • 修改数据库表
    • 添加字段
1
ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释][约束];
  • 修改字段类型
1
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度)[COMMENT 注释][约束];
  • 修改字段名和字段类型
1
ALTER TABLE 表名 CHANGE 字段名 新字段名 新数据类型(长度)[COMMENT 注释][约束];
  • 删除字段
1
ALTER TABLE 表名 DROP 字段;
  • 修改表名
1
ALTER TABLE 表名 RENAME TO 新表名
  • 删除表
    • drop:删除数据库表
1
DROP TABLE [IF EXISTS] 表名
  • truncate: 删除指定表,并重新创建表
1
TRUNCATE TABLE 表名

DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。

  • 添加数据(INSERT)

img

  • 修改数据(UPDATE)

img

后面的where条件可以有也可以没有,如果没有,则会修改整张表的数据

  • 删除数据(DELETE)
1
DELETE FROM 表名 [WHERE 条件]

后面的where条件可以有也可以没有,如果没有,则会删除整张表的数据

DQL

DQL英文全称是Data QueryLanguage(数据查询语言),数据查询语言,用来查询数据库中表的记录。

img

基本查询

img

条件查询

img

聚合函数

将一列数据作为一个整体,进行纵向计算

img

分组查询

1
SELECT 字段列表 FROM 表名[WHERE 条件]GROUP BY 分组字段名[HAVING 分组后过滤条件];

img

排序查询

1
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2

分页查询

1
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数

DCL

用户管理

DCL英文全称是Data ControlLanguage(数据控制语言),用来管理数据库用户、控制数据库的访问权限

img

权限控制

img

img

MySql数据类型

数值类型

***分类***** ***类型***** ***大小***** ***有符号(SIGNED)范围***** ***无符号(UNSIGNED)范围***** ***描述*****
数值类型 TINYINT 1 byte (-128,127) (0,255) 小整数值
SMALLINT 2 bytes (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3 bytes (-8388608,8388607) (0,16777215) 大整数值
INT或INTEGER 4 bytes (-2147483648,2147483647) (0,4294967295) 大整数值
BIGINT 8 bytes (-2^63,2^63-1) (0,2^64-1) 极大整数值
FLOAT 4 bytes (-3.402823466 E+38,3.402823466351 E+38) 0和(1.175494351 E-38,3.402823466 E+38) 单精度浮点数值
DOUBLE 8 bytes (-1.7976931348623157 E+308,1.7976931348623157 E+308) 0和(2.2250738585072014 E-308,1.7976931348623157 E+308) 双精度浮点数值
DECIMAL ***依赖于M(精度)和D(标度)的值***** ***依赖于M(精度)和D(标度)的值***** 小数值(精确定点数)

字符串类型

***分类***** ***类型***** ***大小***** ***描述*****
字符串类型 CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65535 bytes 二进制形式的长文本数据
TEXT 0-65535 bytes 长文本数据
MEDIUMBLOB 0-16777215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16777215 bytes 中等长度文本数据
LONGBLOB 0-4294967295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4294967295 bytes 极大文本数据

日期类型

***分类***** ***类型***** ***大小***** ***范围***** ***格式***** ***描述*****
日期类型 DATE 3 1000-01-01至9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59至838:59:59 HH:MM:SS 时间值或持续时间
YEAR 1 1901至2155 YYYY 年份值
DATETIME 8 1000-01-0100:00:00至9999-12-3123:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-0100:00:01至2038-01-1903:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳

函数

字符串函数

img

日期函数

img

数值函数

img

流程函数

img

约束

img

外键约束删除更新行为

img

多表查询

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多(多对一)
  • 多对多
  • 一对一

内连接

img

外连接

img

自连接

img

联合查询

img

如果携带参数ALL,则不会去重。

子查询

img

img

标量子查询

例子:查询销售部的所有员工

1
select * from emp where emp.dept_id = (select id from dept where name = '销售部' )

列子查询

例子:查询有员工薪资大于5000的部门

1
select * from dept where id in (select salary from emp where salary > 5000)

行子查询

img

表子查询

img

事务

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

事务操作

1
2
-- 设置手动提交事务,每次更新操作都要commit才能生效
set @@autocommit = 0

img

手动开启事务,提交与回滚

img

事务的四大特性

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

事务的隔离性是数据库事务的四大特性(ACID)之一,它确保了多个并发执行的事务之间不会相互干扰,每个事务的操作对其他事务是“透明”还是“可见”取决于数据库设置的隔离级别。隔离性旨在解决并发事务操作数据时可能导致的脏读、不可重复读、幻读等问题。

事务的并发问题

img

事务的隔离级别

img

img