auto commit

This commit is contained in:
CyC2018 2018-06-03 16:56:52 +08:00
parent 63cc7da1a4
commit 76034e67bd
3 changed files with 101 additions and 80 deletions

View File

@ -197,13 +197,15 @@ WHERE col IS NULL;
下表显示了 WHERE 子句可用的操作符 下表显示了 WHERE 子句可用的操作符
| 操作符 | 说明 | | 操作符 | 说明 |
| ------------ | ------------ | | :---: | :---: |
| `=` `<` `>` | 等于 小于 大于 | | = | 等于 |
| `<>` `!=` | 不等于 | | &lt; | 小于 |
| `<=` `!>` | 小于等于 | | &gt; | 大于 |
| `>=` `!<` | 大于等于 | | &lt;&gt; != | 不等于 |
| `BETWEEN` | 在两个值之间 | | &lt;= !&gt; | 小于等于 |
| `IS NULL` | 为 NULL 值 | | &gt;= !&lt; | 大于等于 |
| BETWEEN | 在两个值之间 |
| IS NULL | 为 NULL 值 |
应该注意到NULL 与 0、空字符串都不同。 应该注意到NULL 与 0、空字符串都不同。
@ -253,17 +255,39 @@ FROM mytable;
# 十二、函数 # 十二、函数
各个 DBMS 的函数都是不相同的,因此不可移植。 各个 DBMS 的函数都是不相同的,因此不可移植,以下主要是 MySQL 的函数。
## 汇总
|函 数 |说 明|
| :---: | :---: |
| AVG() | 返回某列的平均值 |
| COUNT() | 返回某列的行数 |
| MAX() | 返回某列的最大值 |
| MIN() | 返回某列的最小值 |
| SUM() |返回某列值之和 |
AVG() 会忽略 NULL 行。
使用 DISTINCT 可以让汇总函数值汇总不同的值。
```sql
SELECT AVG(DISTINCT col1) AS avg_col
FROM mytable;
```
## 文本处理 ## 文本处理
| 函数 | 说明 | | 函数 | 说明 |
| :---: | :---: | | :---: | :---: |
| `LEFT()` `RIGHT()` | 左边或者右边的字符 | | LEFT() | 左边的字符 |
| `LOWER()` `UPPER()` | 转换为小写或者大写 | | RIGHT() | 右边的字符 |
| `LTRIM()` `RTIM()` | 去除左边或者右边的空格 | | LOWER() | 转换为小写字符 |
| `LENGTH()` | 长度 | | UPPER() | 转换为大写字符 |
| `SOUNDEX()` | 转换为语音值 | | LTRIM() | 去除左边的空格 |
| RTRIM() | 去除右边的空格 |
| LENGTH() | 长度 |
| SOUNDEX() | 转换为语音值 |
其中, **SOUNDEX()** 可以将一个字符串转换为描述其语音表示的字母数字模式。 其中, **SOUNDEX()** 可以将一个字符串转换为描述其语音表示的字母数字模式。
@ -280,23 +304,23 @@ WHERE SOUNDEX(col1) = SOUNDEX('apple')
|函 数 | 说 明| |函 数 | 说 明|
| :---: | :---: | | :---: | :---: |
| `AddDate()` | 增加一个日期(天、周等)| | AddDate() | 增加一个日期(天、周等)|
| `AddTime()` | 增加一个时间(时、分等)| | AddTime() | 增加一个时间(时、分等)|
| `CurDate()` | 返回当前日期 | | CurDate() | 返回当前日期 |
| `CurTime()` | 返回当前时间 | | CurTime() | 返回当前时间 |
| `Date()` |返回日期时间的日期部分| | Date() |返回日期时间的日期部分|
| `DateDiff()` |计算两个日期之差| | DateDiff() |计算两个日期之差|
| `Date_Add()` |高度灵活的日期运算函数| | Date_Add() |高度灵活的日期运算函数|
| `Date_Format()` |返回一个格式化的日期或时间串| | Date_Format() |返回一个格式化的日期或时间串|
| `Day()`| 返回一个日期的天数部分| | Day()| 返回一个日期的天数部分|
| `DayOfWeek()` |对于一个日期,返回对应的星期几| | DayOfWeek() |对于一个日期,返回对应的星期几|
| `Hour()` |返回一个时间的小时部分| | Hour() |返回一个时间的小时部分|
| `Minute()` |返回一个时间的分钟部分| | Minute() |返回一个时间的分钟部分|
| `Month()` |返回一个日期的月份部分| | Month() |返回一个日期的月份部分|
| `Now()` |返回当前日期和时间| | Now() |返回当前日期和时间|
| `Second()` |返回一个时间的秒部分| | Second() |返回一个时间的秒部分|
| `Time()` |返回一个日期时间的时间部分| | Time() |返回一个日期时间的时间部分|
| `Year()` |返回一个日期的年份部分| | Year() |返回一个日期的年份部分|
```sql ```sql
mysql> SELECT NOW(); mysql> SELECT NOW();
@ -310,34 +334,15 @@ mysql> SELECT NOW();
| 函数 | 说明 | | 函数 | 说明 |
| :---: | :---: | | :---: | :---: |
| `SIN()` | 正弦 | | SIN() | 正弦 |
| `COS()` | 余弦 | | COS() | 余弦 |
| `TAN()` | 正切 | | TAN() | 正切 |
| `ABS()` | 绝对值 | | ABS() | 绝对值 |
| `SQRT()` | 平方根 | | SQRT() | 平方根 |
| `MOD()` | 余数 | | MOD() | 余数 |
| `EXP()` | 指数 | | EXP() | 指数 |
| `PI()` | 圆周率 | | PI() | 圆周率 |
| `RAND()` | 随机数 | | RAND() | 随机数 |
## 汇总
|函 数 |说 明|
| :---: | :---: |
| `AVG()` | 返回某列的平均值 |
| `COUNT()` | 返回某列的行数 |
| `MAX()` | 返回某列的最大值 |
| `MIN()` | 返回某列的最小值 |
| `SUM()` |返回某列值之和 |
AVG() 会忽略 NULL 行。
使用 DISTINCT 可以让汇总函数值汇总不同的值。
```sql
SELECT AVG(DISTINCT col1) AS avg_col
FROM mytable
```
# 十三、分组 # 十三、分组
@ -416,16 +421,16 @@ ORDER BY cust_name;
内连接又称等值连接,使用 INNER JOIN 关键字。 内连接又称等值连接,使用 INNER JOIN 关键字。
```sql ```sql
SELECT a, b, c SELECT A.value, B.value
FROM A INNER JOIN B FROM tablea AS A INNER JOIN tableb AS B
ON A.key = B.key; ON A.key = B.key;
``` ```
可以不明确使用 INNER JOIN而使用普通查询并在 WHERE 中将两个表中要连接的列用等值方法连接起来。 可以不明确使用 INNER JOIN而使用普通查询并在 WHERE 中将两个表中要连接的列用等值方法连接起来。
```sql ```sql
SELECT a, b, c SELECT A.value, B.value
FROM A, B FROM tablea AS A, tableb AS B
WHERE A.key = B.key; WHERE A.key = B.key;
``` ```
@ -452,13 +457,11 @@ WHERE department = (
```sql ```sql
SELECT e1.name SELECT e1.name
FROM employee AS e1, employee AS e2 FROM employee AS e1 INNER JOIN employee AS e2
WHERE e1.department = e2.department ON e1.department = e2.department
AND e2.name = "Jim"; AND e2.name = "Jim";
``` ```
连接一般比子查询的效率高。
## 自然连接 ## 自然连接
自然连接是把同名列通过等值测试连接起来的,同名列可以有多个。 自然连接是把同名列通过等值测试连接起来的,同名列可以有多个。
@ -466,8 +469,8 @@ WHERE e1.department = e2.department
内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列。 内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列。
```sql ```sql
SELECT * SELECT A.value, B.value
FROM employee NATURAL JOIN department; FROM tablea AS A NATURAL JOIN tableb AS B;
``` ```
## 外连接 ## 外连接
@ -482,15 +485,32 @@ FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id; ON Customers.cust_id = Orders.cust_id;
``` ```
如果需要统计顾客的订单数,使用聚集函数。 customers 表:
```sql | cust_id | cust_name |
SELECT Customers.cust_id, | :---: | :---: |
COUNT(Orders.order_num) AS num_ord | 1 | a |
FROM Customers LEFT OUTER JOIN Orders | 2 | b |
ON Customers.cust_id = Orders.cust_id | 3 | c |
GROUP BY Customers.cust_id;
``` orders 表:
| order_id | cust_id |
| :---: | :---: |
|1 | 1 |
|2 | 1 |
|3 | 3 |
|4 | 3 |
结果:
| cust_id | cust_name | order_id |
| :---: | :---: | :---: |
| 1 | a | 1 |
| 1 | a | 2 |
| 3 | c | 3 |
| 3 | c | 4 |
| 2 | b | Null |
# 十六、组合查询 # 十六、组合查询
@ -610,7 +630,7 @@ create procedure myprocedure(out ret int)
触发器会在某个表执行以下语句时而自动执行DELETE、INSERT、UPDATE。 触发器会在某个表执行以下语句时而自动执行DELETE、INSERT、UPDATE。
触发器必须指定在语句执行之前还是之后自动执行,之前执行使用 BEFORE 关键字,之后执行使用 AFTER 关键字。BEFORE 用于数据验证和净化。 触发器必须指定在语句执行之前还是之后自动执行,之前执行使用 BEFORE 关键字,之后执行使用 AFTER 关键字。BEFORE 用于数据验证和净化AFTER 用于审计跟踪,将修改记录到另外一张表中
INSERT 触发器包含一个名为 NEW 的虚拟表。 INSERT 触发器包含一个名为 NEW 的虚拟表。
@ -625,8 +645,6 @@ DELETE 触发器包含一个名为 OLD 的虚拟表,并且是只读的。
UPDATE 触发器包含一个名为 NEW 和一个名为 OLD 的虚拟表,其中 NEW 是可以被修改地,而 OLD 是只读的。 UPDATE 触发器包含一个名为 NEW 和一个名为 OLD 的虚拟表,其中 NEW 是可以被修改地,而 OLD 是只读的。
可以使用触发器来进行审计跟踪,把修改记录到另外一张表中。
MySQL 不允许在触发器中使用 CALL 语句,也就是不能调用存储过程。 MySQL 不允许在触发器中使用 CALL 语句,也就是不能调用存储过程。
# 二十一、事务处理 # 二十一、事务处理

View File

@ -81,7 +81,7 @@
- 在并发的情况下,多个事务并发执行,事务不仅要满足原子性,还需要满足隔离性,才能满足一致性。 - 在并发的情况下,多个事务并发执行,事务不仅要满足原子性,还需要满足隔离性,才能满足一致性。
- 事务满足持久化是为了能应对数据库奔溃的情况。 - 事务满足持久化是为了能应对数据库奔溃的情况。
<div align="center"> <img src="../pics//7b48448f-cbe3-4287-9041-f56566b9d0b4.png"/> </div><br> <div align="center"> <img src="../pics//35650b4b-efa1-49ba-9680-19837027cfc9.png"/> </div><br>
## AUTOCOMMIT ## AUTOCOMMIT
@ -530,6 +530,8 @@ Sname, Sdept 和 Mname 都部分依赖于键码,当一个学生选修了多门
Entity-Relationship有三个组成部分实体、属性、联系。 Entity-Relationship有三个组成部分实体、属性、联系。
用来进行数据库系统的概念设计。
## 实体的三种联系 ## 实体的三种联系
包含一对一,一对多,多对多三种。 包含一对一,一对多,多对多三种。
@ -564,6 +566,7 @@ Entity-Relationship有三个组成部分实体、属性、联系。
# 参考资料 # 参考资料
- 史嘉权. 数据库系统概论[M]. 清华大学出版社有限公司, 2006. - 史嘉权. 数据库系统概论[M]. 清华大学出版社有限公司, 2006.
- AbrahamSilberschatz, HenryF.Korth, S.Sudarshan, 等. 数据库系统概念 [M]. 机械工业出版社, 2006.
- 施瓦茨. 高性能 MYSQL(第3版)[M]. 电子工业出版社, 2013. - 施瓦茨. 高性能 MYSQL(第3版)[M]. 电子工业出版社, 2013.
- [The InnoDB Storage Engine](https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html) - [The InnoDB Storage Engine](https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html)
- [Transaction isolation levels](https://www.slideshare.net/ErnestoHernandezRodriguez/transaction-isolation-levels) - [Transaction isolation levels](https://www.slideshare.net/ErnestoHernandezRodriguez/transaction-isolation-levels)

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB