Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
CS-Notes
提交
76034e67
C
CS-Notes
项目概览
wushizhenking
/
CS-Notes
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CS-Notes
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
76034e67
编写于
6月 03, 2018
作者:
C
CyC2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
auto commit
上级
63cc7da1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
101 addition
and
80 deletion
+101
-80
notes/SQL.md
notes/SQL.md
+97
-79
notes/数据库系统原理.md
notes/数据库系统原理.md
+4
-1
pics/35650b4b-efa1-49ba-9680-19837027cfc9.png
pics/35650b4b-efa1-49ba-9680-19837027cfc9.png
+0
-0
未找到文件。
notes/SQL.md
浏览文件 @
76034e67
...
...
@@ -197,13 +197,15 @@ WHERE col IS NULL;
下表显示了 WHERE 子句可用的操作符
| 操作符 | 说明 |
| ------------ | ------------ |
|
`=`
`<`
`>`
| 等于 小于 大于 |
|
`<>`
`!=`
| 不等于 |
|
`<=`
`!>`
| 小于等于 |
|
`>=`
`!<`
| 大于等于 |
|
`BETWEEN`
| 在两个值之间 |
|
`IS NULL`
| 为 NULL 值 |
| :---: | :---: |
| = | 等于 |
|
<
| 小于 |
|
>
| 大于 |
|
<>
!= | 不等于 |
|
<
= !
>
| 小于等于 |
|
>
= !
<
| 大于等于 |
| BETWEEN | 在两个值之间 |
| IS NULL | 为 NULL 值 |
应该注意到,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()`
| 左边或者右边的字符 |
|
`LOWER()`
`UPPER()`
| 转换为小写或者大写 |
|
`LTRIM()`
`RTIM()`
| 去除左边或者右边的空格 |
|
`LENGTH()`
| 长度 |
|
`SOUNDEX()`
| 转换为语音值 |
| LEFT() | 左边的字符 |
| RIGHT() | 右边的字符 |
| LOWER() | 转换为小写字符 |
| UPPER() | 转换为大写字符 |
| LTRIM() | 去除左边的空格 |
| RTRIM() | 去除右边的空格 |
| LENGTH() | 长度 |
| SOUNDEX() | 转换为语音值 |
其中,
**SOUNDEX()**
可以将一个字符串转换为描述其语音表示的字母数字模式。
...
...
@@ -280,23 +304,23 @@ WHERE SOUNDEX(col1) = SOUNDEX('apple')
|函 数 | 说 明|
| :---: | :---: |
|
`AddDate()`
| 增加一个日期(天、周等)|
|
`AddTime()`
| 增加一个时间(时、分等)|
|
`CurDate()`
| 返回当前日期 |
|
`CurTime()`
| 返回当前时间 |
|
`Date()`
|返回日期时间的日期部分|
|
`DateDiff()`
|计算两个日期之差|
|
`Date_Add()`
|高度灵活的日期运算函数|
|
`Date_Format()`
|返回一个格式化的日期或时间串|
|
`Day()`
| 返回一个日期的天数部分|
|
`DayOfWeek()`
|对于一个日期,返回对应的星期几|
|
`Hour()`
|返回一个时间的小时部分|
|
`Minute()`
|返回一个时间的分钟部分|
|
`Month()`
|返回一个日期的月份部分|
|
`Now()`
|返回当前日期和时间|
|
`Second()`
|返回一个时间的秒部分|
|
`Time()`
|返回一个日期时间的时间部分|
|
`Year()`
|返回一个日期的年份部分|
|
AddDate()
| 增加一个日期(天、周等)|
|
AddTime()
| 增加一个时间(时、分等)|
|
CurDate()
| 返回当前日期 |
|
CurTime()
| 返回当前时间 |
|
Date()
|返回日期时间的日期部分|
|
DateDiff()
|计算两个日期之差|
|
Date_Add()
|高度灵活的日期运算函数|
|
Date_Format()
|返回一个格式化的日期或时间串|
|
Day()
| 返回一个日期的天数部分|
|
DayOfWeek()
|对于一个日期,返回对应的星期几|
|
Hour()
|返回一个时间的小时部分|
|
Minute()
|返回一个时间的分钟部分|
|
Month()
|返回一个日期的月份部分|
|
Now()
|返回当前日期和时间|
|
Second()
|返回一个时间的秒部分|
|
Time()
|返回一个日期时间的时间部分|
|
Year()
|返回一个日期的年份部分|
```
sql
mysql
>
SELECT
NOW
();
...
...
@@ -310,34 +334,15 @@ mysql> SELECT NOW();
| 函数 | 说明 |
| :---: | :---: |
|
`SIN()`
| 正弦 |
|
`COS()`
| 余弦 |
|
`TAN()`
| 正切 |
|
`ABS()`
| 绝对值 |
|
`SQRT()`
| 平方根 |
|
`MOD()`
| 余数 |
|
`EXP()`
| 指数 |
|
`PI()`
| 圆周率 |
|
`RAND()`
| 随机数 |
## 汇总
|函 数 |说 明|
| :---: | :---: |
|
`AVG()`
| 返回某列的平均值 |
|
`COUNT()`
| 返回某列的行数 |
|
`MAX()`
| 返回某列的最大值 |
|
`MIN()`
| 返回某列的最小值 |
|
`SUM()`
|返回某列值之和 |
AVG() 会忽略 NULL 行。
使用 DISTINCT 可以让汇总函数值汇总不同的值。
```
sql
SELECT
AVG
(
DISTINCT
col1
)
AS
avg_col
FROM
mytable
```
| SIN() | 正弦 |
| COS() | 余弦 |
| TAN() | 正切 |
| ABS() | 绝对值 |
| SQRT() | 平方根 |
| MOD() | 余数 |
| EXP() | 指数 |
| PI() | 圆周率 |
| RAND() | 随机数 |
# 十三、分组
...
...
@@ -416,16 +421,16 @@ ORDER BY cust_name;
内连接又称等值连接,使用 INNER JOIN 关键字。
```
sql
SELECT
a
,
b
,
c
FROM
A
INNER
JOIN
B
SELECT
A
.
value
,
B
.
value
FROM
tablea
AS
A
INNER
JOIN
tableb
AS
B
ON
A
.
key
=
B
.
key
;
```
可以不明确使用 INNER JOIN,而使用普通查询并在 WHERE 中将两个表中要连接的列用等值方法连接起来。
```
sql
SELECT
a
,
b
,
c
FROM
A
,
B
SELECT
A
.
value
,
B
.
value
FROM
tablea
AS
A
,
tableb
AS
B
WHERE
A
.
key
=
B
.
key
;
```
...
...
@@ -452,13 +457,11 @@ WHERE department = (
```
sql
SELECT
e1
.
name
FROM
employee
AS
e1
,
employee
AS
e2
WHERE
e1
.
department
=
e2
.
department
FROM
employee
AS
e1
INNER
JOIN
employee
AS
e2
ON
e1
.
department
=
e2
.
department
AND
e2
.
name
=
"Jim"
;
```
连接一般比子查询的效率高。
## 自然连接
自然连接是把同名列通过等值测试连接起来的,同名列可以有多个。
...
...
@@ -466,8 +469,8 @@ WHERE e1.department = e2.department
内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列。
```
sql
SELECT
*
FROM
employee
NATURAL
JOIN
department
;
SELECT
A
.
value
,
B
.
value
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
;
```
如果需要统计顾客的订单数,使用聚集函数。
customers 表:
```
sql
SELECT
Customers
.
cust_id
,
COUNT
(
Orders
.
order_num
)
AS
num_ord
FROM
Customers
LEFT
OUTER
JOIN
Orders
ON
Customers
.
cust_id
=
Orders
.
cust_id
GROUP
BY
Customers
.
cust_id
;
```
| cust_id | cust_name |
| :---: | :---: |
| 1 | a |
| 2 | b |
| 3 | c |
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。
触发器必须指定在语句执行之前还是之后自动执行,之前执行使用 BEFORE 关键字,之后执行使用 AFTER 关键字。BEFORE 用于数据验证和净化。
触发器必须指定在语句执行之前还是之后自动执行,之前执行使用 BEFORE 关键字,之后执行使用 AFTER 关键字。BEFORE 用于数据验证和净化
,AFTER 用于审计跟踪,将修改记录到另外一张表中
。
INSERT 触发器包含一个名为 NEW 的虚拟表。
...
...
@@ -625,8 +645,6 @@ DELETE 触发器包含一个名为 OLD 的虚拟表,并且是只读的。
UPDATE 触发器包含一个名为 NEW 和一个名为 OLD 的虚拟表,其中 NEW 是可以被修改地,而 OLD 是只读的。
可以使用触发器来进行审计跟踪,把修改记录到另外一张表中。
MySQL 不允许在触发器中使用 CALL 语句,也就是不能调用存储过程。
# 二十一、事务处理
...
...
notes/数据库系统原理.md
浏览文件 @
76034e67
...
...
@@ -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
...
...
@@ -530,6 +530,8 @@ Sname, Sdept 和 Mname 都部分依赖于键码,当一个学生选修了多门
Entity-Relationship,有三个组成部分:实体、属性、联系。
用来进行数据库系统的概念设计。
## 实体的三种联系
包含一对一,一对多,多对多三种。
...
...
@@ -564,6 +566,7 @@ Entity-Relationship,有三个组成部分:实体、属性、联系。
# 参考资料
-
史嘉权. 数据库系统概论[M]. 清华大学出版社有限公司, 2006.
-
AbrahamSilberschatz, HenryF.Korth, S.Sudarshan, 等. 数据库系统概念 [M]. 机械工业出版社, 2006.
-
施瓦茨. 高性能 MYSQL(第3版)[M]. 电子工业出版社, 2013.
-
[
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
)
...
...
pics/35650b4b-efa1-49ba-9680-19837027cfc9.png
0 → 100644
浏览文件 @
76034e67
17.0 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录