auto commit

This commit is contained in:
CyC2018
2020-11-17 00:32:18 +08:00
parent f5ad47b470
commit 7e61fc1360
380 changed files with 2371 additions and 46715 deletions

View File

@ -1,42 +1,44 @@
# SQL 语法
<!-- GFM-TOC -->
* [基础](#一基础)
* [创建表](#二创建表)
* [修改](#三修改)
* [插入](#四插入)
* [更新](#五更新)
* [删除](#六删除)
* [查询](#七查询)
* [DISTINCT](#distinct)
* [LIMIT](#limit)
* [排序](#八排序)
* [过滤](#九过滤)
* [通配符](#十通配符)
* [计算字段](#一计算字段)
* [函数](#二函数)
* [汇总](#汇总)
* [文本处理](#文本处理)
* [日期和时间处理](#日期和时间处理)
* [数值处理](#数值处理)
* [十三分组](#十三分组)
* [子查询](#四子查询)
* [连接](#五连接)
* [连接](#连接)
* [连接](#连接)
* [连接](#连接)
* [连接](#连接)
* [十六组合查询](#十六组合查询)
* [视图](#七视图)
* [存储过程](#八存储过程)
* [游标](#九游标)
* [触发器](#二十触发器)
* [二十事务管理](#二十一事务管理)
* [二十字符集](#二十二字符集)
* [二十权限管理](#二十三权限管理)
* [参考资料](#参考资料)
* [SQL 语法](#sql-语法)
* [基础](#一基础)
* [创建](#二创建)
* [修改表](#三修改表)
* [插入](#四插入)
* [更新](#五更新)
* [删除](#六删除)
* [查询](#七查询)
* [DISTINCT](#distinct)
* [LIMIT](#limit)
* [排序](#八排序)
* [过滤](#九过滤)
* [通配符](#通配符)
* [计算字段](#一计算字段)
* [十二函数](#十二函数)
* [汇总](#汇总)
* [文本处理](#文本处理)
* [日期和时间处理](#日期和时间处理)
* [数值处理](#数值处理)
* [分组](#三分组)
* [子查询](#四子查询)
* [十五连接](#十五连接)
* [连接](#连接)
* [自连接](#自连接)
* [自然连接](#自然连接)
* [外连接](#外连接)
* [组合查询](#六组合查询)
* [视图](#七视图)
* [存储过程](#八存储过程)
* [游标](#十九游标)
* [二十触发器](#二十触发器)
* [二十事务管理](#二十一事务管理)
* [二十字符集](#二十二字符集)
* [二十三权限管理](#二十三权限管理)
* [参考资料](#参考资料)
<!-- GFM-TOC -->
# 基础
## 基础
模式定义了数据如何存储存储什么样的数据以及数据如何分解等信息数据库和表都有模式
@ -49,7 +51,7 @@ SQL 语句不区分大小写,但是数据库表名、列名和值是否区分
SQL 支持以下三种注释
```sql
# 注释
## 注释
SELECT *
FROM mytable; -- 注释
/* 注释1
@ -63,7 +65,7 @@ CREATE DATABASE test;
USE test;
```
# 创建表
## 创建表
```sql
CREATE TABLE mytable (
@ -79,7 +81,7 @@ CREATE TABLE mytable (
PRIMARY KEY (`id`));
```
# 修改表
## 修改表
添加列
@ -101,7 +103,7 @@ DROP COLUMN col;
DROP TABLE mytable;
```
# 插入
## 插入
普通插入
@ -125,7 +127,7 @@ CREATE TABLE newtable AS
SELECT * FROM mytable;
```
# 更新
## 更新
```sql
UPDATE mytable
@ -133,7 +135,7 @@ SET col = val
WHERE id = 1;
```
# 删除
## 删除
```sql
DELETE FROM mytable
@ -148,9 +150,9 @@ TRUNCATE TABLE mytable;
使用更新和删除操作时一定要用 WHERE 子句不然会把整张表的数据都破坏可以先用 SELECT 语句进行测试防止错误删除
# 查询
## 查询
## DISTINCT
### DISTINCT
相同值只会出现一次它作用于所有列也就是说所有列的值都相同才算相同
@ -159,7 +161,7 @@ SELECT DISTINCT col1, col2
FROM mytable;
```
## LIMIT
### LIMIT
限制返回的行数可以有两个参数第一个参数为起始行 0 开始第二个参数为返回的总行数
@ -185,7 +187,7 @@ FROM mytable
LIMIT 2, 3;
```
# 排序
## 排序
- **ASC** 升序默认
- **DESC** 降序
@ -198,7 +200,7 @@ FROM mytable
ORDER BY col1 DESC, col2 ASC;
```
# 过滤
## 过滤
不进行过滤的数据非常大导致通过网络传输了多余的数据从而浪费了网络带宽因此尽量使用 SQL 语句来过滤不必要的数据而不是传输所有的数据到客户端中然后由客户端进行过滤
@ -229,11 +231,11 @@ WHERE col IS NULL;
**NOT** 操作符用于否定一个条件
# 通配符
## 通配符
通配符也是用在过滤语句中但它只能用于文本字段
- **%** 匹配 >=0 个任意字符
- **%** 匹配 \>=0 个任意字符
- **\_** 匹配 ==1 个任意字符
@ -249,7 +251,7 @@ WHERE col LIKE '[^AB]%'; -- 不以 A 和 B 开头的任意文本
不要滥用通配符通配符位于开头处匹配会非常慢
# 十一计算字段
## 十一计算字段
在数据库服务器上完成数据的转换和格式化的工作往往比客户端上快得多并且转换和格式化后的数据量更少的话可以减少网络通信量
@ -267,11 +269,11 @@ SELECT CONCAT(TRIM(col1), '(', TRIM(col2), ')') AS concat_col
FROM mytable;
```
# 十二函数
## 十二函数
各个 DBMS 的函数都是不相同的因此不可移植以下主要是 MySQL 的函数
## 汇总
### 汇总
| | |
| :---: | :---: |
@ -290,7 +292,7 @@ SELECT AVG(DISTINCT col1) AS avg_col
FROM mytable;
```
## 文本处理
### 文本处理
| 函数 | 说明 |
| :---: | :---: |
@ -311,11 +313,11 @@ FROM mytable
WHERE SOUNDEX(col1) = SOUNDEX('apple')
```
## 日期和时间处理
### 日期和时间处理
- 日期格式YYYY-MM-DD
- 时间格式HH:<zero-width space>MM:SS
- 时间格式HH:\<zero-width space\>MM:SS
| | |
| :---: | :---: |
@ -345,7 +347,7 @@ mysql> SELECT NOW();
2018-4-14 20:25:11
```
## 数值处理
### 数值处理
| 函数 | 说明 |
| :---: | :---: |
@ -359,7 +361,7 @@ mysql> SELECT NOW();
| PI() | 圆周率 |
| RAND() | 随机数 |
# 十三分组
## 十三分组
把具有相同的数据值的行放在同一组中
@ -399,7 +401,7 @@ HAVING num >= 2;
- NULL 的行会单独分为一组
- 大多数 SQL 实现不支持 GROUP BY 列具有可变长度的数据类型
# 十四子查询
## 十四子查询
子查询中只能返回一个字段的数据
@ -423,7 +425,7 @@ FROM Customers
ORDER BY cust_name;
```
# 十五连接
## 十五连接
连接用于连接多个表使用 JOIN 关键字并且条件语句使用 ON 而不是 WHERE
@ -431,7 +433,7 @@ ORDER BY cust_name;
可以用 AS 给列名计算字段和表名取别名给表名取别名是为了简化 SQL 语句以及连接相同表
## 内连接
### 内连接
内连接又称等值连接使用 INNER JOIN 关键字
@ -449,7 +451,7 @@ FROM tablea AS A, tableb AS B
WHERE A.key = B.key;
```
## 自连接
### 自连接
自连接可以看成内连接的一种只是连接的表是自身而已
@ -475,7 +477,7 @@ ON e1.department = e2.department
AND e2.name = "Jim";
```
## 自然连接
### 自然连接
自然连接是把同名列通过等值测试连接起来的同名列可以有多个
@ -486,7 +488,7 @@ SELECT A.value, B.value
FROM tablea AS A NATURAL JOIN tableb AS B;
```
## 外连接
### 外连接
外连接保留了没有关联的那些行分为左外连接右外连接以及全外连接左外连接就是保留左表没有关联的行
@ -525,7 +527,7 @@ orders 表:
| 3 | c | 4 |
| 2 | b | Null |
# 十六组合查询
## 十六组合查询
使用 **UNION** 来组合两个查询如果第一个查询返回 M 第二个查询返回 N 那么组合查询的结果一般为 M+N
@ -545,7 +547,7 @@ FROM mytable
WHERE col =2;
```
# 十七视图
## 十七视图
视图是虚拟的表本身不包含数据也就不能对其进行索引操作
@ -565,7 +567,7 @@ FROM mytable
WHERE col5 = val;
```
# 十八存储过程
## 十八存储过程
存储过程可以看成是对一系列 SQL 操作的批处理
@ -603,7 +605,7 @@ call myprocedure(@ret);
select @ret;
```
# 十九游标
## 十九游标
在存储过程中使用游标可以对一个结果集进行移动遍历
@ -639,7 +641,7 @@ create procedure myprocedure(out ret int)
delimiter ;
```
# 二十触发器
## 二十触发器
触发器会在某个表执行以下语句时而自动执行DELETEINSERTUPDATE
@ -660,7 +662,7 @@ UPDATE 触发器包含一个名为 NEW 和一个名为 OLD 的虚拟表,其中
MySQL 不允许在触发器中使用 CALL 语句也就是不能调用存储过程
# 二十一事务管理
## 二十一事务管理
基本术语
@ -687,7 +689,7 @@ ROLLBACK TO delete1
COMMIT
```
# 二十二字符集
## 二十二字符集
基本术语
@ -711,7 +713,7 @@ FROM mytable
ORDER BY col COLLATE latin1_general_ci;
```
# 二十三权限管理
## 二十三权限管理
MySQL 的账户信息保存在 mysql 这个数据库中
@ -776,13 +778,6 @@ REVOKE SELECT, INSERT ON mydatabase.* FROM myuser;
SET PASSWROD FOR myuser = Password('new_password');
```
# 参考资料
## 参考资料
- BenForta. SQL 必知必会 [M]. 人民邮电出版社, 2013.
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>