MySQL

DDL(数据定义语言)

在这里插入图片描述
在这里插入图片描述

创建和查看表

格式

在这里插入图片描述
在这里插入图片描述

数据类型

在这里插入图片描述
数值类型
在这里插入图片描述
字符串类型
在这里插入图片描述
日期类型
在这里插入图片描述
相同点
用途相同:两者都用于存储日期和时间的组合值,通常包括年、月、日、小时、分钟和秒。
格式相同:它们的格式通常是 YYYY-MM-DD HH:MM:SS。
存储相同:在许多数据库系统中,它们都可以存储毫秒级别的精度。

不同点

  1. 时间范围:
    Datetime:在 MySQL 中,Datetime 的有效范围是 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。这使得它适用于更广泛的时间范围需求。
    Timestamp:Timestamp 的有效范围是 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC。它的范围受到 UNIX 时间戳的限制(32位的整数)。
  2. 时区处理:
    Datetime:Datetime 字段不处理时区。它存储的时间值与时区无关,并且在存储和读取时不会进行时区转换。
    Timestamp:Timestamp 字段会根据服务器的时区设置进行转换。当插入一个 Timestamp 值时,它会先将其转换为 UTC,然后存储。当读取该值时,它会将其转换回服务器的时区。
  3. 自动更新:
    Datetime:Datetime 字段不会自动更新。
    Timestamp:Timestamp 字段可以配置为在每次行更新时自动更新(使用 CURRENT_TIMESTAMP 作为默认值并配置 ON UPDATE)。
  4. 存储方式:
    Datetime:存储的是字符串形式的日期时间,通常使用8字节存储。
    Timestamp:存储的是从1970年1月1日开始的秒数,即 UNIX 时间戳,通常使用4字节存储。
  5. 实际使用

Datetime 通常用于需要存储绝对时间且不涉及时区转换的场景,比如记录事件的发生时间、预约时间等。
Timestamp 更适用于需要记录和比较时间戳的场景,尤其是当数据在不同时区的系统之间传输时,如记录最后修改时间、创建时间等。

修改表结构

在这里插入图片描述
修改列
alter table student change dept department VARCHAR(30);

在这里插入图片描述
在这里插入图片描述

DML(数据操作语言)

在这里插入图片描述

数据插入

在这里插入图片描述

使用, 可以插入多条数据
INSERT into student (sid,name,gender,age,birth,address) 
VALUES (1001,'李四','男',18,'2001-07-23','南昌'),
(xxx),
(xxx);

数据修改

在这里插入图片描述

数据删除

在这里插入图片描述

MySQL约束

在这里插入图片描述

主键约束

在这里插入图片描述

单列主键

在这里插入图片描述在这里插入图片描述
pk1是主键名,括号里是列名,pk1可以省略

联合主键

在这里插入图片描述
联合主键里的各列任何一个都不能为空

在这里插入图片描述
在这里插入图片描述

自增长约束

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

非空约束

在这里插入图片描述
在这里插入图片描述

唯一约束

在这里插入图片描述
NULL和任何值都不相等,NULL和NULL都不相等,所以设置了唯一约束的列是可以同时为NULL的

删除唯一约束

alter table <table name> drop index <唯一约束名>

默认约束

在这里插入图片描述

零填充约束

在这里插入图片描述
如果插入了123,则会变成0000000123(加了约束后int是10位)

外键约束

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

create table if not exists dept(
  deptno varchar(20) PRIMARY key,
  name varchar(20)
)
create table if not EXISTS emp(
  eid varchar(20) PRIMARY KEY,
  ename VARCHAR(20),
  age int,
  dept_id VARCHAR(20),
  CONSTRAINT emp_fk FOREIGN key (dept_id) REFERENCES dept(deptno)
)
alter table emp add CONSTRAINT emp_fk FOREIGN key(dept_id) REFERENCES dept(deptno)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果一个从表拥有两个外键,那么另外两个表为主表,主表里受到从表依赖的数据不能随便删除,但是从表数据可以随便删除

DQL(数据查询语言)

在这里插入图片描述
简单查询
在这里插入图片描述

运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条件查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

排序查询

在这里插入图片描述
在这里插入图片描述
字段类型必须为数值或者字符串,时间类型排序

聚合查询

在这里插入图片描述
在这里插入图片描述

分组查询

在这里插入图片描述
在这里插入图片描述
ep:

select category_id,sum(price) sum from product GROUP BY category_id having sum >= 6000 order by sum desc

分组之后,select的后面只可以跟分组字段(category_id)和聚合操作
筛选条件不能使用where只能使用having

分页查询

在这里插入图片描述
分页查询公式:
如果想查询第n页,假设一页有60条,则查询公式为:

select * from product limit (n-1)*60,60
// 查询第n页的前5条
select * from product limit (n-1)*60,5

在这里插入图片描述

insert into pruduct2 select category_id, count(*) from product group by category_id

书写顺序和执行顺序

在这里插入图片描述
在这里插入图片描述

正则表达式

在这里插入图片描述
在这里插入图片描述
a?匹配0次或一次a
在这里插入图片描述
返回值为1or0
可以把REGEXP作为where的条件

以九开头的名称
select * from product WHERE pname REGEXP '^九'
以九结尾
select * from product WHERE pname REGEXP '九$'

select * from product WHERE pname REGEXP '(abab)*'

(abab)序列匹配,直接匹配括号里的字符,可以组合其他符号
(abab)* 出现0次或多次
‘.(abab){2,4}d’,中间至少出现2次至多出现4次

多表操作

多表关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多表联合查询

在这里插入图片描述

交叉连接查询

在这里插入图片描述

内连接

内和外表示的是:
"内"指的是只返回两个表中都有的记录,即"内部"共有的部分。任何在连接条件下不匹配的记录将被排除在结果集之外。
"外"指的是除了返回匹配的记录,还包含了一个表中没有匹配到的记录。具体分为左外连接、右外连接和全外连接:
在这里插入图片描述
在这里插入图片描述

外连接

左外连接(LEFT JOIN):
返回左表中的所有记录,即使右表中没有匹配的记录。对于右表中没有匹配的记录,其结果集中的字段会包含NULL。

右外连接(RIGHT JOIN):
返回右表中的所有记录,即使左表中没有匹配的记录。对于左表中没有匹配的记录,其结果集中的字段会包含NULL。

全外连接(FULL JOIN):
返回两个表中的所有记录。如果在任一表中没有匹配的记录,其结果集中的字段会包含NULL。
在这里插入图片描述
在这里插入图片描述
union将两个结果去重,union all则是将两个结果拼在一起

子查询

在这里插入图片描述
在这里插入图片描述
最后一个需要补充 on t1.deptno=t2.dept_id
在这里插入图片描述

标量子查询(Scalar Subquery):
返回单个值(单行单列)。
常用于SELECT、WHERE、HAVING和ORDER BY子句中。

SELECT employee_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

行子查询(Row Subquery):
返回单行多列。
可以用于与行比较的情况。

SELECT employee_name, salary, department_id
FROM employees
WHERE (salary, department_id) = (SELECT MAX(salary), department_id FROM employees);

表子查询(Table Subquery):
返回多行多列(通常用于IN、EXISTS子句中,或作为临时表)。
可以用于多种上下文中,如FROM子句中的临时表。

SELECT employee_name, salary, department_id
FROM employees
WHERE (department_id, salary) IN (
    SELECT department_id, MAX(salary)
    FROM employees
    GROUP BY department_id
);

子查询关键字

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上级字段,其manager_id必须是本表主键里的eid里的某个存在的值
在这里插入图片描述

在这里插入图片描述

函数

在这里插入图片描述

聚合函数

在这里插入图片描述
在这里插入图片描述

select group_concat(emp_name separator ';') from emp;

在这里插入图片描述

select department,group_concat(emp_name order by salary desc separator ';') from emp group by department;

在这里插入图片描述

数学函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

日期函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

控制流函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
额外查询出多一个列
在这里插入图片描述

窗口函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

序号函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
求部门里薪资排在前三的员工
在这里插入图片描述

开窗聚合函数

在这里插入图片描述
sum进行累加
在这里插入图片描述
如果没有使用order by排序,则默认把分组内所有数据进行sum操作,即c1值为部门薪资和.
这段语句其实是使用了如下默认语句
在这里插入图片描述
unbounded preceding是指直到开头行,到当前行current row,进行累加

将当前行上方三行的值加到当前行(上三行包括当前行)
在这里插入图片描述
向上三行到最后一行(该组内的最后一行)
在这里插入图片描述
当前行加到最后一行
在这里插入图片描述

分布函数

在这里插入图片描述
第一个显示小于等于当前行的salary的行数/总记录数
第二个显示小于等于当前行的salary的组内的行数/组内总行数
在这里插入图片描述

分布装置

在这里插入图片描述

前后函数

在这里插入图片描述
在这里插入图片描述

头尾函数

在这里插入图片描述
是到目前为止,因为按照入职日期排序了
在这里插入图片描述

其他

如果按照时间排序了,就是截止到当前行
在这里插入图片描述
在这里插入图片描述

视图

在这里插入图片描述

创建

在这里插入图片描述

create or replace view view1
as 
select ename,job from emp

创建完视图之后,将视图当做表一样操作它

修改

在这里插入图片描述

更新

在这里插入图片描述

其他操作

在这里插入图片描述

存储过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也可以使用//充当结束符

变量

局部变量

在这里插入图片描述

用户变量

在这里插入图片描述

系统变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参数传递

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

流程控制

IF
在这里插入图片描述
在这里插入图片描述
CASE
在这里插入图片描述

LEAVE&ITERATE

在这里插入图片描述
WHILE
在这里插入图片描述
在这里插入图片描述
标签是可选项
在这里插入图片描述
REPEAT
在这里插入图片描述
LOOP
在这里插入图片描述

游标

在这里插入图片描述
在这里插入图片描述
直到游标把所有行都取完,然后报错(产生异常),loop才结束

句柄

在这里插入图片描述
在这里插入图片描述
游标取空的错误码为1329
在这里插入图片描述

案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

存储函数

在这里插入图片描述
在这里插入图片描述

触发器

在这里插入图片描述
在这里插入图片描述

创建

在这里插入图片描述
在这里插入图片描述

NEW & OLD

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
S
在这里插入图片描述

索引

在这里插入图片描述

索引种类

在这里插入图片描述
在这里插入图片描述

索引操作

在这里插入图片描述

普通索引

创建
在这里插入图片描述
在这里插入图片描述
查看
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除
在这里插入图片描述

唯一索引

在这里插入图片描述
创建
在这里插入图片描述
在这里插入图片描述

主键索引

在这里插入图片描述
使用show index from table才能看见

组合索引

在这里插入图片描述
在这里插入图片描述

全文索引

在这里插入图片描述
在这里插入图片描述
最好是表中有了数据之后再去创建全文索引
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

空间索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

索引原理

在这里插入图片描述

HASH

在这里插入图片描述

二叉树

二叉排序树
在这里插入图片描述
在这里插入图片描述

B树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

索引特点

在这里插入图片描述
在这里插入图片描述

存储引擎

+
在这里插入图片描述
在这里插入图片描述
在这里插入图片 描述
在这里插入图片描述
在这里插入图片描述

事务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
回滚之后撤销提交的结果

特性

在这里插入图片描述

隔离级别

在这里插入图片描述
在这里插入图片描述
读未提交:(脏读)
在这里插入图片描述

不可重复读(读已提交):
在这里插入图片描述
可重复读:(幻读)
在这里插入图片描述
可重复读:事务开启时,不再允许修改操作,但是其他事务可以插入和删除
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

表锁

在这里插入图片描述
加完之后只能读,不能修改,且只能读该表,不能读其他的表

行锁

在这里插入图片描述
在这里插入图片描述

日志

在这里插入图片描述

错误日志

在这里插入图片描述

二进制日志

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查询日志

在这里插入图片描述
修改myini文件

慢查询日志

在这里插入图片描述

优化

在这里插入图片描述

查看SQL执行频率

在这里插入图片描述
在这里插入图片描述

定位低效率SQL

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Explain分析执行计划

在这里插入图片描述
在这里插入图片描述

id

在这里插入图片描述
在这里插入图片描述

select_type

在这里插入图片描述

type

在这里插入图片描述

其他指标

在这里插入图片描述
key_len的长度
在这里插入图片描述
在这里插入图片描述

Show profile分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

trace分析优化器

在这里插入图片描述
用mysql终端查询
在这里插入图片描述

索引优化

在这里插入图片描述
避免索引失效

全值匹配

查询条件字段和索引字段完全匹配
在这里插入图片描述

在这里插入图片描述

最左前缀法则

在这里插入图片描述
在这里插入图片描述
第一第二个查询使用到了索引,因为使用了name
第三个没用到name,因为是从左到右扫描索引
第四个只使用了name,因为跳过了status

其他原则

在这里插入图片描述
第一个address没使用到索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据中较多北京市,不使用索引
较少西安市,使用索引
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

大批量插入数据

在这里插入图片描述
在这里插入图片描述
通过load向表加载数据时,保证主键有序可以提高执行效率

在这里插入图片描述
如果数据某一列已经是唯一的,那么可以关闭唯一索引,插入后再开启,可以提高执行效率

SQL优化

insert

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

order by

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

子查询

尽量使用多表查询
在这里插入图片描述
在这里插入图片描述

limit

在这里插入图片描述
1.
在这里插入图片描述
2.
在这里插入图片描述

JDBC

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

优化结果集
在这里插入图片描述

增删改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SQL注入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pymysql

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值