auto commit
This commit is contained in:
@ -66,14 +66,14 @@ CREATE TABLE mytable (
|
||||
|
||||
# 插入
|
||||
|
||||
**普通插入**
|
||||
**普通插入**
|
||||
|
||||
```sql
|
||||
INSERT INTO mytable(col1, col2)
|
||||
VALUES(val1, val2);
|
||||
```
|
||||
|
||||
**插入检索出来的数据**
|
||||
**插入检索出来的数据**
|
||||
|
||||
```sql
|
||||
INSERT INTO mytable1(col1, col2)
|
||||
@ -81,7 +81,7 @@ SELECT col1, col2
|
||||
FROM mytable2;
|
||||
```
|
||||
|
||||
**将一个表的内容复制到一个新表**
|
||||
**将一个表的内容复制到一个新表**
|
||||
|
||||
```sql
|
||||
CREATE TABLE newtable AS
|
||||
@ -103,27 +103,27 @@ DELETE FROM mytable
|
||||
WHERE id = 1;
|
||||
```
|
||||
|
||||
**TRUNCATE TABLE** 可以清空表,也就是删除所有行。
|
||||
**TRUNCATE TABLE** 可以清空表,也就是删除所有行。
|
||||
|
||||
使用更新和删除操作时一定要用 WHERE 子句,不然会把整张表的数据都破坏。可以先用 SELECT 语句进行测试,防止错误删除。
|
||||
|
||||
# 修改表
|
||||
|
||||
**添加列**
|
||||
**添加列**
|
||||
|
||||
```sql
|
||||
ALTER TABLE mytable
|
||||
ADD col CHAR(20);
|
||||
```
|
||||
|
||||
**删除列**
|
||||
**删除列**
|
||||
|
||||
```sql
|
||||
ALTER TABLE mytable
|
||||
DROP COLUMN col;
|
||||
```
|
||||
|
||||
**删除表**
|
||||
**删除表**
|
||||
|
||||
```sql
|
||||
DROP TABLE mytable;
|
||||
@ -131,7 +131,7 @@ DROP TABLE mytable;
|
||||
|
||||
# 查询
|
||||
|
||||
**DISTINCT**
|
||||
**DISTINCT**
|
||||
|
||||
相同值只会出现一次。它作用于所有列,也就是说所有列的值都相同才算相同。
|
||||
|
||||
@ -140,7 +140,7 @@ SELECT DISTINCT col1, col2
|
||||
FROM mytable;
|
||||
```
|
||||
|
||||
**LIMIT**
|
||||
**LIMIT**
|
||||
|
||||
限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。
|
||||
|
||||
@ -169,8 +169,8 @@ LIMIT 2, 3;
|
||||
|
||||
# 排序
|
||||
|
||||
- **ASC**:升序(默认)
|
||||
- **DESC**:降序
|
||||
- **ASC** :升序(默认)
|
||||
- **DESC** :降序
|
||||
|
||||
可以按多个列进行排序,并且为每个列指定不同的排序方式:
|
||||
|
||||
@ -203,21 +203,21 @@ WHERE col IS NULL;
|
||||
|
||||
应该注意到,NULL 与 0 、空字符串都不同。
|
||||
|
||||
**AND OR** 用于连接多个过滤条件。优先处理 AND,因此当一个过滤表达式涉及到多个 AND 和 OR 时,应当使用 () 来决定优先级。
|
||||
**AND OR** 用于连接多个过滤条件。优先处理 AND,因此当一个过滤表达式涉及到多个 AND 和 OR 时,应当使用 () 来决定优先级。
|
||||
|
||||
**IN** 操作符用于匹配一组值,其后也可以接一个 SELECT 子句,从而匹配子查询得到的一组值。
|
||||
**IN** 操作符用于匹配一组值,其后也可以接一个 SELECT 子句,从而匹配子查询得到的一组值。
|
||||
|
||||
**NOT** 操作符用于否定一个条件。
|
||||
**NOT** 操作符用于否定一个条件。
|
||||
|
||||
# 通配符
|
||||
|
||||
通配符也是用在过滤语句中,但它只能用于文本字段。
|
||||
|
||||
- **%** 匹配 >=0 个任意字符,类似于 \*;
|
||||
- **%** 匹配 >=0 个任意字符,类似于 \*;
|
||||
|
||||
- **\_** 匹配 ==1 个任意字符,类似于 \.;
|
||||
- **\_** 匹配 ==1 个任意字符,类似于 \.;
|
||||
|
||||
- **[ ]** 可以匹配集合内的字符,例如 [ab] 将匹配字符 a 或者 b。用脱字符 ^ 可以对其进行否定,也就是不匹配集合内的字符。
|
||||
- **[ ]** 可以匹配集合内的字符,例如 [ab] 将匹配字符 a 或者 b。用脱字符 ^ 可以对其进行否定,也就是不匹配集合内的字符。
|
||||
|
||||
使用 Like 来进行通配符匹配。
|
||||
|
||||
@ -232,14 +232,14 @@ WHERE col LIKE '[^AB]%' -- 不以 A 和 B 开头的任意文本
|
||||
|
||||
在数据库服务器上完成数据的转换和格式化的工作往往比客户端上快得多,并且转换和格式化后的数据量更少的话可以减少网络通信量。
|
||||
|
||||
计算字段通常需要使用 **AS** 来取别名,否则输出的时候字段名为计算表达式。
|
||||
计算字段通常需要使用 **AS** 来取别名,否则输出的时候字段名为计算表达式。
|
||||
|
||||
```sql
|
||||
SELECT col1*col2 AS alias
|
||||
FROM mytable
|
||||
```
|
||||
|
||||
**Concat()** 用于连接两个字段。许多数据库会使用空格把一个值填充为列宽,因此连接的结果会出现一些不必要的空格,使用 **TRIM()** 可以去除首尾空格。
|
||||
**Concat()** 用于连接两个字段。许多数据库会使用空格把一个值填充为列宽,因此连接的结果会出现一些不必要的空格,使用 **TRIM()** 可以去除首尾空格。
|
||||
|
||||
```sql
|
||||
SELECT Concat(TRIM(col1), ' (', TRIM(col2), ')')
|
||||
@ -260,7 +260,7 @@ FROM mytable
|
||||
| LENGTH() | 长度 |
|
||||
| SUNDEX() | 转换为语音值 |
|
||||
|
||||
其中,**SOUNDEX()** 是将一个字符串转换为描述其语音表示的字母数字模式的算法,它是根据发音而不是字母比较。
|
||||
其中, **SOUNDEX()** 是将一个字符串转换为描述其语音表示的字母数字模式的算法,它是根据发音而不是字母比较。
|
||||
|
||||
```sql
|
||||
SELECT *
|
||||
@ -429,7 +429,7 @@ where A.key = B.key
|
||||
|
||||
一张员工表,包含员工姓名和员工所属部门,要找出与 Jim 处在同一部门的所有员工姓名。
|
||||
|
||||
**子查询版本**
|
||||
**子查询版本**
|
||||
|
||||
```
|
||||
select name
|
||||
@ -440,7 +440,7 @@ where department = (
|
||||
where name = "Jim");
|
||||
```
|
||||
|
||||
**自连接版本**
|
||||
**自连接版本**
|
||||
|
||||
```
|
||||
select name
|
||||
@ -486,7 +486,7 @@ group by Customers.cust_id;
|
||||
|
||||
# 组合查询
|
||||
|
||||
使用 **UNION** 来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果为 M+N 行。
|
||||
使用 **UNION** 来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果为 M+N 行。
|
||||
|
||||
每个查询必须包含相同的列、表达式或者聚集函数。
|
||||
|
||||
@ -526,13 +526,13 @@ WHERE col5 = val;
|
||||
|
||||
存储过程可以看成是对一系列 SQL 操作的批处理;
|
||||
|
||||
**使用存储过程的好处**
|
||||
**使用存储过程的好处**
|
||||
|
||||
1. 代码封装,保证了一定的安全性;
|
||||
2. 代码复用;
|
||||
3. 由于是预先编译,因此具有很高的性能。
|
||||
|
||||
**创建存储过程**
|
||||
**创建存储过程**
|
||||
|
||||
命令行中创建存储过程需要自定义分隔符,因为命令行是以 ; 为结束符,而存储过程中也包含了分号,因此会错误把这部分分号当成是结束符,造成语法错误。
|
||||
|
||||
@ -567,7 +567,7 @@ select @ret;
|
||||
|
||||
游标主要用于交互式应用,其中用户需要对数据集中的任意行进行浏览和修改。
|
||||
|
||||
**使用游标的四个步骤:**
|
||||
**使用游标的四个步骤:**
|
||||
|
||||
1. 声明游标,这个过程没有实际检索出数据;
|
||||
2. 打开游标;
|
||||
@ -620,7 +620,7 @@ MySQL 不允许在触发器中使用 CALL 语句 ,也就是不能调用存储
|
||||
|
||||
# 事务处理
|
||||
|
||||
**基本术语**
|
||||
**基本术语**
|
||||
|
||||
1. 事务(transaction)指一组 SQL 语句;
|
||||
2. 回退(rollback)指撤销指定 SQL 语句的过程;
|
||||
@ -647,7 +647,7 @@ COMMIT
|
||||
|
||||
# 字符集
|
||||
|
||||
**基本术语**
|
||||
**基本术语**
|
||||
|
||||
1. 字符集为字母和符号的集合;
|
||||
2. 编码为某个字符集成员的内部表示;
|
||||
@ -678,7 +678,7 @@ USE mysql;
|
||||
SELECT user FROM user;
|
||||
```
|
||||
|
||||
**创建账户**
|
||||
**创建账户**
|
||||
|
||||
```sql
|
||||
CREATE USER myuser IDENTIFIED BY 'mypassword';
|
||||
@ -686,25 +686,25 @@ CREATE USER myuser IDENTIFIED BY 'mypassword';
|
||||
|
||||
新创建的账户没有任何权限。
|
||||
|
||||
**修改账户名**
|
||||
**修改账户名**
|
||||
|
||||
```sql
|
||||
RENAME myuser TO newuser;
|
||||
```
|
||||
|
||||
**删除账户**
|
||||
**删除账户**
|
||||
|
||||
```sql
|
||||
DROP USER myuser;
|
||||
```
|
||||
|
||||
**查看权限**
|
||||
**查看权限**
|
||||
|
||||
```sql
|
||||
SHOW GRANTS FOR myuser;
|
||||
```
|
||||
|
||||
**授予权限**
|
||||
**授予权限**
|
||||
|
||||
```sql
|
||||
GRANT SELECT, INSERT ON mydatabase.* TO myuser;
|
||||
@ -714,7 +714,7 @@ GRANT SELECT, INSERT ON mydatabase.* TO myuser;
|
||||
|
||||
账户用 username@host 的形式定义,username@% 使用的是默认主机名。
|
||||
|
||||
**删除权限**
|
||||
**删除权限**
|
||||
|
||||
```sql
|
||||
REVOKE SELECT, INSERT ON mydatabase.* FROM myuser;
|
||||
@ -728,7 +728,7 @@ GRANT 和 REVOKE 可在几个层次上控制访问权限:
|
||||
- 特定的列;
|
||||
- 特定的存储过程。
|
||||
|
||||
**更改密码**
|
||||
**更改密码**
|
||||
|
||||
必须使用 Password() 函数
|
||||
|
||||
|
Reference in New Issue
Block a user