mirror of
https://github.com/Estom/notes.git
synced 2026-02-03 02:23:31 +08:00
数据库完成
This commit is contained in:
16
README.md
16
README.md
@@ -33,8 +33,8 @@
|
||||
|
||||
## 3 关于做笔记的讨论
|
||||
|
||||
> 感觉没有必要做笔记,只要在书上做好指明就好了。这就好像在PDF原文上做笔记一样。
|
||||
> 那么什么样的东西才会需要自己做笔记呢?我觉得应该是那些视频教程。如果有纸质书,或者PDF的,可以吧这些资料整合起来。
|
||||
* 感觉没有必要做笔记,只要在书上做好指明就好了。这就好像在PDF原文上做笔记一样。
|
||||
* 那么什么样的东西才会需要自己做笔记呢?我觉得应该是那些视频教程。如果有纸质书,或者PDF的,可以吧这些资料整合起来。
|
||||
|
||||
### 资料的形式可以分为三种:
|
||||
* PDF,电子版
|
||||
@@ -51,6 +51,14 @@
|
||||
### 说明
|
||||
|
||||
* 最好的笔记不能是“讲解”型的,应该是“总结”型的。最好通过符号和图形作为笔记的内容。说明型文字最好不要出现。最好有自己的理解。
|
||||
* 感觉还是具体情况具体分析吧。有一些计算机类的只是,还是详细记录,整理知识点。对于算法或者模型,还是主要讲解数学原理和模型的构建。有书籍的尽量在原来的书籍上做好笔记。如果没有书籍,再考虑大量的做vscode的笔记。
|
||||
|
||||
|
||||
> 感觉还是具体情况具体分析吧。有一些计算机类的只是,还是详细记录,整理知识点。对于算法或者模型,还是主要讲解数学原理和模型的构建。有书籍的尽量在原来的书籍上做好笔记。如果没有书籍,再考虑大量的做vscode的笔记。
|
||||
## 2021年3月31日说明
|
||||
* 昨天晚上思考了一下。做笔记不是写书。不应该写得这么详细。你这种抄书的行为,干嘛不直接去看原来的书籍呢。抄一遍仅仅是为了加深理解?显然不行。
|
||||
* 前几天看了一下sklearn的cookbook。感觉他的风格非常棒。
|
||||
* Getting ready 概念
|
||||
* How to do it 怎么做
|
||||
* How it works 为什么
|
||||
* What's more 还有什么
|
||||
* 我觉得以后做关于技术或者只是类的笔记都可以这么做。
|
||||
* 究极哲学问题:是什么、怎么做、为什么。
|
||||
@@ -9,7 +9,6 @@
|
||||
> 6. 文件共享与文件保护
|
||||
> 7. 数据一致性控制
|
||||
|
||||
|
||||
## 1 文件
|
||||
### 定义
|
||||
* 具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列
|
||||
|
||||
@@ -1,61 +1,80 @@
|
||||
\>创建数据库
|
||||
## 1 数据库对象操作
|
||||
### 创建数据库
|
||||
|
||||
CREATE {DATABASE \| SCHEMA} [IF NOT EXISTS]db_name] [DEFAULT CHARACTER SET =
|
||||
'GBK']
|
||||
```sql
|
||||
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]db_name
|
||||
[DEFAULT CHARACTER SET ='GBK'];
|
||||
```
|
||||
|
||||
创建数据库的或者图表类型选择 —— 可选参数,表示如果不存在时创建 —— 默认编码方式
|
||||
* 创建数据库
|
||||
* —— 类型、名称
|
||||
* —— 可选参数,表示如果不存在时创建
|
||||
* —— 默认编码方式
|
||||
|
||||
\>查看数据库
|
||||
### 查看数据库
|
||||
|
||||
```sql
|
||||
SHOW WARNINGS; 显示警告
|
||||
|
||||
SHOW DATABASES;查看数据存在的
|
||||
|
||||
SHOW CREATE DATABASE;查看数据库的定义信息
|
||||
```
|
||||
|
||||
\>修改指定数据库的编码方式
|
||||
|
||||
ALTER {DATABASE\|SCHMA}db\_name [DEFAULT CHARACTER SET = 'GBK'];
|
||||
|
||||
\>打开指定数据库
|
||||
|
||||
### 修改指定数据库的编码方式
|
||||
```sql
|
||||
ALTER {DATABASE\|SCHMA}db\_name
|
||||
[DEFAULT CHARACTER SET = 'GBK'];
|
||||
```
|
||||
### 打开指定数据库
|
||||
```
|
||||
USE db_name; 打开的数据库名称
|
||||
|
||||
SELECT DATABASE\|SCHEMA();查看当前打开的而数据库名称
|
||||
|
||||
\>删除指定的数据库
|
||||
|
||||
```
|
||||
### 删除指定的数据库
|
||||
```
|
||||
DROP {DATABASE\|SCHEMA}[IF NOT EXISTS] db_name
|
||||
```
|
||||
## 2 数据表对象操作
|
||||
|
||||
\>数据表的相关操作
|
||||
### 定义
|
||||
|
||||
\>\>定义
|
||||
* 数据表用来存储数据的结构
|
||||
|
||||
数据表用来存储数据的结构
|
||||
* 由行和列构成的二维网络
|
||||
|
||||
由行和列构成的二维网络
|
||||
### 创建数据表
|
||||
```
|
||||
CREATE TABLE [IF NOT EXISTS] tbl_name
|
||||
(字段名称 字段类型[完整约束条件])
|
||||
ENGINE =引擎名称
|
||||
CHARSET = 编码方式;
|
||||
```
|
||||
### 数据类型补充
|
||||
> 字节数分别是1-2-3-4-8-1
|
||||
|
||||
\>\>创建数据表
|
||||
|
||||
CREATE TABLE [IF NOT EXISTS] tbl_name(字段名称 字段类型[完整约束条件])ENGINE =
|
||||
引擎名称 CHARSET = 编码方式;
|
||||
|
||||
\>\>数据类型补充
|
||||
|
||||
TINYINT-SMALLINT- MEDIUMAINT- INT- BIGINT- BOOL,BOOLEAN
|
||||
|
||||
字节数分别是1-2-3-4-8-1
|
||||
|
||||
\>\>浮点类型补充
|
||||
```
|
||||
- TINYINT
|
||||
- SMALLINT
|
||||
- MEDIUMAINT
|
||||
- INT
|
||||
- BIGINT
|
||||
- BOOL
|
||||
- BOOLEAN
|
||||
```
|
||||
|
||||
### 浮点类型补充
|
||||
```
|
||||
FLOAT[(m,d)]
|
||||
|
||||
double[(m,d)]
|
||||
|
||||
decemal[m,d]
|
||||
```
|
||||
|
||||
\>\>字符串类型
|
||||
|
||||
### 字符串类型
|
||||
```
|
||||
CHAR(M) M带变得存放的字符数,定长字符串
|
||||
|
||||
VARCHAR(M) 变长字符串
|
||||
@@ -65,9 +84,9 @@ TEXT
|
||||
SET("value","value")集合类型
|
||||
|
||||
ENUM("value","value")枚举类型
|
||||
|
||||
\>\>日期时间类型
|
||||
|
||||
```
|
||||
### 日期时间类型
|
||||
```
|
||||
TIME存储时间
|
||||
|
||||
DATE存储
|
||||
@@ -77,17 +96,18 @@ DATETIME存储时间日期
|
||||
TIMESTAMP存储时间戳
|
||||
|
||||
YEAR存储年份
|
||||
```
|
||||
### 二进制类型
|
||||
|
||||
\>\>二进制类型
|
||||
> 图片或者视频的二进制码
|
||||
|
||||
图片或者视频的二进制码
|
||||
## 3 存储引擎简介
|
||||
|
||||
\>存储引擎简介
|
||||
|
||||
\>\>指表的类型,表在计算机中怎样存储
|
||||
|
||||
\>\>存储引擎:
|
||||
### 存储引擎
|
||||
> 指表的类型,表在计算机中怎样存储
|
||||
|
||||
```
|
||||
SHOW ENGINES;
|
||||
|
||||
SHOW VARIABLES LIKE'storage_engin';
|
||||
@@ -97,3 +117,4 @@ InnoDB 支持外接,存储.fim中,读写效率地,占用空间大
|
||||
MyISAM 索引 结构 数据在三个文件中,占用空间小,快,但不支持事务
|
||||
|
||||
MEMORY 存储在内存中的内容创建表,对应磁盘文件,对磁盘快速处理。
|
||||
```
|
||||
|
||||
@@ -1,22 +1,21 @@
|
||||
**\>数据库注册表修改心得**
|
||||
## 数据库注册表修改心得
|
||||
|
||||
几个月前跟随导员用xampp做的集成开发环境进行Apache服务器上的php网站开发项目
|
||||
> 几个月前跟随导员用xampp做的集成开发环境进行Apache服务器上的php网站开发项目
|
||||
>
|
||||
> 近几日大作业老师要求使用深喉咙的php继承开发环境,结果现在的mysql不听话,各种出错!!!
|
||||
|
||||
近几日大作业老师要求使用深喉咙的php继承开发环境,结果现在的mysql像来了大姨妈一样不听话,各种出错!!!
|
||||
### 端口冲突:
|
||||
|
||||
\>\>端口冲突:
|
||||
> 由于xampp,深喉咙加上我自己的电脑,总共装了三个版本的mysql,导致端口占用等问题时有发生,所以吧xampp和深喉咙的mysql直接删掉,反而不能启动了!
|
||||
|
||||
由于xampp,深喉咙加上我自己的电脑,总共装了三个版本的mysql,导致端口占用等问题时有发生,所以吧xampp和深喉咙的mysql直接删掉,反而不能启动了!
|
||||
### 注册表修改:
|
||||
|
||||
\>\>注册表修改:
|
||||
|
||||
后来发现,深喉咙自动修改了注册表,原来一直启动的并不是电脑上的mysql,而是深喉咙自带的mysql,修改注册表。
|
||||
> 后来发现,深喉咙自动修改了注册表,原来一直启动的并不是电脑上的mysql,而是深喉咙自带的mysql,修改注册表。
|
||||
|
||||
(http://jingyan.baidu.com/article/91f5db1bd298ed1c7f05e315.html)
|
||||
|
||||
\>\>但是登录的时候报了一个奇怪的错误,
|
||||
### 但是登录的时候报了一个奇怪的错误,
|
||||
|
||||
mysqlnd cannot connect to MySQL 4.1+ using the old insecure
|
||||
authentication后来查证,是因为前不久不小心更新了xampp,导致数据库中原来密码出现问题,密码格式不能被新版的phpmyadmin解析,于是看教程,经过PASSWORD()函数修改原来的16位密码为41位更加安全的密码。
|
||||
|
||||
最终运行成功!
|
||||
> mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication后来查证,是因为前不久不小心更新了xampp,导致数据库中原来密码出现问题,密码格式不能被新版的phpmyadmin解析,于是看教程,经过PASSWORD()函数修改原来的16位密码为41位更加安全的密码。
|
||||
>
|
||||
> 最终运行成功!
|
||||
|
||||
102
数据库/MySQL/系列1.md
Normal file
102
数据库/MySQL/系列1.md
Normal file
@@ -0,0 +1,102 @@
|
||||
系列一数据库数据表的创建等基本操作
|
||||
```sql
|
||||
#注释内容(与python很像)
|
||||
-- 也为注释内容
|
||||
-- 创建一个数据库
|
||||
CREATE DATABASE IF NOT EXISTS maizi DEFAULT CHARACTER SET 'utf8';
|
||||
|
||||
USE maizi;
|
||||
|
||||
SET NAMES GBK;
|
||||
|
||||
--创建数据表(user)
|
||||
--编号id
|
||||
--用户名usename
|
||||
--性别sex
|
||||
--邮箱email
|
||||
--地址addr
|
||||
--生日birth
|
||||
--薪水salary
|
||||
--电话tel
|
||||
--是否结婚married
|
||||
--当需要中文的时候,需要临时转换客户端的编码方式
|
||||
--SET NAMES GBK;
|
||||
--字段注释,通过comment注释内容给字段添加注释。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS first_table(
|
||||
id SMALLINT,
|
||||
usename TINYINT,
|
||||
age TINYINT,
|
||||
email VARCHAR(50),
|
||||
addr VARCHAR(200),
|
||||
birth YEAR,
|
||||
salary FLOAT(8,2),
|
||||
tel INT,
|
||||
married TINYINT(1) COMMENT '0代表未结婚,非零代表结婚'
|
||||
)ENGINE=innoDB CHARSET=UTF8;
|
||||
|
||||
SHOW TABLES;
|
||||
|
||||
--创建一个课程表course
|
||||
--编号cid
|
||||
--课程名称 courseName
|
||||
--课程描述 courseDesc
|
||||
|
||||
CREATE TABLE IF NOT EXISTS course(
|
||||
cid TINYINT,
|
||||
courseName VARCHAR(50),
|
||||
courseDesc VARCHAR(200)
|
||||
);
|
||||
|
||||
SHOW TABLES;
|
||||
|
||||
--作业
|
||||
--创建新闻类表
|
||||
--创建新闻表
|
||||
|
||||
|
||||
|
||||
# 第八课时数据测试
|
||||
|
||||
--查看表的表结构
|
||||
DESC tbl_name
|
||||
DESCRIBE tbl_name
|
||||
SHOW COLUMNS FROM tbl_name
|
||||
|
||||
--测试数据的越界处理
|
||||
CREATE TABLE test1(
|
||||
num1 TINYINT,
|
||||
num2 SMALLINT,
|
||||
num3 MEDIUMINT,
|
||||
NUM4 INT,
|
||||
NUM5 BIGINT
|
||||
);
|
||||
--向表中插入记录INSERT tbl_name VALUE|VALUES(值,...);
|
||||
INSERT test1 VALUES(-128,-32768,0,-2147483648,0);
|
||||
--查询表中所有记录SELECT * FORM tbl_name;
|
||||
SELECT *FROM test1;
|
||||
|
||||
|
||||
--测试数据填充
|
||||
CREATE TABLE test3(
|
||||
num1 TINYINT ZEROFILL,
|
||||
num2 SMALLINT ZEROFILL,
|
||||
num3 MEDIUMINT ZEROFILL,
|
||||
num4 INT ZEROFILL,
|
||||
num5 BIGINT ZEROFILL
|
||||
);
|
||||
INSERT test3 values(1,1,1,1,1);
|
||||
|
||||
|
||||
--测试浮点类型
|
||||
--定点数内部以字符串形式保存
|
||||
CREATE TABLE test4(
|
||||
num1 FLOAT(6,2),
|
||||
num2 DOUBLE(6,2),
|
||||
num3 DECIMAL(6,2)
|
||||
);
|
||||
INSERT test4 VALUES(3.1415,3.1415,3.1415);
|
||||
SELECT * FROM test4;
|
||||
SELECT * FROM test4 WHERE num2 = 3.14;
|
||||
|
||||
```
|
||||
92
数据库/MySQL/系列10.md
Normal file
92
数据库/MySQL/系列10.md
Normal file
@@ -0,0 +1,92 @@
|
||||
系列十子查询 &正则表达式查询 &运算符的使用
|
||||
```sql
|
||||
#第四十二课时
|
||||
--子查询的使用
|
||||
--就是用查询的语句代替条件查询的一部分,查询嵌套
|
||||
|
||||
|
||||
--由[not] in 引发的子集合查询
|
||||
SELECT id FROM department;
|
||||
SELECT id ,username FROM employee WHERE depId IN(1,2,3,4)
|
||||
|
||||
SELECT id ,username FROM employee WHERE depId IN(SELECT id FROM department);
|
||||
|
||||
--由比较运算符引发的子查询
|
||||
SELECT level FROM scholarship WHERE id = 1;
|
||||
SELECT id,username FROM student WHERE score >= 90;
|
||||
|
||||
SELECT id,username FROM student WHERE score >=(SELECT level FROM scholarship WHERE id = 1);
|
||||
|
||||
--由[NOT]EXISTS 引发的子查询
|
||||
SELECT id FROM department WHERE id = 5;
|
||||
|
||||
SELECT id ,username FROM employee WHERE EXISTS(SELECT id FROM department WHERE id = 5);
|
||||
|
||||
|
||||
#第四十三课时
|
||||
--子查询的其他形式
|
||||
--使用ANY/SOME/ALL 的子查询
|
||||
--ANY/SOME表示存在性问题
|
||||
--ALL 表示任意性问题
|
||||
--查询所有获得奖学金的人
|
||||
SELECT id ,username,score FROM student WHERE score >= ANY(SLECT level FROM scholarship);
|
||||
|
||||
--将结果集出入到另一张表中
|
||||
SELECT id ,score FROM student;
|
||||
|
||||
INSERT test1(id,num)
|
||||
|
||||
--创建表的同时将查询结果插入
|
||||
CREATE TABEL test2(
|
||||
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
|
||||
score TINYINT UNSIGNED
|
||||
)SELECT id ,score FROM student;
|
||||
|
||||
|
||||
|
||||
#第四十四课时
|
||||
--正则表达式查询
|
||||
--REGEXP'匹配方式'
|
||||
--常用的匹配方式
|
||||
--^匹配字符开始的部分
|
||||
--&匹配字符串结尾的部分
|
||||
--.代表字符串中热议一个字符
|
||||
--[字符集合]匹配字符集合中的任意一个字符
|
||||
--[^字符集合]匹配除了字符集合意外的的任意一个字符,只要含有者之外的字符的字符串都能匹配到
|
||||
--s1,s2,s3匹配s1,s2,s3张任意一个字符串
|
||||
--*代表零个一个或着多个其前的字符
|
||||
--+代表1个或者多个其前的字符
|
||||
--STRING{N}字符出现N次
|
||||
--字符串{M,N }字符串至少出现M次,最多N次
|
||||
|
||||
--查询用户名以t开始的用户
|
||||
SELECT * FROM cms_user WHERE username REGEXP '^t';
|
||||
|
||||
--查询以g结尾的用户
|
||||
SELECT * FROM cms_user WHERE username REGEXP 'g$';
|
||||
|
||||
--
|
||||
SELECT *FROM cms_user WHERE username REGEXP 'R..G';
|
||||
--可以用模糊查询实现相同的效果
|
||||
SELECT * FROM cms_user WHERE username LIKE 'R__G';
|
||||
|
||||
--
|
||||
SELECT * FROM cms_user WHERE username REGEXP '[lto]';
|
||||
--除了字符集合内容中的内容都会出现
|
||||
SELECT * FROM cms_user WHERE username REGEXP '[^l]';
|
||||
--匹配集合中的任何一个字符串
|
||||
SELECT * FROM cms_user WHERE username REGEXP 'nf|qu|tf';
|
||||
--匹配前边的字符
|
||||
SELECT * FROM cms_user WHERE username REGEXP 'que*';
|
||||
SELECT * FROM cms_user WHERE username REGEXP 't+';
|
||||
SELECT * FROM cms_user WHERE username REGEXP 'que{2}';
|
||||
SELECT * FROM cms_user WHERE username REGEXP 'que*{1,3}';
|
||||
|
||||
#第四十五课时
|
||||
--MySQL中运算符的使用
|
||||
--算数运算符+ - * / div %
|
||||
--比较运算符> < = != <=>(检测是否为null) IS NULL NOT BETWEEN AND OR IN
|
||||
--逻辑运算符&& AND || OR ! NOT XOR
|
||||
--运算符的优先级
|
||||
|
||||
```
|
||||
102
数据库/MySQL/系列11.md
Normal file
102
数据库/MySQL/系列11.md
Normal file
@@ -0,0 +1,102 @@
|
||||
系列十一函数与表达式的应用
|
||||
```sql
|
||||
#第四十六课时
|
||||
--数学函数库中的函数
|
||||
CEIL()--进一取整
|
||||
FLOOR()--舍一取整
|
||||
MOD()--取余数
|
||||
POWER()--幂运算
|
||||
ROUND()--四舍五入
|
||||
TRUNCATE()--数字截取
|
||||
ABS()--取绝对值
|
||||
PI()--圆周率
|
||||
RAND()--返回0~1之间的随机数
|
||||
SIGN()--返回x的符号
|
||||
EXP()--计算e的几次方
|
||||
|
||||
|
||||
|
||||
#第四十七课时
|
||||
--字符串函数库
|
||||
--CHAR_LENGTH(S)返回字符串的字符数
|
||||
--length()返回字符串的长度
|
||||
--concat(s1,s2...)将字符串合并成为一个字符串
|
||||
--CONCAT_WS(X,S1,S2...)指定分隔符连接字符串
|
||||
--UPPER(S)/UCASE(S)将字符串转换为大写
|
||||
--LOWER(S)LCASE(S)将字符串转换为小写
|
||||
--LEFT(S,N)/RIGHT(S,N)返回字符串前或后n个字符
|
||||
--LPAD(S1,LEN,S2)/RPAD(S1,LEN,S2)将字符串S1用S2填充到制定的LEN.
|
||||
|
||||
--LTRIM(S)/RTRIM(S)/TRIM(S)去掉字符串中的空格
|
||||
--TRIM(S1 FROM S)去掉字符串s中开始处和结尾处的字符串
|
||||
--REPEAT(S,N)重复字符串指定次数
|
||||
--SPACE(N)返回N个空格
|
||||
--REPLACE(S,S1,S2)将字符串s中搜索s1,替换成s2
|
||||
--STRCMP(S1,S2)比较字符串,>=<分别返回1,0,-1,不区分大小写
|
||||
--SUBSTRING(S,N,LEN)截取字符串
|
||||
--REVERSE(S)反转字符串
|
||||
--ELT(N,S1,S2...)返回指定位置的字符串
|
||||
|
||||
#第四十八课时
|
||||
--日期时间函数
|
||||
--CURDATE(),CURRENT_DATE()返回当前的日期
|
||||
--CURTIME(),CURRENT_TIME()当前时间
|
||||
--NOW()当前的日期和时间
|
||||
|
||||
--MONTH(D)返回日期中月份的值
|
||||
--MONTHNAME(D)返回日期中月份的名称
|
||||
--DAYNAME(D)返回是星期几
|
||||
--DAYOFWEEK(D)返回一周内的第几天
|
||||
--WEEKDAY(D)返回星期
|
||||
--WEEK(D)一年中的低多少个星期
|
||||
|
||||
--YEAR(D)返回年份值
|
||||
--HOUR(T)返回小时值
|
||||
--MINUTE(T)返回分钟值
|
||||
--SECOND(T)返回秒数
|
||||
--DATEDIFF(D1,D2)返回两个日期之间相隔的天数
|
||||
|
||||
#第四十九课时
|
||||
--条件判断函数和系统函数
|
||||
--IF (EXPR,V1,V2)如果表达式成立,返回结果v1,否则返回V2
|
||||
--IFNULL(V1,V2)如果v1不为空,就显示v1的值,否则v2
|
||||
CASE WHEN exp1
|
||||
THEN V1
|
||||
[WHEN EXP2 THEN V2]
|
||||
[ELSE VN]
|
||||
END
|
||||
--case表示函数的开始,end表示函数结束。如果表达式exp1成立时,返回v1
|
||||
--否则exp2成立时返回v2,一次类推,知道else成立
|
||||
|
||||
--系统信息函数
|
||||
VERSION()--返回数据可的版本号
|
||||
CONNECTION_ID()--返回服务器的连接数
|
||||
DATABASE(),SCHEMA()--返回当前数据库
|
||||
USER(),SYSTEM_USER()--返回当前用户
|
||||
CURRENT_USER()--返回当前用户
|
||||
CURRENT_USER--返回当前用户
|
||||
CHARSET(STR)--返回字符串str的字符集
|
||||
COLLATION(STR)--返回字符串str的校验字符集
|
||||
LAST_INSERT_ID()--返回最近生成的AUTO_INCREMET自增长值
|
||||
|
||||
#第五十课时
|
||||
--其它常用的函数
|
||||
--常用到的加密函数
|
||||
MD5(STR)--信息摘要算法
|
||||
PASSWORD(STR)--密码算法
|
||||
ENCODE(str.pwd_str)--加密结果为二进制
|
||||
DECODE(crypt_str,pwd_str)--对encode加密的的结果反向解密
|
||||
|
||||
FROMAT(x,n)--将数字x进行格式化,将x保留到小数点
|
||||
ASCII(S)--返回字符串s的第一个字符的ascii码值
|
||||
BIN(X)--返回x的二进制编码
|
||||
HEX(X)--返回x的十六进制编码
|
||||
OCT(X)--返回x的八进制编码
|
||||
CONV(X,F1,F2)--将x从f1进制数编程f2进制数
|
||||
INET_ATON(IP)--将IP地址转换为数字
|
||||
INET_NTOA(n)--将数字转换成ip地址
|
||||
GET_LOCT(name,time)--定义锁
|
||||
IS_FREE_LOCK('KING')--判断锁是否存在
|
||||
RELEASE_LOCK(name)--解锁
|
||||
|
||||
```
|
||||
62
数据库/MySQL/系列12.md
Normal file
62
数据库/MySQL/系列12.md
Normal file
@@ -0,0 +1,62 @@
|
||||
系列十二索引的使用和数据库的管理
|
||||
```sql
|
||||
#第五十一课时
|
||||
--索引的使用
|
||||
--索引有一列或多了组合而成,起作用是提高对表中数据的查询速度
|
||||
--缺点是创建和维护索引需要耗费时间
|
||||
--索引可以提高查询速度,减慢写入速度
|
||||
|
||||
|
||||
--索引的分类bitree索引和hash索引
|
||||
--普通索引,类似书签 index = 索引名称[索引字段]
|
||||
--唯一索引,unique key或者主键unique key = 索引名称{索引字段}
|
||||
--全文索引,只支持字符串字段,只能建立在全英文的内容上FULLTEXT KEY = 索引名称 索引字段
|
||||
--单列索引,一个字段上的索引INDEX in_test1(test1)
|
||||
--多列索引,多个字段上的索引INDEX 多列索引的名称(字段1,字段2,字段3...)
|
||||
--空间索引,SPACIAL INDEX spa_test(test1);
|
||||
|
||||
|
||||
|
||||
|
||||
--如何创建索引
|
||||
--索引和索引名称不同,索引名称呢就像是某个目录的名字,叫小明索引,索引是指字段
|
||||
--创建表的时候创建索引
|
||||
CREATE TABLE tbl_name(
|
||||
字段名称 字段类型[完整性约束条件],
|
||||
...,
|
||||
[UNIQUE|FULLTEXT|SPATIAL]INDEX|KEY[索引名称](字段名称)
|
||||
[(长度)][asc|desc]
|
||||
);
|
||||
|
||||
|
||||
--在已经存在的表上创建索引
|
||||
CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEX 索引名称
|
||||
ON 表明{字段名称
|
||||
[(长度)][asc|desc]}
|
||||
--以 id为普通索引
|
||||
CREATE INDEX in_id ON test4(id);
|
||||
|
||||
|
||||
ALTER TABLE tbl_name ADD [UNIQUI|FULLTEXT|SPECIAL]
|
||||
(字段名称)[(字段名称)][ASC|DESC];
|
||||
ALTER TABLE test4 ADD INDEX in_username(username);
|
||||
|
||||
|
||||
--删除索引
|
||||
DROP INDEX 索引名称 ON tbl_name
|
||||
ALTER tbl_name DROP INDEX 索引名称
|
||||
|
||||
|
||||
#第五十二课时
|
||||
--管理数据库
|
||||
--workbench
|
||||
|
||||
|
||||
--通过web方式控制和操作MySQL数据库
|
||||
--PHPmyadmin
|
||||
|
||||
|
||||
|
||||
|
||||
--通过客户端管理MySQL
|
||||
```
|
||||
104
数据库/MySQL/系列2.md
Normal file
104
数据库/MySQL/系列2.md
Normal file
@@ -0,0 +1,104 @@
|
||||
数据类型的测试
|
||||
```sql
|
||||
# 第八课时数据测试
|
||||
|
||||
--查看表的表结构
|
||||
DESC tbl_name;
|
||||
DESCRIBE tbl_name;
|
||||
SHOW COLUMNS FROM tbl_name;
|
||||
|
||||
SHOW CREATE TABLE tbl_name;
|
||||
|
||||
--测试数据的越界处理
|
||||
CREATE TABLE test1(
|
||||
num1 TINYINT,
|
||||
num2 SMALLINT,
|
||||
num3 MEDIUMINT,
|
||||
NUM4 INT,
|
||||
NUM5 BIGINT
|
||||
);
|
||||
--向表中插入记录INSERT tbl_name VALUE|VALUES(值,...);
|
||||
INSERT test1 VALUES(-128,-32768,0,-2147483648,0);
|
||||
--查询表中所有记录SELECT * FORM tbl_name;
|
||||
SELECT *FROM test1;
|
||||
|
||||
|
||||
--测试数据填充
|
||||
CREATE TABLE test3(
|
||||
num1 TINYINT ZEROFILL,
|
||||
num2 SMALLINT ZEROFILL,
|
||||
num3 MEDIUMINT ZEROFILL,
|
||||
num4 INT ZEROFILL,
|
||||
num5 BIGINT ZEROFILL
|
||||
);
|
||||
INSERT test3 values(1,1,1,1,1);
|
||||
|
||||
|
||||
--测试浮点类型
|
||||
--定点数内部以字符串形式保存
|
||||
CREATE TABLE test4(
|
||||
num1 FLOAT(6,2),
|
||||
num2 DOUBLE(6,2),
|
||||
num3 DECIMAL(6,2)
|
||||
);
|
||||
INSERT test4 VALUES(3.1415,3.1415,3.1415);
|
||||
SELECT * FROM test4;
|
||||
SELECT * FROM test4 WHERE num2 = 3.14;
|
||||
|
||||
#第九课时测试字符串
|
||||
--定长字符串占用空间一定,空间大,速度快
|
||||
--变长字符串,空间小,速度慢
|
||||
--char不保存末尾的空格,varchar保存末尾的空格
|
||||
--CONCAT(,);字符串连接函数
|
||||
--测试char varchar
|
||||
CREATE TABLE IF NOT EXISTS test5(
|
||||
str1 CHAR(5),
|
||||
str2 VARCHAR(5)
|
||||
);
|
||||
INSERT test5 VALUES('1','1');
|
||||
INSERT test5 VALUES('12345','12345');
|
||||
INSERT test5 VALUES('123456','123456');
|
||||
|
||||
SELECT CONCAT('-',str1),CONCAT('-',str2) FROM test5;
|
||||
SELECT LENGTH('A')--字符串长度检测函数
|
||||
--text,储存超长字符串。不能有默认值
|
||||
|
||||
|
||||
#第十课时测试枚举类型
|
||||
CREATE TABLE IF NOT EXISTS test7(
|
||||
sex ENUM('nan','nv','baomi')
|
||||
);
|
||||
INSERT test7 VALUES('nan')
|
||||
INSERT test7 VALUES('nv')
|
||||
INSERT test7 VALUES('baomi')
|
||||
|
||||
|
||||
--测试集合类型
|
||||
CREATE TABLE IF NOT EXISTS test8(
|
||||
fav SET('A','B','C','D')
|
||||
);
|
||||
INSERT test8 VALUES('A,C,D');
|
||||
INSERT test8 VALUES('A,D,E');
|
||||
INSERT test8 VALUES(15);
|
||||
SELECT * FROM test8;
|
||||
|
||||
#第十课时测试日期时间类型
|
||||
|
||||
---年份的测试
|
||||
|
||||
CREATE TABLE IF NOT EXISTS test9(
|
||||
birth YEAR
|
||||
);
|
||||
INSERT test9 VALUES(1901);
|
||||
INSERT test9 values('2000');
|
||||
INSERT test9 VALUES(0);
|
||||
INSERT test9 VALUES('0');
|
||||
SELECT * FROM test9;
|
||||
|
||||
--time的测试
|
||||
--DATE
|
||||
--TIME
|
||||
--DATETIME
|
||||
--TIMESTTAMP
|
||||
--YREAR
|
||||
```
|
||||
89
数据库/MySQL/系列3.md
Normal file
89
数据库/MySQL/系列3.md
Normal file
@@ -0,0 +1,89 @@
|
||||
系列三完整性约束条件
|
||||
```sql
|
||||
#第十二课时测试主键长度
|
||||
|
||||
--完整性约束条件
|
||||
--PRIMARY KEY 主键,不能重复,非空,无意义字段,
|
||||
--AUTO_IINCREMENT
|
||||
--FOREIGN KEY
|
||||
--NOT NULL
|
||||
--UNIQUE KEY
|
||||
--DEFAULT
|
||||
|
||||
--的是主键
|
||||
|
||||
CREATE TABLE IF NOT EXISTS USER1(
|
||||
id INT PRIMARY KEY,
|
||||
username VARCHAR(20)
|
||||
);
|
||||
|
||||
--查看创建表的定义
|
||||
SHOW CREATE TABLE user1;
|
||||
|
||||
INSERT user1 VALUES(1,'king')
|
||||
INSERT user1 VALUES(2,'quee')
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user2(
|
||||
id INT,
|
||||
username VARCHAR(20),
|
||||
card CHAR(18),
|
||||
PRIMARY KEY(id, card)
|
||||
);
|
||||
|
||||
INSERT user2 values(1,'king','111');
|
||||
INSERT user2 values(1,'queue','112');
|
||||
|
||||
#第十三课时自增长
|
||||
--AUTO_INCREMENT,对象一定是主键,在已有的最大主键上+1
|
||||
--测试自增长
|
||||
CREATE TABLE IF NOT EXISITS user5(
|
||||
id SMALLINT KEY AUTO_INCREMENT,
|
||||
username VARCHAR(20)
|
||||
);
|
||||
|
||||
--指定位置插入值
|
||||
INSERT user5(username) VALUES('queue');
|
||||
|
||||
INSERT user5 VALUES(DEFUALT,'HAHA')
|
||||
|
||||
INSERT user5 VALUES(null,'HAHA')
|
||||
|
||||
--修改自增长的起始值
|
||||
ALTER TABLE user6 AUTO_INCREMENT = 500;
|
||||
|
||||
#第十四课时非空约束
|
||||
--NOT NULL 非空
|
||||
--测试非空
|
||||
CREATE TABLE IF NOT EXISTS user7(
|
||||
id INT UNSIGNED KEY AUTO_INCREMENT,
|
||||
username VARCHAR(20) NOT NULL,
|
||||
password CHAR(32)NOT NULL,
|
||||
age TINYINT UNSIGNED
|
||||
|
||||
);
|
||||
INSERT user7(username,password) VALUES('KING1','KINGJ',12)
|
||||
|
||||
#第十五课时默认值
|
||||
--DEFAULT配合NOT NULL使用
|
||||
CREATE TABLE IF NOT EXISTS user8(
|
||||
id INT UNSIGNED KEY AUTO_INCREMENT,
|
||||
username VARCHAR(20) NOT NULL,
|
||||
password CHAR(32)NOT NULL,
|
||||
age TINYINT UNSIGNED DEFAULT 18,
|
||||
addr VARCHAR(50) NOT NULL DEFAULT 'BEIJING'
|
||||
|
||||
);
|
||||
|
||||
#唯一性约束条件
|
||||
--UNIQUE KEY唯一
|
||||
CREATE TABLE IF NOT EXISTS user9(
|
||||
id TINYINT UNDIGNED KEY AUTO_INCREMENT,
|
||||
username VARCHAR(20) NOT NULL UNIQUE,
|
||||
card CHAR(17) UNIQUE
|
||||
);
|
||||
--NULL值不算重复
|
||||
|
||||
CREATE TABEL [IF NOT EXISTS] tbl_name(
|
||||
字段名称 字段类型 [unsigned|zerofill] [default 默认这][not null] [[primary]KEY|UNIQUE[KEY]]
|
||||
)ENGINE = INNODB CHARSET = UTF8 AUTO_INCREMENT = 100;
|
||||
```
|
||||
140
数据库/MySQL/系列4.md
Normal file
140
数据库/MySQL/系列4.md
Normal file
@@ -0,0 +1,140 @@
|
||||
系列四数据表结构的相关操作
|
||||
```sql
|
||||
#第十七课时修改表名称
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user10(
|
||||
id SMALLINT UNSIGNED KEY AUTO_INCREMENT,
|
||||
username VARCHAR(20) NOT NULL UNIQUE,
|
||||
password CHAR(32) NOT NULL ,
|
||||
email VARCHAR(50) NOT NULL DEFAULT '4646546@qq.com',
|
||||
age TINYINT UNSIGNED DEFAULT 18,
|
||||
sex ENUM('man','woman','secret') DEFAULT 'secret',
|
||||
addr VARCHAR(200) NOT NULL DEFAULT 'beijing',
|
||||
salary float(6,2),
|
||||
regTime INT UNSIGNED,
|
||||
face CHAR(100) NOT NULL DEFAULT 'default.jpg'
|
||||
);
|
||||
|
||||
--修改表名
|
||||
--ALTER TABEL tbl_name RENAME [TO|AS] new_name;
|
||||
--RENAME TABLE tba_name TO new_name;
|
||||
|
||||
ALTER TABLE user10 RENAME TO user11;
|
||||
ALTER TABLE user11 RENAME AS user10;
|
||||
ALTER TABLE user10 RENAME user11;
|
||||
|
||||
RENAME TABLE user11 TO user10;
|
||||
RENAME TABLE user10 TO user11;
|
||||
--挺有意思的,感觉SQL语言有点规则,动作+类型+名称+附属操作
|
||||
|
||||
|
||||
#第十八课时添加和删除字段
|
||||
|
||||
--添加或删除字段
|
||||
ALTER TABEL tbl_name ADD 字段名称 字段类型[完整性约束条件][FIRST|AFTER 字段名称]
|
||||
|
||||
ALTER TABLE tbl_name DROP 字段名称
|
||||
|
||||
--添加card字段char类型
|
||||
ALTER TABLE user10 ADD card CHAR(18);
|
||||
ALTER TABLE user10 ADD test1 VARCHAR(100) NOT NULL UNIQUE;
|
||||
ALTER TABLE user10 ADD test2 VARCHAR(100) NOT NULL UNIQUE FIRST;
|
||||
ALTER TABLE user10 ADD test3 VARCHAR(100) NOT NULL DEFAULT 100 AFTER password;
|
||||
|
||||
--选中一次表完成多个操作
|
||||
ALTER TABLE user10
|
||||
|
||||
ADD test4 INT NOT NULL DEFAULT 123 AFTER password,
|
||||
ADD test5 FLOAT(6,2)FIRST,
|
||||
ADD test6 SET('A','V','C');
|
||||
|
||||
--删除某些字段
|
||||
ALTER TABLE user10 DROP test1;
|
||||
|
||||
--删除多个字段
|
||||
ALTER TABLE user10
|
||||
|
||||
DROP test3,
|
||||
DROP test4;
|
||||
|
||||
--批量处理添加删除操作
|
||||
ALTER TABLE user10
|
||||
|
||||
ADD test INT UNSIGNED NOT NULL DEFAULT 10 AFTER sex,
|
||||
|
||||
DROP addr;
|
||||
|
||||
#第十九课时修改字段类型、完整性约束条件、位置和名称
|
||||
|
||||
--modify修改完整性约束条件时,不能对默认值和主键进行操作。
|
||||
|
||||
ALTER TABLE tbl_name MODIFY 字段名称 字段类型[完整性约束条件][FIRST|AFTER 字段名称];
|
||||
|
||||
ALTER TABLE tbl_name CHANGE 旧的字段名称 新的字段名称 字段类型 [完整性约束条件][FIRST|AFTER 字段名称];
|
||||
|
||||
|
||||
--修改email的类型
|
||||
ALTER TABLE user10 MODIFY email VARCHAR(200);
|
||||
--修改email的完整性约束条件
|
||||
ALTER TABLE user10 MODIFY email VARCHAR(20) NOT NULL DEFAULT '1651656@qq.com';
|
||||
--修改email的位置
|
||||
ALTER TABLE user10 MODIFY email VARCHAR(20) AFTER test;
|
||||
--使用change更换字段的相关属性
|
||||
ALTER TABLE user10 CHANGE test test1 CHAR(32) NOT NULL DEFAULT '123' FIRST;
|
||||
|
||||
#第二十课时
|
||||
--添加和删除默认值
|
||||
ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值;
|
||||
ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT;
|
||||
|
||||
#第二十一课时
|
||||
--添加主键删除主键
|
||||
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]]PRIMARY KEY[index_type](字段名称)
|
||||
|
||||
ALTER TABLE tbl_name DROP PRIMARY KEY;
|
||||
|
||||
--添加单主键
|
||||
ALTER TABLE test10 ADD PRIMARY KEY (id);
|
||||
--添加复合主键
|
||||
ALTER TABLE test13 ADD PRIMARY KEY(id, card);
|
||||
--完整表达形式
|
||||
ALTER TABLE test12 ADD CONSTRAINT symbol PRIMARY KEY index_type(id);
|
||||
|
||||
#第二十二课时
|
||||
--添加删除唯一索引
|
||||
|
||||
ALTER TABLE tbl_name ADD [CONSTRAINT [SYMPOL]] UNIQUE [INDEX|KEY][索引名称](字段名称);
|
||||
|
||||
ALTER TABLE tbl_name DROP [INDEX|KEY] index_name;
|
||||
|
||||
--示例
|
||||
ALTER TABLE user12 ADD UNIQUE(usename);
|
||||
|
||||
ALTER TABLE user12 ADD CONSTRAINT symple UNIQUE KEY uni_card(card);
|
||||
|
||||
LTER TABLE user12 ADD CONSTRAINT symple UNIQUE INDEX uni_test1_test2(test1,test2)
|
||||
|
||||
ALTER TABLE tbl_name DROP INDEX username;
|
||||
ALTER TABLE tbl_name DROP KEY mulUni_test1_test2;
|
||||
|
||||
--修改表的存储引擎
|
||||
ALTER TABLE tbl_name ENGINE = 存储引擎名称;
|
||||
--修改表的引擎为MYISAM
|
||||
ALTER TABLE test12 ENGINE = MYISAM;
|
||||
|
||||
--设置自增长的值
|
||||
ALTER TABLE tbl_name AUTO_INCREMEN = 值;
|
||||
--修改主键的自增长值为
|
||||
ALTER TABLE user12 AUTO_INCREMENT = 100;
|
||||
|
||||
#第二十三课时
|
||||
--删除数据表
|
||||
DROP TABLE user12;
|
||||
|
||||
DROP TABLE IF EXISTS user11,user12,user14;
|
||||
|
||||
--在打开MySQL的同时直接打开数据表
|
||||
mysql -uroot -p -D maizi --promot = \d~\D~\u~\h
|
||||
--查看打开的数据库
|
||||
SELECT DATABASE();
|
||||
```
|
||||
56
数据库/MySQL/系列5.md
Normal file
56
数据库/MySQL/系列5.md
Normal file
@@ -0,0 +1,56 @@
|
||||
系列五 对表中数据的操作
|
||||
```sql
|
||||
#第二十四课时插入记录
|
||||
--插入记录的操作
|
||||
--不指定具体字段名的插入
|
||||
INSERT [INTO]tbl_name VALUES|VALUE(...);
|
||||
--列出制定字段
|
||||
INSERT [INTO] tbl_name(字段名称,...) VALUES|VALUE(...);
|
||||
--同时插入多条记录
|
||||
INSERT [INTO] tbl_name [(字段名称,...)] VALUES|VALUE(...)()(...)...;
|
||||
--通过SET形式插入记录
|
||||
INSERT [INTO] tbl_name 字段名称=值
|
||||
--将查询结果插入到表中
|
||||
INSERT [INTO]tbl_name[(字段名称,...)]SELECT 字段名称 tbl_name[WHERE 条件]
|
||||
|
||||
|
||||
--插入所有的数据的一条记录
|
||||
INSERT [INTO]user1 VALUES|VALUE(1,'king',20);
|
||||
--插入具体字段的值的一条记录
|
||||
INSERT [INTO] user1(username,password) VALUES|VALUE('a','aaa');
|
||||
--插入多条记录
|
||||
INSERT user VALUES(6,'D',45),
|
||||
(233,'FASF',45),
|
||||
(54,'AF',84);
|
||||
--通过set的形式插入记录
|
||||
INSERT INTO user SET id = 98 ,username ='test',password = 'fjie';
|
||||
--将查询结果插入到表中,字段数目必须匹配,格式也必须相同。
|
||||
INSERT test1 SELECT id ,username FROM user1;
|
||||
|
||||
|
||||
#第二十五课时
|
||||
--更新和删除记录
|
||||
--有限制条件的更新记录
|
||||
UPDATE tbl_name SET 字段名称 = 值,...[WHERE 条件][ORDER BY 字段名称][LIMIT 限制条数]
|
||||
--有限值条件的删除记录
|
||||
DELETE FROM tbl_name [WHERE 条件][ORDER BY 字段名称][LIMIT 限制条数]
|
||||
--清空列鬼所有的记录
|
||||
TRUNCATE [TABLE]tbl_name
|
||||
|
||||
--示例
|
||||
--表单的年龄更新
|
||||
UPDATE user1 SET age = 5;
|
||||
--表单的多个记录更新
|
||||
UPDATE user1 SET age = 20,email ='123@qq.com';
|
||||
--表单的多个有限制条件的记录更新
|
||||
UPDATE user1 SET password = 'king123',email = '123@qq.com',age = 99 WHERE id = 1;
|
||||
--用表达式表示记录的限制条件和更新的内容
|
||||
UPDATE user1 SET age = age - 5 WHERE id >= 3;
|
||||
|
||||
--删除多个记录,但是不会清空AUTO_increment的值
|
||||
DELETE FROM user;
|
||||
--有条件的删除记录
|
||||
DELETE FROM test1 WHERE id = 1;
|
||||
--truncate彻底清空数据表,包括所有的配置
|
||||
TRUNCATE TABLE test1;
|
||||
```
|
||||
95
数据库/MySQL/系列6.md
Normal file
95
数据库/MySQL/系列6.md
Normal file
@@ -0,0 +1,95 @@
|
||||
系列六表达式与查询
|
||||
```sql
|
||||
--SELECT 之后表示要查询的字段
|
||||
--FROM 之后表示要查询的数据库和表的名称
|
||||
--WHERE 之后表示要查询的记录的描述比较运算符<>=NULL、范围查询的两个关键字BETWEEN/IN、模糊查询LIKE、多条件查询AND /OR
|
||||
|
||||
|
||||
#第二十六课时
|
||||
--查询表达式完整形式
|
||||
SELECT select_expr [,selext_expr...]
|
||||
[
|
||||
FROM table_refereces
|
||||
[WHERE 条件]
|
||||
[GROUP BY {col_name|position}[ASC|DESC],...分组]
|
||||
[HAVING 条件 对分组结果进行二次筛选]
|
||||
[ORDER BY {col_name|position}[ASC|DESC],...排序]
|
||||
[LIMIT 限制显示条数]
|
||||
]
|
||||
|
||||
--查询表达式完整形式
|
||||
--每一个表达式表示想要的一列,必须至少有一列,多个列之间用逗号分隔
|
||||
--*通配符,表示所有列,tbl_name.*可以表示某个表的所有列
|
||||
|
||||
|
||||
--从特定表中选取特定的不同的字段值进行显示
|
||||
|
||||
SELECT * FROM cms_admin;
|
||||
|
||||
SELECT cms_admin.* FROM cms_admin;
|
||||
|
||||
SELECT id,username FROM cms_admin;
|
||||
|
||||
--表来自以哪个数据库中的表。
|
||||
--从特定的数据库中选取特定的表的特定的字段db_name.tbl_name
|
||||
SELECT id ,username,role FROM cms.cms_admin;
|
||||
--字段来源于那张表
|
||||
SELECT cms_admin.id,cms_admin.username,cms_admin.role FROM cms.cms_admin;
|
||||
--给表别名来访问会更简单一些 AS可以省略
|
||||
SELECT a.username,a.id FROM cms_admin AS a;
|
||||
--给字段起别名
|
||||
SELECT id AS '编号',username AS '用户名', role '角色' FROM cms_admin;
|
||||
--当时别名是,显示的名称是别名
|
||||
SELECT a.id AS id1,a.username AS u FROM cms_admin;
|
||||
|
||||
|
||||
#第二十七课时
|
||||
--带条件的查询,where条件的使用,比较运算符的使用
|
||||
|
||||
SELECT id ,uername,email FROM cms_user WHERE id = 1;
|
||||
--使用<=>检测值是否为NULL,除此之外,与=用法相同
|
||||
SELECT *FROM cms_admin WHERE age <=> NULL;
|
||||
--使用is null或者IS NOT NULL
|
||||
SELECT *FROM cms_admin WHERE age IS NULL;
|
||||
|
||||
|
||||
#第二十八课时
|
||||
--范围查询 BETWEEN NOT BETWEEN IN NOT IN
|
||||
--查询编号在3-10之间的用户
|
||||
SELECT *FROM cms_user WHERE id BETWEEN 3 AND 10;
|
||||
--查询编号为1,3,5,7,9的数
|
||||
SELECT * FROM cms_user WHERE id IN(1,3,5,7,9)
|
||||
--查询ProID为1和3的用户
|
||||
SELECT * FROM cms_user WHERE proID IN(1,3)
|
||||
--查询用户名为king,queen,张三的记录,忽略英文的大小写
|
||||
SELECT * FROM cms_user WHERE id IN('king','queen','张三')
|
||||
|
||||
#第二十九课时
|
||||
--模糊查询LINKE/NOT LINKE
|
||||
--%:代表另个一个或多个任意字符
|
||||
--_:代表一个人任意字符
|
||||
--查询姓张的用户
|
||||
|
||||
SELECT *FROM cms_user WHERE username LIKE '%张%';
|
||||
|
||||
--查询用户命中包含in的用户
|
||||
SELECT * FROM cms_user WHERE username LIKE '%in%';
|
||||
|
||||
--查询用户名为三位的用户
|
||||
SELECT * FROM cms_user WHERE username LIKE '____';
|
||||
|
||||
--_and%同时使用
|
||||
SELECT * FROM cms_user WHERE username LIKE '_I%';
|
||||
|
||||
|
||||
#第三十课时
|
||||
--逻辑运算符与查询AND OR
|
||||
--查询用户名为king,密码也为king
|
||||
SELECT * FROM cms_user WHERE username = 'king' AND password = 'king';
|
||||
|
||||
--查询编号不大于三的变量年龄部位null的用户
|
||||
SELECT * FROM cms_user WHERE id >= 3 AND age IS NOT NULL;
|
||||
|
||||
--查询编号在5~10之间的用户或用户名为4位的
|
||||
SELECT * FROME cms_user WHERE id BETWEEN 5 AND 10 OR username LIKE '____';
|
||||
```
|
||||
99
数据库/MySQL/系列7.md
Normal file
99
数据库/MySQL/系列7.md
Normal file
@@ -0,0 +1,99 @@
|
||||
系列七高级的查询功能
|
||||
```sql
|
||||
|
||||
#第三十一课时
|
||||
--分组查询GROUP BY
|
||||
|
||||
--按照用户所属省分进行分组
|
||||
SELECT * FROM cms_user GROUP BY proId;
|
||||
|
||||
--按照字段位置进行分组
|
||||
SELECT * FROM cms_user GROUP BY 7;
|
||||
|
||||
--按照多个字段进行分组
|
||||
SELECT F FROM cms_user GROUP BY sex,proId;
|
||||
|
||||
--先写条件,后对满足条件的记录进行分组
|
||||
SELECT * FROM cms_user WHERE id > 5 GROUP BY sex;
|
||||
|
||||
|
||||
#第三十二课时
|
||||
--分组查询配合聚合函数
|
||||
--配合GROUP_CONCAT()函数进行使用
|
||||
--查询id,sex,username的详情 按照性别分组
|
||||
--通过性别分组,分组后得到username的分组详情
|
||||
SELECT id, sex, GROUP_CONCAT(username) FROM cms_user GROUP BY sex;
|
||||
|
||||
--查询ProID,性别详情,注册时间详情,用户名详情 按照ProID进行分组
|
||||
SELECT proId ,GROUP_CONCAT(username),GROUP_CONCAT(sex),GROUP_CONCAT(regTime) FROM cms_user GROUP BY proId;
|
||||
|
||||
--常见的聚合函数
|
||||
COUNT()
|
||||
MAX()
|
||||
MIN()
|
||||
AVG()
|
||||
SUM()
|
||||
--查询编号,sex,用户名详情以及组中总人数按照sex分组
|
||||
SELECT id,sex,GROUP_CONCAT(username)AS user ,COUNT(*)AS totalUsers FROM cms_user GROUP BY sex;
|
||||
--COUNT(字段)不统计NULL值
|
||||
SELECT COUNT(id) AS totalUsers FROM cms_user;
|
||||
|
||||
--查询编号,sex,用户名详情以及组中总人数,组中最大年龄,最小年龄,平均年龄,年龄总和按照sex分组
|
||||
SELECT id,sex,GROUP_CONCAT(username),
|
||||
COUNT(*) AS totalUsers,
|
||||
MAX(age) AS max_age,
|
||||
MIN(age) AS min_age,
|
||||
AVG(age) AS avg_age,
|
||||
SUM(age) AS sum_age
|
||||
FROM cms_user GROUP BY sex;
|
||||
|
||||
|
||||
--配合WITH ROLLUP记录上面所有记录的总和
|
||||
--在末尾加上WITH ROLLUP 属于聚合统计次字段的总的内容
|
||||
|
||||
SELECT id,sex,
|
||||
COUNT(*) AS totalUsers,
|
||||
MAX(age) AS max_age,
|
||||
MIN(age) AS min_age,
|
||||
AVG(age) AS avg_age,
|
||||
SUM(age) AS sum_age
|
||||
FROM cms_user GROUP BY sex WITH ROLLUP;
|
||||
|
||||
|
||||
#第三十三课时
|
||||
--having语句对分组结果进行二次筛选
|
||||
SELECT id,sex,GROUP_CONCAT(username),
|
||||
COUNT(*) AS totalUsers,
|
||||
MAX(age) AS max_age,
|
||||
MIN(age) AS min_age,
|
||||
AVG(age) AS avg_age,
|
||||
SUM(age) AS sum_age
|
||||
FROM cms_user GROUP BY sex
|
||||
HAVING COUNT(*)>2 AND MAX(age)>60;
|
||||
|
||||
#第三十四课时
|
||||
--ORDER BY 对查询结果进行排序;
|
||||
|
||||
--查询按照id降序进行排列DESC /ASC
|
||||
SELECT * FROM cms_user ORDER BY id ASC;
|
||||
|
||||
--按照多个字段进行排序
|
||||
SELECT *FROM cms_user ORDER BY age ASC ,id DESC;
|
||||
|
||||
--实现随机提取记录
|
||||
ORDER BY RAND();
|
||||
|
||||
#第三十五课时
|
||||
--通过limit限制显示条数
|
||||
--LIMIT 显示条数
|
||||
--LIMIT偏移量,显示条数
|
||||
|
||||
--查询表中前三条记录
|
||||
SELECT * FROM cms_user LIMIT 3;
|
||||
|
||||
SELECT * FROM cms_user ORDER BY id DESC LIMIT 5;
|
||||
|
||||
SELECT * FROM cms_user LIMTI 10, 5;
|
||||
|
||||
|
||||
```
|
||||
73
数据库/MySQL/系列8.md
Normal file
73
数据库/MySQL/系列8.md
Normal file
@@ -0,0 +1,73 @@
|
||||
系列八条件语句在各个部分的应用更新,插入,删除记录的中的数据
|
||||
```sql
|
||||
#第三十六课时
|
||||
--条件更新
|
||||
UPDATE cms_user SET age = age - 3 WHERE username LIKE '____';
|
||||
--更新前三条记录,让已有年龄+10
|
||||
UPDATE cms_user SET age = age +10 LIMIT 3;
|
||||
--按照id降序排列
|
||||
UPDATE cms_user SET age = age +10 ORDER BY id DESC LIMIT 3;
|
||||
--条件删除
|
||||
DELETE FROM cms_user WHERE sex = 'man' ORDER BY age DESC LIMIT 3;
|
||||
|
||||
#第三十七课时
|
||||
--连接查询
|
||||
--将两个或两个以上的表按某个条件链接起来,从中个选取出需要的数据
|
||||
--链接插叙是同时查询两个或两个以上的表时使用的。
|
||||
--当不同的表中存在相同意义的字段是,可以通过该字段链接这几个表
|
||||
|
||||
--内连接查询
|
||||
--显示连个表中符合链接条件的记录
|
||||
--JOIN / CROSS JOIN / INNER JOIN
|
||||
--通过on连接条件
|
||||
|
||||
--查询cms_user表中id,username
|
||||
--查询provinces表中,proName;
|
||||
SELECT cms_user.id ,username ,proName FROM cms_user,provinces;
|
||||
--并不能实现想要的目的
|
||||
|
||||
|
||||
--cms_user的ProId对应省份表中的id,使用where第一次筛选,与内连接语句是等价的
|
||||
SELECT cms_user.id ,username ,proName FROM cms_user,provinces
|
||||
WHERE cms_user.proId = provinces.id;
|
||||
|
||||
--用内连接的方式把各个表中的相关信息统一为同一个表中的信息
|
||||
--查询cms_user表中的id,username,email,sex;
|
||||
--查询procinces表中的proName
|
||||
SELECT u.id,u.username,u.email,u.sex,p.proName
|
||||
FROM cms_user AS u
|
||||
INNER JOIN provinces AS p
|
||||
ON u.proId = p.id;
|
||||
|
||||
--通过on连接条件
|
||||
SELECT u.id,u.username,u.email,u.sex,p.proName
|
||||
FROM cms_user AS u
|
||||
CROSS JOIN provinces AS p
|
||||
ON u.proId = p.id;
|
||||
|
||||
--查询cms_user表中id,username,sex
|
||||
--查询procinces表中的proName
|
||||
--条件是cms_user 的性别是男的用户
|
||||
--根据p.proName进行分组GROUP
|
||||
--对分组结果进行二次筛选,跳出组中人数大于等于一的人。
|
||||
SELECT u.id,u.username,u.email,u.sex,p.proName,COUNT(*)AS totalUsers
|
||||
FROM cms_user AS u
|
||||
JOIN provinces AS p
|
||||
ON u.proId = p.id
|
||||
WHERE u.sex = 'man'
|
||||
GROUP BY p.proName
|
||||
HAVING COUNT(*) >= 1
|
||||
ORDER BY u.id ASC
|
||||
LIMIT 0,2;
|
||||
|
||||
#第三十八课时
|
||||
--外联结查询
|
||||
--左外连接LEFT[OUTER]JOIN显示左全部记录及右表符合链接条件的记录
|
||||
--右外连接RIGHT[OUTER]JOIN显示右表全部记录及左表符合链接条件的记录
|
||||
SELECT u.id,u.username,u.email,u.sex,p.proName,COUNT(*)AS totalUsers
|
||||
FROM cms_user AS u
|
||||
LEFT JOIN provinces AS p
|
||||
ON u.proId = p.id;
|
||||
--左外连接就是一左边的表为查询主表,从左边寻找满足条件要求的项,并在右表中找到对应的数据
|
||||
|
||||
```
|
||||
132
数据库/MySQL/系列9.md
Normal file
132
数据库/MySQL/系列9.md
Normal file
@@ -0,0 +1,132 @@
|
||||
系列九外键的相关操作
|
||||
```sql
|
||||
#第三十九课时
|
||||
--外键操作
|
||||
--作用:保证数据的一致性和完整性
|
||||
|
||||
--外键是表的一个特殊字段。被参照的表是主表,外键所在的字段的表为字表,是指外键的原则需要记住
|
||||
--就是依赖于数据库中已存在的表的主键。外间的作用时间里该表与其附表的关联关系,
|
||||
--附表中对记录做操作时,子表中与之对应的信息也应该有相应的改变。
|
||||
|
||||
--可以实现一对一或一对多的关系
|
||||
--父表和子表必须使用相同的存储引擎,而且禁止使用临时表
|
||||
--数据表的存储引擎智能为innodb
|
||||
--外键列和参照列必须具有相似的数据类型。其中数字的长度或是否为有符号位必须相同;而字符长度可以不同
|
||||
--外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL自动创建索引
|
||||
|
||||
|
||||
|
||||
--实践操作,创建部门表(主表)
|
||||
CREATE TABLE IF NOT EXISTS department (
|
||||
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
|
||||
depName VARCHAR(20) NOT NULL UNIQUE
|
||||
|
||||
)ENGINE = INNODB;
|
||||
|
||||
INSERT department(depName)VALUES('teach'),
|
||||
('market'),
|
||||
('undergo'),
|
||||
('watch');
|
||||
|
||||
|
||||
--创建员工表(字表)
|
||||
CREATE TABLE IF NOT EXISTS employee(
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
|
||||
username VARCHAR(20) NOT NULL UNIQUE,
|
||||
depId TINYINT UNSIGNED
|
||||
)ENGINE = INNODB;
|
||||
|
||||
INSERT employee(username ,depId)VALUES('kin',1),
|
||||
('joe',2 ),
|
||||
|
||||
('est',3),
|
||||
('bob',4),
|
||||
('tom',5);
|
||||
|
||||
--内连接实现
|
||||
SELECT e.id,e.username,d.depName FROM
|
||||
employee AS e
|
||||
JOIN
|
||||
department AS d
|
||||
ON e.depId = d.id;
|
||||
|
||||
--删除watch部门,虽然部门没有了,但是子表中部门下的人仍然存在。
|
||||
DELETE FROM department WHERE depName = 'watch';
|
||||
--所以以上内容都是不符合要求的
|
||||
DROP TABLE department , employee;
|
||||
|
||||
--下面是通过外键常见的表
|
||||
CREATE TABLE IF NOT EXISTS department (
|
||||
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
|
||||
depName VARCHAR(20) NOT NULL UNIQUE
|
||||
|
||||
)ENGINE = INNODB;
|
||||
|
||||
INSERT department(depName)VALUES('teach'),
|
||||
('market'),
|
||||
('undergo'),
|
||||
('watch');
|
||||
|
||||
|
||||
--创建员工表(字表)
|
||||
CREATE TABLE IF NOT EXISTS employee(
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
|
||||
username VARCHAR(20) NOT NULL UNIQUE,
|
||||
depId TINYINT UNSIGNED
|
||||
FOREINGN KYE(depId)REFERENCES department(id)
|
||||
)ENGINE = INNODB;
|
||||
|
||||
INSERT employee(username ,depId)VALUES('kin',1),
|
||||
('joe',2 ),
|
||||
('est',3),
|
||||
('bob',4),
|
||||
('tom',5);
|
||||
|
||||
--如果子表中有某个父表记录下的内容,则父表中不能执行删除操作
|
||||
--如果父表中没有相应的外键,子表在插入时所使用的外键超出父表所使用的范围,会报错
|
||||
|
||||
#第四十课时
|
||||
--添加和删除外键的操作
|
||||
|
||||
--添加外键
|
||||
ALTER TABLE employee DROP FOREIGN KEY em_fk_dep; --em_fk_dep是外键的索引
|
||||
--删除外键
|
||||
ALTER TABLE employee ADD CONSTRANINT emp_fk_dep FOREIGN KEY(depId) REFERENCES department(id);
|
||||
|
||||
|
||||
--CASCADE:从附表中珊瑚或更新且自动删除或更新子表中匹配行
|
||||
--SET NULL:从附表中删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
|
||||
--RESTRICT:拒绝对父表的删除和更新操作
|
||||
--NO ACTION:在MySQL中,与restrict关键字相同
|
||||
|
||||
|
||||
--创建员工表(字表)
|
||||
--ON DELETE CASCADE在删除的时候是及连的
|
||||
--ON UPDATE CASCADE在更新的时候是及连的
|
||||
CREATE TABLE IF NOT EXISTS employee(
|
||||
id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
|
||||
username VARCHAR(20) NOT NULL UNIQUE,
|
||||
depId TINYINT UNSIGNED
|
||||
FOREINGN KYE(depId)REFERENCES department(id) ON DELETE CASCADE ;
|
||||
)ENGINE = INNODB;
|
||||
|
||||
INSERT employee(username ,depId)VALUES('kin',1),
|
||||
('joe',2 ),
|
||||
('est',3),
|
||||
('bob',4),
|
||||
('tom',5);
|
||||
|
||||
--删除部门表中的一个部门
|
||||
DELETE FROM department WHERE id = 1;
|
||||
--更新部门表中的数据
|
||||
UPDATE department SET id = id = 10;
|
||||
|
||||
|
||||
#第四十一课时
|
||||
--联合查询
|
||||
--union 和union all
|
||||
--NNION 合并相同信息
|
||||
SELECT username FORM employee UNION SELECT username from cms_user;
|
||||
--UNION ALL 不合并相同信息
|
||||
SELECT username FORM employee UNION ALL SELECT username from cms_user;
|
||||
```
|
||||
201
数据库/MySQL/系列一.md
201
数据库/MySQL/系列一.md
@@ -1,201 +0,0 @@
|
||||
系列一数据库数据表的创建等基本操作
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52027858)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52027858)
|
||||
|
||||
1. \#注释内容(与python很像)
|
||||
|
||||
2. \-- 也为注释内容
|
||||
|
||||
3. \-- 创建一个数据库
|
||||
|
||||
4. **CREATE** **DATABASE** IF NOT EXISTS maizi **DEFAULT** **CHARACTER**
|
||||
**SET** 'utf8';
|
||||
|
||||
5.
|
||||
|
||||
6. USE maizi;
|
||||
|
||||
7.
|
||||
|
||||
8. **SET** NAMES GBK;
|
||||
|
||||
9.
|
||||
|
||||
10. \--创建数据表(user)
|
||||
|
||||
11. \--编号id
|
||||
|
||||
12. \--用户名usename
|
||||
|
||||
13. \--性别sex
|
||||
|
||||
14. \--邮箱email
|
||||
|
||||
15. \--地址addr
|
||||
|
||||
16. \--生日birth
|
||||
|
||||
17. \--薪水salary
|
||||
|
||||
18. \--电话tel
|
||||
|
||||
19. \--是否结婚married
|
||||
|
||||
20. \--当需要中文的时候,需要临时转换客户端的编码方式
|
||||
|
||||
21. \--SET NAMES GBK;
|
||||
|
||||
22. \--字段注释,通过comment注释内容给字段添加注释。
|
||||
|
||||
23.
|
||||
|
||||
24. **CREATE** **TABLE** IF NOT EXISTS first\_table(
|
||||
|
||||
25. id **SMALLINT**,
|
||||
|
||||
26. usename TINYINT,
|
||||
|
||||
27. age TINYINT,
|
||||
|
||||
28. email **VARCHAR**(50),
|
||||
|
||||
29. addr **VARCHAR**(200),
|
||||
|
||||
30. birth YEAR,
|
||||
|
||||
31. salary **FLOAT**(8,2),
|
||||
|
||||
32. tel **INT**,
|
||||
|
||||
33. married TINYINT(1) COMMENT '0代表未结婚,非零代表结婚'
|
||||
|
||||
34. )ENGINE=innoDB CHARSET=UTF8;
|
||||
|
||||
35.
|
||||
|
||||
36. SHOW TABLES;
|
||||
|
||||
37.
|
||||
|
||||
38. \--创建一个课程表course
|
||||
|
||||
39. \--编号cid
|
||||
|
||||
40. \--课程名称 courseName
|
||||
|
||||
41. \--课程描述 courseDesc
|
||||
|
||||
42.
|
||||
|
||||
43. **CREATE** **TABLE** IF NOT EXISTS course(
|
||||
|
||||
44. cid TINYINT,
|
||||
|
||||
45. courseName **VARCHAR**(50),
|
||||
|
||||
46. courseDesc **VARCHAR**(200)
|
||||
|
||||
47. );
|
||||
|
||||
48.
|
||||
|
||||
49. SHOW TABLES;
|
||||
|
||||
50.
|
||||
|
||||
51. \--作业
|
||||
|
||||
52. \--创建新闻类表
|
||||
|
||||
53. \--创建新闻表
|
||||
|
||||
54.
|
||||
|
||||
55.
|
||||
|
||||
56.
|
||||
|
||||
57. \# 第八课时数据测试
|
||||
|
||||
58.
|
||||
|
||||
59. \--查看表的表结构
|
||||
|
||||
60. **DESC** tbl_name
|
||||
|
||||
61. DESCRIBE tbl_name
|
||||
|
||||
62. SHOW COLUMNS **FROM** tbl_name
|
||||
|
||||
63.
|
||||
|
||||
64. \--测试数据的越界处理
|
||||
|
||||
65. **CREATE** **TABLE** test1(
|
||||
|
||||
66. num1 TINYINT,
|
||||
|
||||
67. num2 **SMALLINT**,
|
||||
|
||||
68. num3 MEDIUMINT,
|
||||
|
||||
69. NUM4 **INT**,
|
||||
|
||||
70. NUM5 **BIGINT**
|
||||
|
||||
71. );
|
||||
|
||||
72. \--向表中插入记录INSERT tbl_name VALUE\|VALUES(值,...);
|
||||
|
||||
73. **INSERT** test1 **VALUES**(-128,-32768,0,-2147483648,0);
|
||||
|
||||
74. \--查询表中所有记录SELECT \* FORM tbl_name;
|
||||
|
||||
75. **SELECT** \***FROM** test1;
|
||||
|
||||
76.
|
||||
|
||||
77.
|
||||
|
||||
78. \--测试数据填充
|
||||
|
||||
79. **CREATE** **TABLE** test3(
|
||||
|
||||
80. num1 TINYINT ZEROFILL,
|
||||
|
||||
81. num2 **SMALLINT** ZEROFILL,
|
||||
|
||||
82. num3 MEDIUMINT ZEROFILL,
|
||||
|
||||
83. num4 **INT** ZEROFILL,
|
||||
|
||||
84. num5 **BIGINT** ZEROFILL
|
||||
|
||||
85. );
|
||||
|
||||
86. **INSERT** test3 **values**(1,1,1,1,1);
|
||||
|
||||
87.
|
||||
|
||||
88.
|
||||
|
||||
89. \--测试浮点类型
|
||||
|
||||
90. \--定点数内部以字符串形式保存
|
||||
|
||||
91. **CREATE** **TABLE** test4(
|
||||
|
||||
92. num1 **FLOAT**(6,2),
|
||||
|
||||
93. num2 **DOUBLE**(6,2),
|
||||
|
||||
94. num3 **DECIMAL**(6,2)
|
||||
|
||||
95. );
|
||||
|
||||
96. **INSERT** test4 **VALUES**(3.1415,3.1415,3.1415);
|
||||
|
||||
97. **SELECT** \* **FROM** test4;
|
||||
|
||||
98. **SELECT** \* **FROM** test4 **WHERE** num2 = 3.14;
|
||||
194
数据库/MySQL/系列七.md
194
数据库/MySQL/系列七.md
@@ -1,194 +0,0 @@
|
||||
系列七高级的查询功能
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028845)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028845)
|
||||
|
||||
1. \#第三十一课时
|
||||
|
||||
2. \--分组查询GROUP BY
|
||||
|
||||
3.
|
||||
|
||||
4. \--按照用户所属省分进行分组
|
||||
|
||||
5. **SELECT** \* **FROM** cms_user **GROUP** **BY** proId;
|
||||
|
||||
6.
|
||||
|
||||
7. \--按照字段位置进行分组
|
||||
|
||||
8. **SELECT** \* **FROM** cms_user **GROUP** **BY** 7;
|
||||
|
||||
9.
|
||||
|
||||
10. \--按照多个字段进行分组
|
||||
|
||||
11. **SELECT** F **FROM** cms_user **GROUP** **BY** sex,proId;
|
||||
|
||||
12.
|
||||
|
||||
13. \--先写条件,后对满足条件的记录进行分组
|
||||
|
||||
14. **SELECT** \* **FROM** cms_user **WHERE** id \> 5 **GROUP** **BY** sex;
|
||||
|
||||
15.
|
||||
|
||||
16.
|
||||
|
||||
17. \#第三十二课时
|
||||
|
||||
18. \--分组查询配合聚合函数
|
||||
|
||||
19. \--配合GROUP_CONCAT()函数进行使用
|
||||
|
||||
20. \--查询id,sex,username的详情 按照性别分组
|
||||
|
||||
21. \--通过性别分组,分组后得到username的分组详情
|
||||
|
||||
22. **SELECT** id, sex, GROUP\_CONCAT(username) **FROM** cms_user **GROUP**
|
||||
**BY** sex;
|
||||
|
||||
23.
|
||||
|
||||
24. \--查询ProID,性别详情,注册时间详情,用户名详情 按照ProID进行分组
|
||||
|
||||
25. **SELECT** proId
|
||||
,GROUP\_CONCAT(username),GROUP_CONCAT(sex),GROUP_CONCAT(regTime) **FROM**
|
||||
cms_user **GROUP** **BY** proId;
|
||||
|
||||
26.
|
||||
|
||||
27. \--常见的聚合函数
|
||||
|
||||
28. COUNT()
|
||||
|
||||
29. **MAX**()
|
||||
|
||||
30. **MIN**()
|
||||
|
||||
31. AVG()
|
||||
|
||||
32. SUM()
|
||||
|
||||
33. \--查询编号,sex,用户名详情以及组中总人数按照sex分组
|
||||
|
||||
34. **SELECT** id,sex,GROUP_CONCAT(username)**AS** user ,COUNT(\*)**AS**
|
||||
totalUsers **FROM** cms_user **GROUP** **BY** sex;
|
||||
|
||||
35. \--COUNT(字段)不统计NULL值
|
||||
|
||||
36. **SELECT** COUNT(id) **AS** totalUsers **FROM** cms_user;
|
||||
|
||||
37.
|
||||
|
||||
38. \--查询编号,sex,用户名详情以及组中总人数,组中最大年龄,最小年龄,平均年龄,年龄总和按照sex分组
|
||||
|
||||
39. **SELECT** id,sex,GROUP_CONCAT(username),
|
||||
|
||||
40. COUNT(\*) **AS** totalUsers,
|
||||
|
||||
41. **MAX**(age) **AS** max_age,
|
||||
|
||||
42. **MIN**(age) **AS** min_age,
|
||||
|
||||
43. AVG(age) **AS** avg_age,
|
||||
|
||||
44. SUM(age) **AS** sum_age
|
||||
|
||||
45. **FROM** cms_user **GROUP** **BY** sex;
|
||||
|
||||
46.
|
||||
|
||||
47.
|
||||
|
||||
48. \--配合WITH ROLLUP记录上面所有记录的总和
|
||||
|
||||
49. \--在末尾加上WITH ROLLUP 属于聚合统计次字段的总的内容
|
||||
|
||||
50.
|
||||
|
||||
51. **SELECT** id,sex,
|
||||
|
||||
52. COUNT(\*) **AS** totalUsers,
|
||||
|
||||
53. **MAX**(age) **AS** max_age,
|
||||
|
||||
54. **MIN**(age) **AS** min_age,
|
||||
|
||||
55. AVG(age) **AS** avg_age,
|
||||
|
||||
56. SUM(age) **AS** sum_age
|
||||
|
||||
57. **FROM** cms_user **GROUP** **BY** sex **WITH** **ROLLUP**;
|
||||
|
||||
58.
|
||||
|
||||
59.
|
||||
|
||||
60. \#第三十三课时
|
||||
|
||||
61. \--having语句对分组结果进行二次筛选
|
||||
|
||||
62. **SELECT** id,sex,GROUP_CONCAT(username),
|
||||
|
||||
63. COUNT(\*) **AS** totalUsers,
|
||||
|
||||
64. **MAX**(age) **AS** max_age,
|
||||
|
||||
65. **MIN**(age) **AS** min_age,
|
||||
|
||||
66. AVG(age) **AS** avg_age,
|
||||
|
||||
67. SUM(age) **AS** sum_age
|
||||
|
||||
68. **FROM** cms_user **GROUP** **BY** sex
|
||||
|
||||
69. **HAVING** COUNT(\*)\>2 AND **MAX**(age)\>60;
|
||||
|
||||
70.
|
||||
|
||||
71. \#第三十四课时
|
||||
|
||||
72. \--ORDER BY 对查询结果进行排序;
|
||||
|
||||
73.
|
||||
|
||||
74. \--查询按照id降序进行排列DESC /ASC
|
||||
|
||||
75. **SELECT** \* **FROM** cms_user **ORDER** **BY** id **ASC**;
|
||||
|
||||
76.
|
||||
|
||||
77. \--按照多个字段进行排序
|
||||
|
||||
78. **SELECT** \***FROM** cms_user **ORDER** **BY** age **ASC** ,id **DESC**;
|
||||
|
||||
79.
|
||||
|
||||
80. \--实现随机提取记录
|
||||
|
||||
81. **ORDER** **BY** RAND();
|
||||
|
||||
82.
|
||||
|
||||
83. \#第三十五课时
|
||||
|
||||
84. \--通过limit限制显示条数
|
||||
|
||||
85. \--LIMIT 显示条数
|
||||
|
||||
86. \--LIMIT偏移量,显示条数
|
||||
|
||||
87.
|
||||
|
||||
88. \--查询表中前三条记录
|
||||
|
||||
89. **SELECT** \* **FROM** cms_user LIMIT 3;
|
||||
|
||||
90.
|
||||
|
||||
91. **SELECT** \* **FROM** cms_user **ORDER** **BY** id **DESC** LIMIT 5;
|
||||
|
||||
92.
|
||||
|
||||
93. **SELECT** \* **FROM** cms_user LIMTI 10, 5;
|
||||
177
数据库/MySQL/系列三.md
177
数据库/MySQL/系列三.md
@@ -1,177 +0,0 @@
|
||||
系列三完整性约束条件
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028722)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028722)
|
||||
|
||||
1. \#第十二课时测试主键长度
|
||||
|
||||
2.
|
||||
|
||||
3. \--完整性约束条件
|
||||
|
||||
4. \--PRIMARY KEY 主键,不能重复,非空,无意义字段,
|
||||
|
||||
5. \--AUTO_IINCREMENT
|
||||
|
||||
6. \--FOREIGN KEY
|
||||
|
||||
7. \--NOT NULL
|
||||
|
||||
8. \--UNIQUE KEY
|
||||
|
||||
9. \--DEFAULT
|
||||
|
||||
10.
|
||||
|
||||
11. \--的是主键
|
||||
|
||||
12.
|
||||
|
||||
13. **CREATE** **TABLE** IF NOT EXISTS USER1(
|
||||
|
||||
14. id **INT** **PRIMARY** **KEY**,
|
||||
|
||||
15. username **VARCHAR**(20)
|
||||
|
||||
16. );
|
||||
|
||||
17.
|
||||
|
||||
18. \--查看创建表的定义
|
||||
|
||||
19. SHOW **CREATE** **TABLE** user1;
|
||||
|
||||
20.
|
||||
|
||||
21. **INSERT** user1 **VALUES**(1,'king')
|
||||
|
||||
22. **INSERT** user1 **VALUES**(2,'quee')
|
||||
|
||||
23.
|
||||
|
||||
24. **CREATE** **TABLE** IF NOT EXISTS user2(
|
||||
|
||||
25. id **INT**,
|
||||
|
||||
26. username **VARCHAR**(20),
|
||||
|
||||
27. card **CHAR**(18),
|
||||
|
||||
28. **PRIMARY** **KEY**(id, card)
|
||||
|
||||
29. );
|
||||
|
||||
30.
|
||||
|
||||
31. **INSERT** user2 **values**(1,'king','111');
|
||||
|
||||
32. **INSERT** user2 **values**(1,'queue','112');
|
||||
|
||||
33.
|
||||
|
||||
34. \#第十三课时自增长
|
||||
|
||||
35. \--AUTO_INCREMENT,对象一定是主键,在已有的最大主键上+1
|
||||
|
||||
36. \--测试自增长
|
||||
|
||||
37. **CREATE** **TABLE** IF NOT EXISITS user5(
|
||||
|
||||
38. id **SMALLINT** **KEY** AUTO_INCREMENT,
|
||||
|
||||
39. username **VARCHAR**(20)
|
||||
|
||||
40. );
|
||||
|
||||
41.
|
||||
|
||||
42. \--指定位置插入值
|
||||
|
||||
43. **INSERT** user5(username) **VALUES**('queue');
|
||||
|
||||
44.
|
||||
|
||||
45. **INSERT** user5 **VALUES**(DEFUALT,'HAHA')
|
||||
|
||||
46.
|
||||
|
||||
47. **INSERT** user5 **VALUES**(null,'HAHA')
|
||||
|
||||
48.
|
||||
|
||||
49. \--修改自增长的起始值
|
||||
|
||||
50. **ALTER** **TABLE** user6 AUTO_INCREMENT = 500;
|
||||
|
||||
51.
|
||||
|
||||
52. \#第十四课时非空约束
|
||||
|
||||
53. \--NOT NULL 非空
|
||||
|
||||
54. \--测试非空
|
||||
|
||||
55. **CREATE** **TABLE** IF NOT EXISTS user7(
|
||||
|
||||
56. id **INT** UNSIGNED **KEY** AUTO_INCREMENT,
|
||||
|
||||
57. username **VARCHAR**(20) NOT NULL,
|
||||
|
||||
58. **password** **CHAR**(32)NOT NULL,
|
||||
|
||||
59. age TINYINT UNSIGNED
|
||||
|
||||
60.
|
||||
|
||||
61. );
|
||||
|
||||
62. **INSERT** user7(username,**password**) **VALUES**('KING1','KINGJ',12)
|
||||
|
||||
63.
|
||||
|
||||
64. \#第十五课时默认值
|
||||
|
||||
65. \--DEFAULT配合NOT NULL使用
|
||||
|
||||
66. **CREATE** **TABLE** IF NOT EXISTS user8(
|
||||
|
||||
67. id **INT** UNSIGNED **KEY** AUTO_INCREMENT,
|
||||
|
||||
68. username **VARCHAR**(20) NOT NULL,
|
||||
|
||||
69. **password** **CHAR**(32)NOT NULL,
|
||||
|
||||
70. age TINYINT UNSIGNED **DEFAULT** 18,
|
||||
|
||||
71. addr **VARCHAR**(50) NOT NULL **DEFAULT** 'BEIJING'
|
||||
|
||||
72.
|
||||
|
||||
73. );
|
||||
|
||||
74.
|
||||
|
||||
75. \#唯一性约束条件
|
||||
|
||||
76. \--UNIQUE KEY唯一
|
||||
|
||||
77. **CREATE** **TABLE** IF NOT EXISTS user9(
|
||||
|
||||
78. id TINYINT UNDIGNED **KEY** AUTO_INCREMENT,
|
||||
|
||||
79. username **VARCHAR**(20) NOT NULL **UNIQUE**,
|
||||
|
||||
80. card **CHAR**(17) **UNIQUE**
|
||||
|
||||
81. );
|
||||
|
||||
82. \--NULL值不算重复
|
||||
|
||||
83.
|
||||
|
||||
84. **CREATE** TABEL [IF NOT EXISTS] tbl\_name(
|
||||
|
||||
85. 字段名称 字段类型 [unsigned\|zerofill] [**default** 默认这][not null]
|
||||
[[**primary**]**KEY**\|**UNIQUE**[**KEY**]]
|
||||
|
||||
86. )ENGINE = INNODB CHARSET = UTF8 AUTO_INCREMENT = 100;
|
||||
269
数据库/MySQL/系列九.md
269
数据库/MySQL/系列九.md
@@ -1,269 +0,0 @@
|
||||
系列九外键的相关操作
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028868)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028868)
|
||||
|
||||
1. \#第三十九课时
|
||||
|
||||
2. \--外键操作
|
||||
|
||||
3. \--作用:保证数据的一致性和完整性
|
||||
|
||||
4.
|
||||
|
||||
5. \--外键是表的一个特殊字段。被参照的表是主表,外键所在的字段的表为字表,是指外键的原则需要记住
|
||||
|
||||
6. \--就是依赖于数据库中已存在的表的主键。外间的作用时间里该表与其附表的关联关系,
|
||||
|
||||
7. \--附表中对记录做操作时,子表中与之对应的信息也应该有相应的改变。
|
||||
|
||||
8.
|
||||
|
||||
9. \--可以实现一对一或一对多的关系
|
||||
|
||||
10. \--父表和子表必须使用相同的存储引擎,而且禁止使用临时表
|
||||
|
||||
11. \--数据表的存储引擎智能为innodb
|
||||
|
||||
12. \--外键列和参照列必须具有相似的数据类型。其中数字的长度或是否为有符号位必须相同;而字符长度可以不同
|
||||
|
||||
13. \--外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL自动创建索引
|
||||
|
||||
14.
|
||||
|
||||
15.
|
||||
|
||||
16.
|
||||
|
||||
17. \--实践操作,创建部门表(主表)
|
||||
|
||||
18. **CREATE** **TABLE** IF NOT EXISTS department (
|
||||
|
||||
19. id TINYINT UNSIGNED AUTO_INCREMENT **KEY**,
|
||||
|
||||
20. depName **VARCHAR**(20) NOT NULL **UNIQUE**
|
||||
|
||||
21.
|
||||
|
||||
22. )ENGINE = INNODB;
|
||||
|
||||
23.
|
||||
|
||||
24. **INSERT** department(depName)**VALUES**('teach'),
|
||||
|
||||
25. ('market'),
|
||||
|
||||
26. ('undergo'),
|
||||
|
||||
27. ('watch');
|
||||
|
||||
28.
|
||||
|
||||
29.
|
||||
|
||||
30. \--创建员工表(字表)
|
||||
|
||||
31. **CREATE** **TABLE** IF NOT EXISTS employee(
|
||||
|
||||
32. id **SMALLINT** UNSIGNED AUTO_INCREMENT **KEY**,
|
||||
|
||||
33. username **VARCHAR**(20) NOT NULL **UNIQUE**,
|
||||
|
||||
34. depId TINYINT UNSIGNED
|
||||
|
||||
35. )ENGINE = INNODB;
|
||||
|
||||
36.
|
||||
|
||||
37. **INSERT** employee(username ,depId)**VALUES**('kin',1),
|
||||
|
||||
38. ('joe',2 ),
|
||||
|
||||
39.
|
||||
|
||||
40. ('est',3),
|
||||
|
||||
41. ('bob',4),
|
||||
|
||||
42. ('tom',5);
|
||||
|
||||
43.
|
||||
|
||||
44. \--内连接实现
|
||||
|
||||
45. **SELECT** e.id,e.username,d.depName **FROM**
|
||||
|
||||
46. employee **AS** e
|
||||
|
||||
47. JOIN
|
||||
|
||||
48. department **AS** d
|
||||
|
||||
49. **ON** e.depId = d.id;
|
||||
|
||||
50.
|
||||
|
||||
51. \--删除watch部门,虽然部门没有了,但是子表中部门下的人仍然存在。
|
||||
|
||||
52. **DELETE** **FROM** department **WHERE** depName = 'watch';
|
||||
|
||||
53. \--所以以上内容都是不符合要求的
|
||||
|
||||
54. **DROP** **TABLE** department , employee;
|
||||
|
||||
55.
|
||||
|
||||
56. \--下面是通过外键常见的表
|
||||
|
||||
57. **CREATE** **TABLE** IF NOT EXISTS department (
|
||||
|
||||
58. id TINYINT UNSIGNED AUTO_INCREMENT **KEY**,
|
||||
|
||||
59. depName **VARCHAR**(20) NOT NULL **UNIQUE**
|
||||
|
||||
60.
|
||||
|
||||
61. )ENGINE = INNODB;
|
||||
|
||||
62.
|
||||
|
||||
63. **INSERT** department(depName)**VALUES**('teach'),
|
||||
|
||||
64. ('market'),
|
||||
|
||||
65. ('undergo'),
|
||||
|
||||
66. ('watch');
|
||||
|
||||
67.
|
||||
|
||||
68.
|
||||
|
||||
69. \--创建员工表(字表)
|
||||
|
||||
70. **CREATE** **TABLE** IF NOT EXISTS employee(
|
||||
|
||||
71. id **SMALLINT** UNSIGNED AUTO_INCREMENT **KEY**,
|
||||
|
||||
72. username **VARCHAR**(20) NOT NULL **UNIQUE**,
|
||||
|
||||
73. depId TINYINT UNSIGNED
|
||||
|
||||
74. FOREINGN KYE(depId)**REFERENCES** department(id)
|
||||
|
||||
75. )ENGINE = INNODB;
|
||||
|
||||
76.
|
||||
|
||||
77. **INSERT** employee(username ,depId)**VALUES**('kin',1),
|
||||
|
||||
78. ('joe',2 ),
|
||||
|
||||
79. ('est',3),
|
||||
|
||||
80. ('bob',4),
|
||||
|
||||
81. ('tom',5);
|
||||
|
||||
82.
|
||||
|
||||
83. \--如果子表中有某个父表记录下的内容,则父表中不能执行删除操作
|
||||
|
||||
84. \--如果父表中没有相应的外键,子表在插入时所使用的外键超出父表所使用的范围,会报错
|
||||
|
||||
85.
|
||||
|
||||
86. \#第四十课时
|
||||
|
||||
87. \--添加和删除外键的操作
|
||||
|
||||
88.
|
||||
|
||||
89. \--添加外键
|
||||
|
||||
90. **ALTER** **TABLE** employee **DROP** **FOREIGN** **KEY** em_fk_dep;
|
||||
\--em_fk_dep是外键的索引
|
||||
|
||||
91. \--删除外键
|
||||
|
||||
92. **ALTER** **TABLE** employee **ADD** CONSTRANINT emp_fk_dep **FOREIGN**
|
||||
**KEY**(depId) **REFERENCES** department(id);
|
||||
|
||||
93.
|
||||
|
||||
94.
|
||||
|
||||
95. \--CASCADE:从附表中珊瑚或更新且自动删除或更新子表中匹配行
|
||||
|
||||
96. \--SET
|
||||
NULL:从附表中删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT
|
||||
NULL
|
||||
|
||||
97. \--RESTRICT:拒绝对父表的删除和更新操作
|
||||
|
||||
98. \--NO ACTION:在MySQL中,与restrict关键字相同
|
||||
|
||||
99.
|
||||
|
||||
100.
|
||||
|
||||
101. \--创建员工表(字表)
|
||||
|
||||
102. \--ON DELETE CASCADE在删除的时候是及连的
|
||||
|
||||
103. \--ON UPDATE CASCADE在更新的时候是及连的
|
||||
|
||||
104. **CREATE** **TABLE** IF NOT EXISTS employee(
|
||||
|
||||
105. id **SMALLINT** UNSIGNED AUTO_INCREMENT **KEY**,
|
||||
|
||||
106. username **VARCHAR**(20) NOT NULL **UNIQUE**,
|
||||
|
||||
107. depId TINYINT UNSIGNED
|
||||
|
||||
108. FOREINGN KYE(depId)**REFERENCES** department(id) **ON** **DELETE**
|
||||
**CASCADE** ;
|
||||
|
||||
109. )ENGINE = INNODB;
|
||||
|
||||
110.
|
||||
|
||||
111. **INSERT** employee(username ,depId)**VALUES**('kin',1),
|
||||
|
||||
112. ('joe',2 ),
|
||||
|
||||
113. ('est',3),
|
||||
|
||||
114. ('bob',4),
|
||||
|
||||
115. ('tom',5);
|
||||
|
||||
116.
|
||||
|
||||
117. \--删除部门表中的一个部门
|
||||
|
||||
118. **DELETE** **FROM** department **WHERE** id = 1;
|
||||
|
||||
119. \--更新部门表中的数据
|
||||
|
||||
120. **UPDATE** department **SET** id = id = 10;
|
||||
|
||||
121.
|
||||
|
||||
122.
|
||||
|
||||
123. \#第四十一课时
|
||||
|
||||
124. \--联合查询
|
||||
|
||||
125. \--union 和union all
|
||||
|
||||
126. \--NNION 合并相同信息
|
||||
|
||||
127. **SELECT** username FORM employee **UNION** **SELECT** username **from**
|
||||
cms_user;
|
||||
|
||||
128. \--UNION ALL 不合并相同信息
|
||||
|
||||
129. **SELECT** username FORM employee **UNION** ALL **SELECT** username **from**
|
||||
cms_user;
|
||||
206
数据库/MySQL/系列二.md
206
数据库/MySQL/系列二.md
@@ -1,206 +0,0 @@
|
||||
数据类型的测试
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028541)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028541)
|
||||
|
||||
1. \# 第八课时数据测试
|
||||
|
||||
2.
|
||||
|
||||
3. \--查看表的表结构
|
||||
|
||||
4. **DESC** tbl_name;
|
||||
|
||||
5. DESCRIBE tbl_name;
|
||||
|
||||
6. SHOW COLUMNS **FROM** tbl_name;
|
||||
|
||||
7.
|
||||
|
||||
8. SHOW **CREATE** **TABLE** tbl_name;
|
||||
|
||||
9.
|
||||
|
||||
10. \--测试数据的越界处理
|
||||
|
||||
11. **CREATE** **TABLE** test1(
|
||||
|
||||
12. num1 TINYINT,
|
||||
|
||||
13. num2 **SMALLINT**,
|
||||
|
||||
14. num3 MEDIUMINT,
|
||||
|
||||
15. NUM4 **INT**,
|
||||
|
||||
16. NUM5 **BIGINT**
|
||||
|
||||
17. );
|
||||
|
||||
18. \--向表中插入记录INSERT tbl_name VALUE\|VALUES(值,...);
|
||||
|
||||
19. **INSERT** test1 **VALUES**(-128,-32768,0,-2147483648,0);
|
||||
|
||||
20. \--查询表中所有记录SELECT \* FORM tbl_name;
|
||||
|
||||
21. **SELECT** \***FROM** test1;
|
||||
|
||||
22.
|
||||
|
||||
23.
|
||||
|
||||
24. \--测试数据填充
|
||||
|
||||
25. **CREATE** **TABLE** test3(
|
||||
|
||||
26. num1 TINYINT ZEROFILL,
|
||||
|
||||
27. num2 **SMALLINT** ZEROFILL,
|
||||
|
||||
28. num3 MEDIUMINT ZEROFILL,
|
||||
|
||||
29. num4 **INT** ZEROFILL,
|
||||
|
||||
30. num5 **BIGINT** ZEROFILL
|
||||
|
||||
31. );
|
||||
|
||||
32. **INSERT** test3 **values**(1,1,1,1,1);
|
||||
|
||||
33.
|
||||
|
||||
34.
|
||||
|
||||
35. \--测试浮点类型
|
||||
|
||||
36. \--定点数内部以字符串形式保存
|
||||
|
||||
37. **CREATE** **TABLE** test4(
|
||||
|
||||
38. num1 **FLOAT**(6,2),
|
||||
|
||||
39. num2 **DOUBLE**(6,2),
|
||||
|
||||
40. num3 **DECIMAL**(6,2)
|
||||
|
||||
41. );
|
||||
|
||||
42. **INSERT** test4 **VALUES**(3.1415,3.1415,3.1415);
|
||||
|
||||
43. **SELECT** \* **FROM** test4;
|
||||
|
||||
44. **SELECT** \* **FROM** test4 **WHERE** num2 = 3.14;
|
||||
|
||||
45.
|
||||
|
||||
46. \#第九课时测试字符串
|
||||
|
||||
47. \--定长字符串占用空间一定,空间大,速度快
|
||||
|
||||
48. \--变长字符串,空间小,速度慢
|
||||
|
||||
49. \--char不保存末尾的空格,varchar保存末尾的空格
|
||||
|
||||
50. \--CONCAT(,);字符串连接函数
|
||||
|
||||
51. \--测试char varchar
|
||||
|
||||
52. **CREATE** **TABLE** IF NOT EXISTS test5(
|
||||
|
||||
53. str1 **CHAR**(5),
|
||||
|
||||
54. str2 **VARCHAR**(5)
|
||||
|
||||
55. );
|
||||
|
||||
56. **INSERT** test5 **VALUES**('1','1');
|
||||
|
||||
57. **INSERT** test5 **VALUES**('12345','12345');
|
||||
|
||||
58. **INSERT** test5 **VALUES**('123456','123456');
|
||||
|
||||
59.
|
||||
|
||||
60. **SELECT** CONCAT('-',str1),CONCAT('-',str2) **FROM** test5;
|
||||
|
||||
61. **SELECT** LENGTH('A')--字符串长度检测函数
|
||||
|
||||
62. \--text,储存超长字符串。不能有默认值
|
||||
|
||||
63.
|
||||
|
||||
64.
|
||||
|
||||
65. \#第十课时测试枚举类型
|
||||
|
||||
66. **CREATE** **TABLE** IF NOT EXISTS test7(
|
||||
|
||||
67. sex ENUM('nan','nv','baomi')
|
||||
|
||||
68. );
|
||||
|
||||
69. **INSERT** test7 **VALUES**('nan')
|
||||
|
||||
70. **INSERT** test7 **VALUES**('nv')
|
||||
|
||||
71. **INSERT** test7 **VALUES**('baomi')
|
||||
|
||||
72.
|
||||
|
||||
73.
|
||||
|
||||
74. \--测试集合类型
|
||||
|
||||
75. **CREATE** **TABLE** IF NOT EXISTS test8(
|
||||
|
||||
76. fav **SET**('A','B','C','D')
|
||||
|
||||
77. );
|
||||
|
||||
78. **INSERT** test8 **VALUES**('A,C,D');
|
||||
|
||||
79. **INSERT** test8 **VALUES**('A,D,E');
|
||||
|
||||
80. **INSERT** test8 **VALUES**(15);
|
||||
|
||||
81. **SELECT** \* **FROM** test8;
|
||||
|
||||
82.
|
||||
|
||||
83. \#第十课时测试日期时间类型
|
||||
|
||||
84.
|
||||
|
||||
85. \---年份的测试
|
||||
|
||||
86.
|
||||
|
||||
87. **CREATE** **TABLE** IF NOT EXISTS test9(
|
||||
|
||||
88. birth YEAR
|
||||
|
||||
89. );
|
||||
|
||||
90. **INSERT** test9 **VALUES**(1901);
|
||||
|
||||
91. **INSERT** test9 **values**('2000');
|
||||
|
||||
92. **INSERT** test9 **VALUES**(0);
|
||||
|
||||
93. **INSERT** test9 **VALUES**('0');
|
||||
|
||||
94. **SELECT** \* **FROM** test9;
|
||||
|
||||
95.
|
||||
|
||||
96. \--time的测试
|
||||
|
||||
97. \--DATE
|
||||
|
||||
98. \--TIME
|
||||
|
||||
99. \--DATETIME
|
||||
|
||||
100. \--TIMESTTAMP
|
||||
|
||||
101. \--YREAR
|
||||
117
数据库/MySQL/系列五.md
117
数据库/MySQL/系列五.md
@@ -1,117 +0,0 @@
|
||||
系列五 对表中数据的操作
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028812)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028812)
|
||||
|
||||
1. \#第二十四课时插入记录
|
||||
|
||||
2. \--插入记录的操作
|
||||
|
||||
3. \--不指定具体字段名的插入
|
||||
|
||||
4. **INSERT** [**INTO**]tbl_name **VALUES**\|VALUE(...);
|
||||
|
||||
5. \--列出制定字段
|
||||
|
||||
6. **INSERT** [**INTO**] tbl_name(字段名称,...) **VALUES**\|VALUE(...);
|
||||
|
||||
7. \--同时插入多条记录
|
||||
|
||||
8. **INSERT** [**INTO**] tbl_name [(字段名称,...)]
|
||||
**VALUES**\|VALUE(...)()(...)...;
|
||||
|
||||
9. \--通过SET形式插入记录
|
||||
|
||||
10. **INSERT** [**INTO**] tbl_name 字段名称=值
|
||||
|
||||
11. \--将查询结果插入到表中
|
||||
|
||||
12. **INSERT** [**INTO**]tbl_name[(字段名称,...)]**SELECT** 字段名称
|
||||
tbl_name[**WHERE** 条件]
|
||||
|
||||
13.
|
||||
|
||||
14.
|
||||
|
||||
15. \--插入所有的数据的一条记录
|
||||
|
||||
16. **INSERT** [**INTO**]user1 **VALUES**\|VALUE(1,'king',20);
|
||||
|
||||
17. \--插入具体字段的值的一条记录
|
||||
|
||||
18. **INSERT** [**INTO**] user1(username,**password**)
|
||||
**VALUES**\|VALUE('a','aaa');
|
||||
|
||||
19. \--插入多条记录
|
||||
|
||||
20. **INSERT** user **VALUES**(6,'D',45),
|
||||
|
||||
21. (233,'FASF',45),
|
||||
|
||||
22. (54,'AF',84);
|
||||
|
||||
23. \--通过set的形式插入记录
|
||||
|
||||
24. **INSERT** **INTO** user **SET** id = 98 ,username ='test',**password** =
|
||||
'fjie';
|
||||
|
||||
25. \--将查询结果插入到表中,字段数目必须匹配,格式也必须相同。
|
||||
|
||||
26. **INSERT** test1 **SELECT** id ,username **FROM** user1;
|
||||
|
||||
27.
|
||||
|
||||
28.
|
||||
|
||||
29. \#第二十五课时
|
||||
|
||||
30. \--更新和删除记录
|
||||
|
||||
31. \--有限制条件的更新记录
|
||||
|
||||
32. **UPDATE** tbl_name **SET** 字段名称 = 值,...[**WHERE** 条件][**ORDER**
|
||||
**BY** 字段名称][LIMIT 限制条数]
|
||||
|
||||
33. \--有限值条件的删除记录
|
||||
|
||||
34. **DELETE** **FROM** tbl_name [**WHERE** 条件][**ORDER** **BY**
|
||||
字段名称][LIMIT 限制条数]
|
||||
|
||||
35. \--清空列鬼所有的记录
|
||||
|
||||
36. **TRUNCATE** [**TABLE**]tbl_name
|
||||
|
||||
37.
|
||||
|
||||
38. \--示例
|
||||
|
||||
39. \--表单的年龄更新
|
||||
|
||||
40. **UPDATE** user1 **SET** age = 5;
|
||||
|
||||
41. \--表单的多个记录更新
|
||||
|
||||
42. **UPDATE** user1 **SET** age = 20,email ='123@qq.com';
|
||||
|
||||
43. \--表单的多个有限制条件的记录更新
|
||||
|
||||
44. **UPDATE** user1 **SET** **password** = 'king123',email = '123@qq.com',age =
|
||||
99 **WHERE** id = 1;
|
||||
|
||||
45. \--用表达式表示记录的限制条件和更新的内容
|
||||
|
||||
46. **UPDATE** user1 **SET** age = age - 5 **WHERE** id \>= 3;
|
||||
|
||||
47.
|
||||
|
||||
48. \--删除多个记录,但是不会清空AUTO_increment的值
|
||||
|
||||
49. **DELETE** **FROM** user;
|
||||
|
||||
50. \--有条件的删除记录
|
||||
|
||||
51. **DELETE** **FROM** test1 **WHERE** id = 1;
|
||||
|
||||
52. \--truncate彻底清空数据表,包括所有的配置
|
||||
|
||||
53. **TRUNCATE** **TABLE** test1;
|
||||
146
数据库/MySQL/系列八.md
146
数据库/MySQL/系列八.md
@@ -1,146 +0,0 @@
|
||||
系列八条件语句在各个部分的应用更新,插入,删除记录的中的数据
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028857)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028857)
|
||||
|
||||
1. \#第三十六课时
|
||||
|
||||
2. \--条件更新
|
||||
|
||||
3. **UPDATE** cms_user **SET** age = age - 3 **WHERE** username LIKE '____';
|
||||
|
||||
4. \--更新前三条记录,让已有年龄+10
|
||||
|
||||
5. **UPDATE** cms_user **SET** age = age +10 LIMIT 3;
|
||||
|
||||
6. \--按照id降序排列
|
||||
|
||||
7. **UPDATE** cms_user **SET** age = age +10 **ORDER** **BY** id **DESC** LIMIT
|
||||
3;
|
||||
|
||||
8. \--条件删除
|
||||
|
||||
9. **DELETE** **FROM** cms_user **WHERE** sex = 'man' **ORDER** **BY** age
|
||||
**DESC** LIMIT 3;
|
||||
|
||||
10.
|
||||
|
||||
11. \#第三十七课时
|
||||
|
||||
12. \--连接查询
|
||||
|
||||
13. \--将两个或两个以上的表按某个条件链接起来,从中个选取出需要的数据
|
||||
|
||||
14. \--链接插叙是同时查询两个或两个以上的表时使用的。
|
||||
|
||||
15. \--当不同的表中存在相同意义的字段是,可以通过该字段链接这几个表
|
||||
|
||||
16.
|
||||
|
||||
17. \--内连接查询
|
||||
|
||||
18. \--显示连个表中符合链接条件的记录
|
||||
|
||||
19. \--JOIN / CROSS JOIN / INNER JOIN
|
||||
|
||||
20. \--通过on连接条件
|
||||
|
||||
21.
|
||||
|
||||
22. \--查询cms_user表中id,username
|
||||
|
||||
23. \--查询provinces表中,proName;
|
||||
|
||||
24. **SELECT** cms_user.id ,username ,proName **FROM** cms_user,provinces;
|
||||
|
||||
25. \--并不能实现想要的目的
|
||||
|
||||
26.
|
||||
|
||||
27.
|
||||
|
||||
28. \--cms_user的ProId对应省份表中的id,使用where第一次筛选,与内连接语句是等价的
|
||||
|
||||
29. **SELECT** cms_user.id ,username ,proName **FROM** cms_user,provinces
|
||||
|
||||
30. **WHERE** cms\_user.proId = provinces.id;
|
||||
|
||||
31.
|
||||
|
||||
32. \--用内连接的方式把各个表中的相关信息统一为同一个表中的信息
|
||||
|
||||
33. \--查询cms_user表中的id,username,email,sex;
|
||||
|
||||
34. \--查询procinces表中的proName
|
||||
|
||||
35. **SELECT** u.id,u.username,u.email,u.sex,p.proName
|
||||
|
||||
36. **FROM** cms_user **AS** u
|
||||
|
||||
37. **INNER** JOIN provinces **AS** p
|
||||
|
||||
38. **ON** u.proId = p.id;
|
||||
|
||||
39.
|
||||
|
||||
40. \--通过on连接条件
|
||||
|
||||
41. **SELECT** u.id,u.username,u.email,u.sex,p.proName
|
||||
|
||||
42. **FROM** cms_user **AS** u
|
||||
|
||||
43. CROSS JOIN provinces **AS** p
|
||||
|
||||
44. **ON** u.proId = p.id;
|
||||
|
||||
45.
|
||||
|
||||
46. \--查询cms_user表中id,username,sex
|
||||
|
||||
47. \--查询procinces表中的proName
|
||||
|
||||
48. \--条件是cms_user 的性别是男的用户
|
||||
|
||||
49. \--根据p.proName进行分组GROUP
|
||||
|
||||
50. \--对分组结果进行二次筛选,跳出组中人数大于等于一的人。
|
||||
|
||||
51. **SELECT** u.id,u.username,u.email,u.sex,p.proName,COUNT(\*)**AS**
|
||||
totalUsers
|
||||
|
||||
52. **FROM** cms_user **AS** u
|
||||
|
||||
53. JOIN provinces **AS** p
|
||||
|
||||
54. **ON** u.proId = p.id
|
||||
|
||||
55. **WHERE** u.sex = 'man'
|
||||
|
||||
56. **GROUP** **BY** p.proName
|
||||
|
||||
57. **HAVING** COUNT(\*) \>= 1
|
||||
|
||||
58. **ORDER** **BY** u.id **ASC**
|
||||
|
||||
59. LIMIT 0,2;
|
||||
|
||||
60.
|
||||
|
||||
61. \#第三十八课时
|
||||
|
||||
62. \--外联结查询
|
||||
|
||||
63. \--左外连接LEFT[OUTER]JOIN显示左全部记录及右表符合链接条件的记录
|
||||
|
||||
64. \--右外连接RIGHT[OUTER]JOIN显示右表全部记录及左表符合链接条件的记录
|
||||
|
||||
65. **SELECT** u.id,u.username,u.email,u.sex,p.proName,COUNT(\*)**AS**
|
||||
totalUsers
|
||||
|
||||
66. **FROM** cms_user **AS** u
|
||||
|
||||
67. LEFT JOIN provinces **AS** p
|
||||
|
||||
68. **ON** u.proId = p.id;
|
||||
|
||||
69. \--左外连接就是一左边的表为查询主表,从左边寻找满足条件要求的项,并在右表中找到对应的数据
|
||||
194
数据库/MySQL/系列六.md
194
数据库/MySQL/系列六.md
@@ -1,194 +0,0 @@
|
||||
系列六表达式与查询
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028822)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028822)
|
||||
|
||||
1. \--SELECT 之后表示要查询的字段
|
||||
|
||||
2. \--FROM 之后表示要查询的数据库和表的名称
|
||||
|
||||
3. \--WHERE
|
||||
之后表示要查询的记录的描述比较运算符\<\>=NULL、范围查询的两个关键字BETWEEN/IN、模糊查询LIKE、多条件查询AND
|
||||
/OR
|
||||
|
||||
4.
|
||||
|
||||
5.
|
||||
|
||||
6. \#第二十六课时
|
||||
|
||||
7. \--查询表达式完整形式
|
||||
|
||||
8. **SELECT** select_expr [,selext\_expr...]
|
||||
|
||||
9. [
|
||||
|
||||
10. **FROM** table_refereces
|
||||
|
||||
11. [**WHERE** 条件]
|
||||
|
||||
12. [**GROUP** **BY** {col_name\|position}[**ASC**\|**DESC**],...分组]
|
||||
|
||||
13. [**HAVING** 条件 对分组结果进行二次筛选]
|
||||
|
||||
14. [**ORDER** **BY** {col_name\|position}[**ASC**\|**DESC**],...排序]
|
||||
|
||||
15. [LIMIT 限制显示条数]
|
||||
|
||||
16. ]
|
||||
|
||||
17.
|
||||
|
||||
18. \--查询表达式完整形式
|
||||
|
||||
19. \--每一个表达式表示想要的一列,必须至少有一列,多个列之间用逗号分隔
|
||||
|
||||
20. \--\*通配符,表示所有列,tbl_name.\*可以表示某个表的所有列
|
||||
|
||||
21.
|
||||
|
||||
22.
|
||||
|
||||
23. \--从特定表中选取特定的不同的字段值进行显示
|
||||
|
||||
24.
|
||||
|
||||
25. **SELECT** \* **FROM** cms_admin;
|
||||
|
||||
26.
|
||||
|
||||
27. **SELECT** cms_admin.\* **FROM** cms_admin;
|
||||
|
||||
28.
|
||||
|
||||
29. **SELECT** id,username **FROM** cms_admin;
|
||||
|
||||
30.
|
||||
|
||||
31. \--表来自以哪个数据库中的表。
|
||||
|
||||
32. \--从特定的数据库中选取特定的表的特定的字段db_name.tbl_name
|
||||
|
||||
33. **SELECT** id ,username,role **FROM** cms.cms_admin;
|
||||
|
||||
34. \--字段来源于那张表
|
||||
|
||||
35. **SELECT** cms_admin.id,cms\_admin.username,cms_admin.role **FROM**
|
||||
cms.cms_admin;
|
||||
|
||||
36. \--给表别名来访问会更简单一些 AS可以省略
|
||||
|
||||
37. **SELECT** a.username,a.id **FROM** cms_admin **AS** a;
|
||||
|
||||
38. \--给字段起别名
|
||||
|
||||
39. **SELECT** id **AS** '编号',username **AS** '用户名', role '角色' **FROM**
|
||||
cms_admin;
|
||||
|
||||
40. \--当时别名是,显示的名称是别名
|
||||
|
||||
41. **SELECT** a.id **AS** id1,a.username **AS** u **FROM** cms_admin;
|
||||
|
||||
42.
|
||||
|
||||
43.
|
||||
|
||||
44. \#第二十七课时
|
||||
|
||||
45. \--带条件的查询,where条件的使用,比较运算符的使用
|
||||
|
||||
46.
|
||||
|
||||
47. **SELECT** id ,uername,email **FROM** cms_user **WHERE** id = 1;
|
||||
|
||||
48. \--使用\<=\>检测值是否为NULL,除此之外,与=用法相同
|
||||
|
||||
49. **SELECT** \***FROM** cms_admin **WHERE** age \<=\> NULL;
|
||||
|
||||
50. \--使用is null或者IS NOT NULL
|
||||
|
||||
51. **SELECT** \***FROM** cms_admin **WHERE** age **IS** NULL;
|
||||
|
||||
52.
|
||||
|
||||
53.
|
||||
|
||||
54. \#第二十八课时
|
||||
|
||||
55. \--范围查询 BETWEEN NOT BETWEEN IN NOT IN
|
||||
|
||||
56. \--查询编号在3-10之间的用户
|
||||
|
||||
57. **SELECT** \***FROM** cms_user **WHERE** id BETWEEN 3 AND 10;
|
||||
|
||||
58. \--查询编号为1,3,5,7,9的数
|
||||
|
||||
59. **SELECT** \* **FROM** cms_user **WHERE** id IN(1,3,5,7,9)
|
||||
|
||||
60. \--查询ProID为1和3的用户
|
||||
|
||||
61. **SELECT** \* **FROM** cms_user **WHERE** proID IN(1,3)
|
||||
|
||||
62. \--查询用户名为king,queen,张三的记录,忽略英文的大小写
|
||||
|
||||
63. **SELECT** \* **FROM** cms_user **WHERE** id IN('king','queen','张三')
|
||||
|
||||
64.
|
||||
|
||||
65. \#第二十九课时
|
||||
|
||||
66. \--模糊查询LINKE/NOT LINKE
|
||||
|
||||
67. \--%:代表另个一个或多个任意字符
|
||||
|
||||
68. \--_:代表一个人任意字符
|
||||
|
||||
69. \--查询姓张的用户
|
||||
|
||||
70.
|
||||
|
||||
71. **SELECT** \***FROM** cms_user **WHERE** username LIKE '%张%';
|
||||
|
||||
72.
|
||||
|
||||
73. \--查询用户命中包含in的用户
|
||||
|
||||
74. **SELECT** \* **FROM** cms_user **WHERE** username LIKE '%in%';
|
||||
|
||||
75.
|
||||
|
||||
76. \--查询用户名为三位的用户
|
||||
|
||||
77. **SELECT** \* **FROM** cms_user **WHERE** username LIKE '____';
|
||||
|
||||
78.
|
||||
|
||||
79. \--_and%同时使用
|
||||
|
||||
80. **SELECT** \* **FROM** cms_user **WHERE** username LIKE '_I%';
|
||||
|
||||
81.
|
||||
|
||||
82.
|
||||
|
||||
83. \#第三十课时
|
||||
|
||||
84. \--逻辑运算符与查询AND OR
|
||||
|
||||
85. \--查询用户名为king,密码也为king
|
||||
|
||||
86. **SELECT** \* **FROM** cms_user **WHERE** username = 'king' AND **password**
|
||||
= 'king';
|
||||
|
||||
87.
|
||||
|
||||
88. \--查询编号不大于三的变量年龄部位null的用户
|
||||
|
||||
89. **SELECT** \* **FROM** cms_user **WHERE** id \>= 3 AND age **IS** NOT NULL;
|
||||
|
||||
90.
|
||||
|
||||
91. \--查询编号在5\~10之间的用户或用户名为4位的
|
||||
|
||||
92. **SELECT** \* FROME cms_user **WHERE** id BETWEEN 5 AND 10 OR username LIKE
|
||||
'____';
|
||||
184
数据库/MySQL/系列十.md
184
数据库/MySQL/系列十.md
@@ -1,184 +0,0 @@
|
||||
系列十子查询 &正则表达式查询 &运算符的使用
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028886)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028886)
|
||||
|
||||
1. \#第四十二课时
|
||||
|
||||
2. \--子查询的使用
|
||||
|
||||
3. \--就是用查询的语句代替条件查询的一部分,查询嵌套
|
||||
|
||||
4.
|
||||
|
||||
5.
|
||||
|
||||
6. \--由[not] in 引发的子集合查询
|
||||
|
||||
7. **SELECT** id **FROM** department;
|
||||
|
||||
8. **SELECT** id ,username **FROM** employee **WHERE** depId IN(1,2,3,4)
|
||||
|
||||
9.
|
||||
|
||||
10. **SELECT** id ,username **FROM** employee **WHERE** depId IN(**SELECT** id
|
||||
**FROM** department);
|
||||
|
||||
11.
|
||||
|
||||
12. \--由比较运算符引发的子查询
|
||||
|
||||
13. **SELECT** **level** **FROM** scholarship **WHERE** id = 1;
|
||||
|
||||
14. **SELECT** id,username **FROM** student **WHERE** score \>= 90;
|
||||
|
||||
15.
|
||||
|
||||
16. **SELECT** id,username **FROM** student **WHERE** score \>=(**SELECT**
|
||||
**level** **FROM** scholarship **WHERE** id = 1);
|
||||
|
||||
17.
|
||||
|
||||
18. \--由[NOT]EXISTS 引发的子查询
|
||||
|
||||
19. **SELECT** id **FROM** department **WHERE** id = 5;
|
||||
|
||||
20.
|
||||
|
||||
21. **SELECT** id ,username **FROM** employee **WHERE** EXISTS(**SELECT** id
|
||||
**FROM** department **WHERE** id = 5);
|
||||
|
||||
22.
|
||||
|
||||
23.
|
||||
|
||||
24. \#第四十三课时
|
||||
|
||||
25. \--子查询的其他形式
|
||||
|
||||
26. \--使用ANY/SOME/ALL 的子查询
|
||||
|
||||
27. \--ANY/SOME表示存在性问题
|
||||
|
||||
28. \--ALL 表示任意性问题
|
||||
|
||||
29. \--查询所有获得奖学金的人
|
||||
|
||||
30. **SELECT** id ,username,score **FROM** student **WHERE** score \>= ANY(SLECT
|
||||
**level** **FROM** scholarship);
|
||||
|
||||
31.
|
||||
|
||||
32. \--将结果集出入到另一张表中
|
||||
|
||||
33. **SELECT** id ,score **FROM** student;
|
||||
|
||||
34.
|
||||
|
||||
35. **INSERT** test1(id,num)
|
||||
|
||||
36.
|
||||
|
||||
37. \--创建表的同时将查询结果插入
|
||||
|
||||
38. **CREATE** TABEL test2(
|
||||
|
||||
39. id TINYINT UNSIGNED AUTO_INCREMENT **KEY**,
|
||||
|
||||
40. score TINYINT UNSIGNED
|
||||
|
||||
41. )**SELECT** id ,score **FROM** student;
|
||||
|
||||
42.
|
||||
|
||||
43.
|
||||
|
||||
44.
|
||||
|
||||
45. \#第四十四课时
|
||||
|
||||
46. \--正则表达式查询
|
||||
|
||||
47. \--REGEXP'匹配方式'
|
||||
|
||||
48. \--常用的匹配方式
|
||||
|
||||
49. \--\^匹配字符开始的部分
|
||||
|
||||
50. \--&匹配字符串结尾的部分
|
||||
|
||||
51. \--.代表字符串中热议一个字符
|
||||
|
||||
52. \--[字符集合]匹配字符集合中的任意一个字符
|
||||
|
||||
53. \--[\^字符集合]匹配除了字符集合意外的的任意一个字符,只要含有者之外的字符的字符串都能匹配到
|
||||
|
||||
54. \--s1,s2,s3匹配s1,s2,s3张任意一个字符串
|
||||
|
||||
55. \--\*代表零个一个或着多个其前的字符
|
||||
|
||||
56. \--+代表1个或者多个其前的字符
|
||||
|
||||
57. \--STRING{N}字符出现N次
|
||||
|
||||
58. \--字符串{M,N }字符串至少出现M次,最多N次
|
||||
|
||||
59.
|
||||
|
||||
60. \--查询用户名以t开始的用户
|
||||
|
||||
61. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP '\^t';
|
||||
|
||||
62.
|
||||
|
||||
63. \--查询以g结尾的用户
|
||||
|
||||
64. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP 'g\$';
|
||||
|
||||
65.
|
||||
|
||||
66. \--
|
||||
|
||||
67. **SELECT** \***FROM** cms_user **WHERE** username REGEXP 'R..G';
|
||||
|
||||
68. \--可以用模糊查询实现相同的效果
|
||||
|
||||
69. **SELECT** \* **FROM** cms_user **WHERE** username LIKE 'R__G';
|
||||
|
||||
70.
|
||||
|
||||
71. \--
|
||||
|
||||
72. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP '[lto]';
|
||||
|
||||
73. \--除了字符集合内容中的内容都会出现
|
||||
|
||||
74. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP '[\^l]';
|
||||
|
||||
75. \--匹配集合中的任何一个字符串
|
||||
|
||||
76. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP 'nf\|qu\|tf';
|
||||
|
||||
77. \--匹配前边的字符
|
||||
|
||||
78. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP 'que\*';
|
||||
|
||||
79. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP 't+';
|
||||
|
||||
80. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP 'que{2}';
|
||||
|
||||
81. **SELECT** \* **FROM** cms_user **WHERE** username REGEXP 'que\*{1,3}';
|
||||
|
||||
82.
|
||||
|
||||
83. \#第四十五课时
|
||||
|
||||
84. \--MySQL中运算符的使用
|
||||
|
||||
85. \--算数运算符+ - \* / div %
|
||||
|
||||
86. \--比较运算符\> \< = != \<=\>(检测是否为null) IS NULL NOT BETWEEN AND OR IN
|
||||
|
||||
87. \--逻辑运算符&& AND \|\| OR ! NOT XOR
|
||||
|
||||
88. \--运算符的优先级
|
||||
@@ -1,200 +0,0 @@
|
||||
系列十一函数与表达式的应用
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028917)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028917)
|
||||
|
||||
1. \#第四十六课时
|
||||
|
||||
2. \--数学函数库中的函数
|
||||
|
||||
3. CEIL()--进一取整
|
||||
|
||||
4. FLOOR()--舍一取整
|
||||
|
||||
5. MOD()--取余数
|
||||
|
||||
6. POWER()--幂运算
|
||||
|
||||
7. ROUND()--四舍五入
|
||||
|
||||
8. **TRUNCATE**()--数字截取
|
||||
|
||||
9. ABS()--取绝对值
|
||||
|
||||
10. PI()--圆周率
|
||||
|
||||
11. RAND()--返回0\~1之间的随机数
|
||||
|
||||
12. SIGN()--返回x的符号
|
||||
|
||||
13. EXP()--计算e的几次方
|
||||
|
||||
14.
|
||||
|
||||
15.
|
||||
|
||||
16.
|
||||
|
||||
17. \#第四十七课时
|
||||
|
||||
18. \--字符串函数库
|
||||
|
||||
19. \--CHAR_LENGTH(S)返回字符串的字符数
|
||||
|
||||
20. \--length()返回字符串的长度
|
||||
|
||||
21. \--concat(s1,s2...)将字符串合并成为一个字符串
|
||||
|
||||
22. \--CONCAT_WS(X,S1,S2...)指定分隔符连接字符串
|
||||
|
||||
23. \--UPPER(S)/UCASE(S)将字符串转换为大写
|
||||
|
||||
24. \--LOWER(S)LCASE(S)将字符串转换为小写
|
||||
|
||||
25. \--LEFT(S,N)/RIGHT(S,N)返回字符串前或后n个字符
|
||||
|
||||
26. \--LPAD(S1,LEN,S2)/RPAD(S1,LEN,S2)将字符串S1用S2填充到制定的LEN.
|
||||
|
||||
27.
|
||||
|
||||
28. \--LTRIM(S)/RTRIM(S)/TRIM(S)去掉字符串中的空格
|
||||
|
||||
29. \--TRIM(S1 FROM S)去掉字符串s中开始处和结尾处的字符串
|
||||
|
||||
30. \--REPEAT(S,N)重复字符串指定次数
|
||||
|
||||
31. \--SPACE(N)返回N个空格
|
||||
|
||||
32. \--REPLACE(S,S1,S2)将字符串s中搜索s1,替换成s2
|
||||
|
||||
33. \--STRCMP(S1,S2)比较字符串,\>=\<分别返回1,0,-1,不区分大小写
|
||||
|
||||
34. \--SUBSTRING(S,N,LEN)截取字符串
|
||||
|
||||
35. \--REVERSE(S)反转字符串
|
||||
|
||||
36. \--ELT(N,S1,S2...)返回指定位置的字符串
|
||||
|
||||
37.
|
||||
|
||||
38. \#第四十八课时
|
||||
|
||||
39. \--日期时间函数
|
||||
|
||||
40. \--CURDATE(),CURRENT_DATE()返回当前的日期
|
||||
|
||||
41. \--CURTIME(),CURRENT_TIME()当前时间
|
||||
|
||||
42. \--NOW()当前的日期和时间
|
||||
|
||||
43.
|
||||
|
||||
44. \--MONTH(D)返回日期中月份的值
|
||||
|
||||
45. \--MONTHNAME(D)返回日期中月份的名称
|
||||
|
||||
46. \--DAYNAME(D)返回是星期几
|
||||
|
||||
47. \--DAYOFWEEK(D)返回一周内的第几天
|
||||
|
||||
48. \--WEEKDAY(D)返回星期
|
||||
|
||||
49. \--WEEK(D)一年中的低多少个星期
|
||||
|
||||
50.
|
||||
|
||||
51. \--YEAR(D)返回年份值
|
||||
|
||||
52. \--HOUR(T)返回小时值
|
||||
|
||||
53. \--MINUTE(T)返回分钟值
|
||||
|
||||
54. \--SECOND(T)返回秒数
|
||||
|
||||
55. \--DATEDIFF(D1,D2)返回两个日期之间相隔的天数
|
||||
|
||||
56.
|
||||
|
||||
57. \#第四十九课时
|
||||
|
||||
58. \--条件判断函数和系统函数
|
||||
|
||||
59. \--IF (EXPR,V1,V2)如果表达式成立,返回结果v1,否则返回V2
|
||||
|
||||
60. \--IFNULL(V1,V2)如果v1不为空,就显示v1的值,否则v2
|
||||
|
||||
61. CASE **WHEN** exp1
|
||||
|
||||
62. **THEN** V1
|
||||
|
||||
63. [**WHEN** EXP2 **THEN** V2]
|
||||
|
||||
64. [**ELSE** VN]
|
||||
|
||||
65. **END**
|
||||
|
||||
66. \--case表示函数的开始,end表示函数结束。如果表达式exp1成立时,返回v1
|
||||
|
||||
67. \--否则exp2成立时返回v2,一次类推,知道else成立
|
||||
|
||||
68.
|
||||
|
||||
69. \--系统信息函数
|
||||
|
||||
70. VERSION()--返回数据可的版本号
|
||||
|
||||
71. CONNECTION_ID()--返回服务器的连接数
|
||||
|
||||
72. **DATABASE**(),**SCHEMA**()--返回当前数据库
|
||||
|
||||
73. USER(),SYSTEM_USER()--返回当前用户
|
||||
|
||||
74. CURRENT_USER()--返回当前用户
|
||||
|
||||
75. CURRENT_USER--返回当前用户
|
||||
|
||||
76. CHARSET(STR)--返回字符串str的字符集
|
||||
|
||||
77. COLLATION(STR)--返回字符串str的校验字符集
|
||||
|
||||
78. LAST_INSERT_ID()--返回最近生成的AUTO_INCREMET自增长值
|
||||
|
||||
79.
|
||||
|
||||
80. \#第五十课时
|
||||
|
||||
81. \--其它常用的函数
|
||||
|
||||
82. \--常用到的加密函数
|
||||
|
||||
83. MD5(STR)--信息摘要算法
|
||||
|
||||
84. **PASSWORD**(STR)--密码算法
|
||||
|
||||
85. ENCODE(str.pwd_str)--加密结果为二进制
|
||||
|
||||
86. DECODE(crypt_str,pwd_str)--对encode加密的的结果反向解密
|
||||
|
||||
87.
|
||||
|
||||
88. FROMAT(x,n)--将数字x进行格式化,将x保留到小数点
|
||||
|
||||
89. ASCII(S)--返回字符串s的第一个字符的ascii码值
|
||||
|
||||
90. BIN(X)--返回x的二进制编码
|
||||
|
||||
91. HEX(X)--返回x的十六进制编码
|
||||
|
||||
92. OCT(X)--返回x的八进制编码
|
||||
|
||||
93. CONV(X,F1,F2)--将x从f1进制数编程f2进制数
|
||||
|
||||
94. INET_ATON(IP)--将IP地址转换为数字
|
||||
|
||||
95. INET_NTOA(n)--将数字转换成ip地址
|
||||
|
||||
96. GET_LOCT(**name**,**time**)--定义锁
|
||||
|
||||
97. IS_FREE_LOCK('KING')--判断锁是否存在
|
||||
|
||||
98. RELEASE_LOCK(**name**)--解锁
|
||||
@@ -1,123 +0,0 @@
|
||||
系列十二索引的使用和数据库的管理
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028942)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028942)
|
||||
|
||||
1. \#第五十一课时
|
||||
|
||||
2. \--索引的使用
|
||||
|
||||
3. \--索引有一列或多了组合而成,起作用是提高对表中数据的查询速度
|
||||
|
||||
4. \--缺点是创建和维护索引需要耗费时间
|
||||
|
||||
5. \--索引可以提高查询速度,减慢写入速度
|
||||
|
||||
6.
|
||||
|
||||
7.
|
||||
|
||||
8. \--索引的分类bitree索引和hash索引
|
||||
|
||||
9. \--普通索引,类似书签 index = 索引名称[索引字段]
|
||||
|
||||
10. \--唯一索引,unique key或者主键unique key = 索引名称{索引字段}
|
||||
|
||||
11. \--全文索引,只支持字符串字段,只能建立在全英文的内容上FULLTEXT KEY =
|
||||
索引名称 索引字段
|
||||
|
||||
12. \--单列索引,一个字段上的索引INDEX in_test1(test1)
|
||||
|
||||
13. \--多列索引,多个字段上的索引INDEX 多列索引的名称(字段1,字段2,字段3...)
|
||||
|
||||
14. \--空间索引,SPACIAL INDEX spa_test(test1);
|
||||
|
||||
15.
|
||||
|
||||
16.
|
||||
|
||||
17.
|
||||
|
||||
18.
|
||||
|
||||
19. \--如何创建索引
|
||||
|
||||
20. \--索引和索引名称不同,索引名称呢就像是某个目录的名字,叫小明索引,索引是指字段
|
||||
|
||||
21. \--创建表的时候创建索引
|
||||
|
||||
22. **CREATE** **TABLE** tbl\_name(
|
||||
|
||||
23. 字段名称 字段类型[完整性约束条件],
|
||||
|
||||
24. ...,
|
||||
|
||||
25. [**UNIQUE**\|FULLTEXT\|SPATIAL]**INDEX**\|**KEY**[索引名称](字段名称)
|
||||
|
||||
26. [(长度)][**asc**\|**desc**]
|
||||
|
||||
27. );
|
||||
|
||||
28.
|
||||
|
||||
29.
|
||||
|
||||
30. \--在已经存在的表上创建索引
|
||||
|
||||
31. **CREATE**[**UNIQUE**\|FULLTEXT\|SPATIAL]**INDEX** 索引名称
|
||||
|
||||
32. **ON** 表明{字段名称
|
||||
|
||||
33. [(长度)][**asc**\|**desc**]}
|
||||
|
||||
34. \--以 id为普通索引
|
||||
|
||||
35. **CREATE** **INDEX** in_id **ON** test4(id);
|
||||
|
||||
36.
|
||||
|
||||
37.
|
||||
|
||||
38. **ALTER** **TABLE** tbl_name **ADD** [UNIQUI\|FULLTEXT\|SPECIAL]
|
||||
|
||||
39. (字段名称)[(字段名称)][**ASC**\|**DESC**];
|
||||
|
||||
40. **ALTER** **TABLE** test4 **ADD** **INDEX** in_username(username);
|
||||
|
||||
41.
|
||||
|
||||
42.
|
||||
|
||||
43. \--删除索引
|
||||
|
||||
44. **DROP** **INDEX** 索引名称 **ON** tbl_name
|
||||
|
||||
45. **ALTER** tbl_name **DROP** **INDEX** 索引名称
|
||||
|
||||
46.
|
||||
|
||||
47.
|
||||
|
||||
48. \#第五十二课时
|
||||
|
||||
49. \--管理数据库
|
||||
|
||||
50. \--workbench
|
||||
|
||||
51.
|
||||
|
||||
52.
|
||||
|
||||
53. \--通过web方式控制和操作MySQL数据库
|
||||
|
||||
54. \--PHPmyadmin
|
||||
|
||||
55.
|
||||
|
||||
56.
|
||||
|
||||
57.
|
||||
|
||||
58.
|
||||
|
||||
59. \--通过客户端管理MySQL
|
||||
291
数据库/MySQL/系列四.md
291
数据库/MySQL/系列四.md
@@ -1,291 +0,0 @@
|
||||
系列四数据表结构的相关操作
|
||||
|
||||
**[sql]** [view plain](http://blog.csdn.net/estom_yin/article/details/52028783)
|
||||
[copy](http://blog.csdn.net/estom_yin/article/details/52028783)
|
||||
|
||||
1. \#第十七课时修改表名称
|
||||
|
||||
2.
|
||||
|
||||
3. **CREATE** **TABLE** IF NOT EXISTS user10(
|
||||
|
||||
4. id **SMALLINT** UNSIGNED **KEY** AUTO_INCREMENT,
|
||||
|
||||
5. username **VARCHAR**(20) NOT NULL **UNIQUE**,
|
||||
|
||||
6. **password** **CHAR**(32) NOT NULL ,
|
||||
|
||||
7. email **VARCHAR**(50) NOT NULL **DEFAULT** '4646546@qq.com',
|
||||
|
||||
8. age TINYINT UNSIGNED **DEFAULT** 18,
|
||||
|
||||
9. sex ENUM('man','woman','secret') **DEFAULT** 'secret',
|
||||
|
||||
10. addr **VARCHAR**(200) NOT NULL **DEFAULT** 'beijing',
|
||||
|
||||
11. salary **float**(6,2),
|
||||
|
||||
12. regTime **INT** UNSIGNED,
|
||||
|
||||
13. face **CHAR**(100) NOT NULL **DEFAULT** 'default.jpg'
|
||||
|
||||
14. );
|
||||
|
||||
15.
|
||||
|
||||
16. \--修改表名
|
||||
|
||||
17. \--ALTER TABEL tbl_name RENAME [TO\|AS] new_name;
|
||||
|
||||
18. \--RENAME TABLE tba\_name TO new_name;
|
||||
|
||||
19.
|
||||
|
||||
20. **ALTER** **TABLE** user10 RENAME **TO** user11;
|
||||
|
||||
21. **ALTER** **TABLE** user11 RENAME **AS** user10;
|
||||
|
||||
22. **ALTER** **TABLE** user10 RENAME user11;
|
||||
|
||||
23.
|
||||
|
||||
24. RENAME **TABLE** user11 **TO** user10;
|
||||
|
||||
25. RENAME **TABLE** user10 **TO** user11;
|
||||
|
||||
26. \--挺有意思的,感觉SQL语言有点规则,动作+类型+名称+附属操作
|
||||
|
||||
27.
|
||||
|
||||
28.
|
||||
|
||||
29. \#第十八课时添加和删除字段
|
||||
|
||||
30.
|
||||
|
||||
31. \--添加或删除字段
|
||||
|
||||
32. **ALTER** TABEL tbl_name **ADD** 字段名称
|
||||
字段类型[完整性约束条件][**FIRST**\|**AFTER** 字段名称]
|
||||
|
||||
33.
|
||||
|
||||
34. **ALTER** **TABLE** tbl_name **DROP** 字段名称
|
||||
|
||||
35.
|
||||
|
||||
36. \--添加card字段char类型
|
||||
|
||||
37. **ALTER** **TABLE** user10 **ADD** card **CHAR**(18);
|
||||
|
||||
38. **ALTER** **TABLE** user10 **ADD** test1 **VARCHAR**(100) NOT NULL
|
||||
**UNIQUE**;
|
||||
|
||||
39. **ALTER** **TABLE** user10 **ADD** test2 **VARCHAR**(100) NOT NULL
|
||||
**UNIQUE** **FIRST**;
|
||||
|
||||
40. **ALTER** **TABLE** user10 **ADD** test3 **VARCHAR**(100) NOT NULL
|
||||
**DEFAULT** 100 **AFTER** **password**;
|
||||
|
||||
41.
|
||||
|
||||
42. \--选中一次表完成多个操作
|
||||
|
||||
43. **ALTER** **TABLE** user10
|
||||
|
||||
44.
|
||||
|
||||
45. **ADD** test4 **INT** NOT NULL **DEFAULT** 123 **AFTER** **password**,
|
||||
|
||||
46. **ADD** test5 **FLOAT**(6,2)**FIRST**,
|
||||
|
||||
47. **ADD** test6 **SET**('A','V','C');
|
||||
|
||||
48.
|
||||
|
||||
49. \--删除某些字段
|
||||
|
||||
50. **ALTER** **TABLE** user10 **DROP** test1;
|
||||
|
||||
51.
|
||||
|
||||
52. \--删除多个字段
|
||||
|
||||
53. **ALTER** **TABLE** user10
|
||||
|
||||
54.
|
||||
|
||||
55. **DROP** test3,
|
||||
|
||||
56. **DROP** test4;
|
||||
|
||||
57.
|
||||
|
||||
58. \--批量处理添加删除操作
|
||||
|
||||
59. **ALTER** **TABLE** user10
|
||||
|
||||
60.
|
||||
|
||||
61. **ADD** test **INT** UNSIGNED NOT NULL **DEFAULT** 10 **AFTER** sex,
|
||||
|
||||
62.
|
||||
|
||||
63. **DROP** addr;
|
||||
|
||||
64.
|
||||
|
||||
65. \#第十九课时修改字段类型、完整性约束条件、位置和名称
|
||||
|
||||
66.
|
||||
|
||||
67. \--modify修改完整性约束条件时,不能对默认值和主键进行操作。
|
||||
|
||||
68.
|
||||
|
||||
69. **ALTER** **TABLE** tbl_name **MODIFY** 字段名称
|
||||
字段类型[完整性约束条件][**FIRST**\|**AFTER** 字段名称];
|
||||
|
||||
70.
|
||||
|
||||
71. **ALTER** **TABLE** tbl_name CHANGE 旧的字段名称 新的字段名称 字段类型
|
||||
[完整性约束条件][**FIRST**\|**AFTER** 字段名称];
|
||||
|
||||
72.
|
||||
|
||||
73.
|
||||
|
||||
74. \--修改email的类型
|
||||
|
||||
75. **ALTER** **TABLE** user10 **MODIFY** email **VARCHAR**(200);
|
||||
|
||||
76. \--修改email的完整性约束条件
|
||||
|
||||
77. **ALTER** **TABLE** user10 **MODIFY** email **VARCHAR**(20) NOT NULL
|
||||
**DEFAULT** '1651656@qq.com';
|
||||
|
||||
78. \--修改email的位置
|
||||
|
||||
79. **ALTER** **TABLE** user10 **MODIFY** email **VARCHAR**(20) **AFTER** test;
|
||||
|
||||
80. \--使用change更换字段的相关属性
|
||||
|
||||
81. **ALTER** **TABLE** user10 CHANGE test test1 **CHAR**(32) NOT NULL
|
||||
**DEFAULT** '123' **FIRST**;
|
||||
|
||||
82.
|
||||
|
||||
83. \#第二十课时
|
||||
|
||||
84. \--添加和删除默认值
|
||||
|
||||
85. **ALTER** **TABLE** tbl_name **ALTER** 字段名称 **SET** **DEFAULT** 默认值;
|
||||
|
||||
86. **ALTER** **TABLE** tbl_name **ALTER** 字段名称 **DROP** **DEFAULT**;
|
||||
|
||||
87.
|
||||
|
||||
88. \#第二十一课时
|
||||
|
||||
89. \--添加主键删除主键
|
||||
|
||||
90. **ALTER** **TABLE** tbl_name **ADD** [**CONSTRAINT**[symbol]]**PRIMARY**
|
||||
**KEY**[index_type](字段名称)
|
||||
|
||||
91.
|
||||
|
||||
92. **ALTER** **TABLE** tbl_name **DROP** **PRIMARY** **KEY**;
|
||||
|
||||
93.
|
||||
|
||||
94. \--添加单主键
|
||||
|
||||
95. **ALTER** **TABLE** test10 **ADD** **PRIMARY** **KEY** (id);
|
||||
|
||||
96. \--添加复合主键
|
||||
|
||||
97. **ALTER** **TABLE** test13 **ADD** **PRIMARY** **KEY**(id, card);
|
||||
|
||||
98. \--完整表达形式
|
||||
|
||||
99. **ALTER** **TABLE** test12 **ADD** **CONSTRAINT** symbol **PRIMARY** **KEY**
|
||||
index_type(id);
|
||||
|
||||
100.
|
||||
|
||||
101. \#第二十二课时
|
||||
|
||||
102. \--添加删除唯一索引
|
||||
|
||||
103.
|
||||
|
||||
104. **ALTER** **TABLE** tbl_name **ADD** [**CONSTRAINT** [SYMPOL]] **UNIQUE**
|
||||
[**INDEX**\|**KEY**][索引名称](字段名称);
|
||||
|
||||
105.
|
||||
|
||||
106. **ALTER** **TABLE** tbl_name **DROP** [**INDEX**\|**KEY**] index_name;
|
||||
|
||||
107.
|
||||
|
||||
108. \--示例
|
||||
|
||||
109. **ALTER** **TABLE** user12 **ADD** **UNIQUE**(usename);
|
||||
|
||||
110.
|
||||
|
||||
111. **ALTER** **TABLE** user12 **ADD** **CONSTRAINT** symple **UNIQUE** **KEY**
|
||||
uni_card(card);
|
||||
|
||||
112.
|
||||
|
||||
113. LTER **TABLE** user12 **ADD** **CONSTRAINT** symple **UNIQUE** **INDEX**
|
||||
uni_test1_test2(test1,test2)
|
||||
|
||||
114.
|
||||
|
||||
115. **ALTER** **TABLE** tbl_name **DROP** **INDEX** username;
|
||||
|
||||
116. **ALTER** **TABLE** tbl_name **DROP** **KEY** mulUni_test1_test2;
|
||||
|
||||
117.
|
||||
|
||||
118. \--修改表的存储引擎
|
||||
|
||||
119. **ALTER** **TABLE** tbl_name ENGINE = 存储引擎名称;
|
||||
|
||||
120. \--修改表的引擎为MYISAM
|
||||
|
||||
121. **ALTER** **TABLE** test12 ENGINE = MYISAM;
|
||||
|
||||
122.
|
||||
|
||||
123. \--设置自增长的值
|
||||
|
||||
124. **ALTER** **TABLE** tbl_name AUTO_INCREMEN = 值;
|
||||
|
||||
125. \--修改主键的自增长值为
|
||||
|
||||
126. **ALTER** **TABLE** user12 AUTO_INCREMENT = 100;
|
||||
|
||||
127.
|
||||
|
||||
128. \#第二十三课时
|
||||
|
||||
129. \--删除数据表
|
||||
|
||||
130. **DROP** **TABLE** user12;
|
||||
|
||||
131.
|
||||
|
||||
132. **DROP** **TABLE** IF EXISTS user11,user12,user14;
|
||||
|
||||
133.
|
||||
|
||||
134. \--在打开MySQL的同时直接打开数据表
|
||||
|
||||
135. mysql -uroot -p -D maizi --promot = \\d\~\\D\~\\u\~\\h
|
||||
|
||||
136. \--查看打开的数据库
|
||||
|
||||
137. **SELECT** **DATABASE**();
|
||||
@@ -1,133 +1,96 @@
|
||||
\>定义
|
||||
# 基础篇——1 数据模型和系统结构
|
||||
## 1 定义
|
||||
|
||||
数据库:存储数据的仓库,为了方便数据的存储和管理
|
||||
* 数据库:存储数据的仓库,为了方便数据的存储和管理
|
||||
|
||||
数据库系统:(DBS)比数据库大很多,由数据库、数据库管理系统、应用开发工具构成
|
||||
* 数据库系统:(DBS)比数据库大很多,由数据库、数据库管理系统、应用开发工具构成
|
||||
|
||||
数据库管理系统:(database management
|
||||
system)。用来定义数据库、管理和维护数据的软件。像Oracle,MySQL等是管理系统
|
||||
* 数据库管理系统:(database managementsystem)。用来定义数据库、管理和维护数据的软件。像Oracle,MySQL等是管理系统
|
||||
|
||||
\>SQL
|
||||
## 2 SQL
|
||||
|
||||
structure query
|
||||
language,结构化查询语言,数据库管理系统通过SQL语言来管理数据库中的数据
|
||||
### 概念
|
||||
* structure query language,结构化查询语言,数据库管理系统通过SQL语言来管理数据库中的数据
|
||||
|
||||
组成部分:
|
||||
### 组成部分:
|
||||
|
||||
DDL:(data defination
|
||||
language)数据定义语言,定义数据库、表、视图、索引、触发器。
|
||||
* DDL:(data defination language)数据定义语言,定义数据库、表、视图、索引、触发器。
|
||||
|
||||
DML:(data manipulation
|
||||
language)对数据的增删改,INSERT插入数据、UPDATA更新数据、DELETE删除数据
|
||||
* DML:(data manipulation language)对数据的增删改,INSERT插入数据、UPDATA更新数据、DELETE删除数据
|
||||
|
||||
DQL:(data query
|
||||
language):数据检索语言。用来从表中获得数据,确定数据怎样在应用程序中给出。SELECT查询数据
|
||||
* DQL:(data query language):数据检索语言。用来从表中获得数据,确定数据怎样在应用程序中给出。SELECT查询数据
|
||||
|
||||
DCL:(data control
|
||||
language):数据控制语言,主要用于控制用户访问的权限,想GRANT、REVOKE、COMMIT、ROLLBACK等语句
|
||||
* DCL:(data control language):数据控制语言,主要用于控制用户访问的权限,想GRANT、REVOKE、COMMIT、ROLLBACK等语句
|
||||
|
||||
RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
|
||||
## 3 关系数据库管理系统(Relational Database Management System)
|
||||
|
||||
- 1.数据以表格的形式出现
|
||||
### RDBMS即关系数据库管理系统的特点:
|
||||
|
||||
- 2.每行为各种记录名称
|
||||
1. 数据以表格的形式出现
|
||||
2. 每行为各种记录名称
|
||||
3. 每列为记录名称所对应的数据域
|
||||
4. 许多的行和列组成一张表单
|
||||
5. 若干的表单组成database
|
||||
|
||||
- 3.每列为记录名称所对应的数据域
|
||||
### RDBMS术语
|
||||
|
||||
- 4.许多的行和列组成一张表单
|
||||
* 数据库:一些关联的表的集合
|
||||
* 数据表:数据的矩阵。等同于简单的电子表格
|
||||
* 列:同一类数据
|
||||
* 行:一组相关数据,称为一个记录
|
||||
* 冗余:存储2倍数据,使系统速度更快。
|
||||
* 主键:唯一。标识一条记录。
|
||||
* 外键:关联两个表
|
||||
* 复合键:将多个列作为索引键
|
||||
* 索引:快速访问数据库中的特殊信息。索引是对数据库表中一列或多了的值进行排序的一种结构
|
||||
* 参照完整性:参照中不允许使用不存在的实体。意识体完整性是关系模型必须满足的完整性约束条件。
|
||||
|
||||
- 5.若干的表单组成databas
|
||||
## 4 mysql基础命令
|
||||
|
||||
RDBMS术语
|
||||
### 书写习惯
|
||||
|
||||
数据库:一些关联的表的集合
|
||||
* sql语句不区分大小写
|
||||
* 关键字和函数名称必须大写(习惯)
|
||||
* 数据库名称、表明称、字段名称全部小写
|
||||
* 引号必须补全
|
||||
* 支持折行效果,一行写不完可以换行写
|
||||
* 以;或者\\g为结束语句
|
||||
|
||||
数据表:数据的矩阵。等同于简单的电子表格
|
||||
### 系统命令
|
||||
|
||||
列:同一类数据
|
||||
* net start mysql 启动MySQL服务
|
||||
* net stop mysql 终止MySQL服务
|
||||
* mysql 进入mysql
|
||||
```
|
||||
mysql
|
||||
-u(--username)
|
||||
-p(--password)
|
||||
-h(hostname)localhost,127.0.0.1
|
||||
-D 打开指定数据库
|
||||
-P 端口号
|
||||
--prompt=name 指定命令提示符
|
||||
--delimiter=name 指定分隔符
|
||||
-V(--version)
|
||||
```
|
||||
* exit quit /q ctrl+c 退出mysql的命令
|
||||
* /h或help 查看帮助手册
|
||||
* /c 清屏命令
|
||||
|
||||
行:一组相关数据,称为一个记录
|
||||
|
||||
冗余:存储量被数据,使系统速度更快。
|
||||
|
||||
主键:唯一。
|
||||
|
||||
外键:关联两个表
|
||||
|
||||
复合键:将多个列作为索引键
|
||||
|
||||
索引:快速访问数据库中的特殊信息。索引是对数据库表中一列或多了的值进行排序的一种结构
|
||||
|
||||
参照完整性:参照中不允许使用不存在的实体。意识体完整性是关系模型必须满足的完整性约束条件。
|
||||
|
||||
\>mysql基础命令
|
||||
|
||||
\>\>书写习惯
|
||||
|
||||
> sql语句不区分大小写
|
||||
|
||||
> 关键字和函数名称必须大写(习惯)
|
||||
|
||||
> 数据库名称、表明称、字段名称全部小写
|
||||
|
||||
> 引号必须补全
|
||||
|
||||
> 支持折行效果,一行写不完可以换行写
|
||||
|
||||
> 以;或者\\g为结束语句
|
||||
|
||||
\>\>系统命令
|
||||
|
||||
net start mysql 启动MySQL服务
|
||||
|
||||
net stop mysql 终止MySQL服务
|
||||
|
||||
mysql 命令
|
||||
|
||||
> \-u(--username)
|
||||
|
||||
> \-p(--password)
|
||||
|
||||
> \-h(hostname)localhost,127.0.0.1
|
||||
|
||||
> \-D 打开指定数据库
|
||||
|
||||
> \-P 端口号
|
||||
|
||||
> \--prompt=name 指定命令提示符
|
||||
|
||||
> \--delimiter=name 指定分隔符
|
||||
|
||||
> \-V(--version)
|
||||
|
||||
exit quit /q ctrl+c 退出mysql的命令
|
||||
|
||||
/h或help 查看帮助手册
|
||||
|
||||
/c 清屏命令
|
||||
|
||||
prompt 命令
|
||||
|
||||
> 直接加名称
|
||||
|
||||
> \\D 日期
|
||||
|
||||
> \\d 当前数据库
|
||||
|
||||
> \\h 服务器名称
|
||||
|
||||
> \\u 当前用户名
|
||||
|
||||
系统函数
|
||||
|
||||
> select version()得到当前版本号
|
||||
|
||||
> select now()得到当前时间
|
||||
|
||||
> select user()得到当前用户
|
||||
|
||||
delimeter 修改命令分隔符
|
||||
|
||||
\\T +路径 建立输出日志
|
||||
|
||||
\\t 结束输出日志
|
||||
* prompt 命令
|
||||
```
|
||||
promt
|
||||
直接加名称
|
||||
\D 日期
|
||||
\d 当前数据库
|
||||
\h 服务器名称
|
||||
\u 当前用户名
|
||||
```
|
||||
* select系统函数
|
||||
* select version()得到当前版本号
|
||||
* select now()得到当前时间
|
||||
* select user()得到当前用户
|
||||
* delimeter 修改命令分隔符
|
||||
```
|
||||
\T +路径 建立输出日志
|
||||
\t 结束输出日志
|
||||
```
|
||||
@@ -2,7 +2,7 @@
|
||||
> sql 不提供修改模式定义和修改视图定义的操作。如果想要更改,智能删除重建。
|
||||
> 数据库中操作的基本对象主要有以下内容:模式、表、视图、索引
|
||||
|
||||
### 1.1 基本对象概述
|
||||
## 1.1 基本对象概述
|
||||
> 主要包括增删改。没有针对基本对象的查询。就像你会查询表中的数据,但是不会查询存在的某一张表。查询表不存在,应该是查询表中的数据。
|
||||
|
||||
| 操作对象 | 创建 | 删除 | 修改 |
|
||||
@@ -22,44 +22,44 @@ graph LR
|
||||
表Table-->字段Colume
|
||||
```
|
||||
|
||||
基本对象的创建、删除、修改。
|
||||
* 基本对象的创建、删除、修改。
|
||||
|
||||
> 其中表的修改包括对字段的增减、删除、修改等。其实我觉得这里也可以把字段看做数据库的基本对象,也有增删查改。基本对象和数据对象是相互独立的。字段作为基本对象的时候,必须指明属于哪一张表。
|
||||
|
||||
### 1.2 模式SCHEMA
|
||||
## 1.2 模式SCHEMA
|
||||
|
||||
##### 创建
|
||||
### 创建
|
||||
```
|
||||
```
|
||||
|
||||
##### 删除
|
||||
### 删除
|
||||
```
|
||||
```
|
||||
|
||||
### 1.3 表TABLE
|
||||
## 1.3 表TABLE
|
||||
|
||||
##### 创建
|
||||
### 创建
|
||||
```
|
||||
```
|
||||
|
||||
##### 删除
|
||||
### 删除
|
||||
```
|
||||
```
|
||||
|
||||
##### 修改
|
||||
### 修改
|
||||
```
|
||||
```
|
||||
|
||||
### 1.4 视图VIEW
|
||||
## 1.4 视图VIEW
|
||||
|
||||
##### 视图作用
|
||||
### 视图作用
|
||||
1. 能够简化用户的操作
|
||||
2. 是用户能够以多种角度看待同一个数据
|
||||
3. 视图对重构数据库提供了一定程度的逻辑独立性
|
||||
4. 能够对机密数据提供安全保护。针对不同用户定制特定的视图隐藏不必要的信息。
|
||||
5. 适当利用视图可以更清晰的表达查询。
|
||||
|
||||
##### 创建
|
||||
### 创建
|
||||
```
|
||||
CREATE VIEW <视图名>[列名,列名,...]
|
||||
AS <子查询>
|
||||
@@ -103,7 +103,7 @@ AS SELECT Sno,AVG(Grade)
|
||||
```
|
||||
> 总的来说,由SELECT语句进行查询形成的结果都能够构成一个单一的视图。
|
||||
|
||||
##### 删除
|
||||
### 删除
|
||||
```
|
||||
DROP VIEW <视图名> [CASCADE]
|
||||
|
||||
@@ -111,7 +111,7 @@ DROP VIEW BT_S;
|
||||
```
|
||||
> 删除了已经建立的视图
|
||||
|
||||
##### 视图中的数据对象操作
|
||||
### 视图中的数据对象操作
|
||||
> 并非对视图内数据对象进行操作,而是对基本表中的数据对象进行操作。包括增删查改。
|
||||
|
||||
1. 查询数据
|
||||
@@ -172,7 +172,7 @@ WHERE Sno='2012'
|
||||
|
||||
5. 补充
|
||||
> 对视图的更新操作,不一定能够完全对应为对基本表的操作。存在其他规定,来决定是否能够对基本表进行操作(DB2规定)
|
||||
* 视图有两个以上的基本表到处的,不允许更新
|
||||
* 视图有两个以上的基本表导出的,不允许更新
|
||||
* 视图中的字段有表达式或者常数,不允许INSERT,UPDATE,但允许DELETE。
|
||||
* 视图中的字段来自聚集函数,不允许更新
|
||||
* 视图定义中含有GROUP BY子句不允许更新
|
||||
@@ -180,18 +180,19 @@ WHERE Sno='2012'
|
||||
* 视图中有嵌套查询,不允许更新
|
||||
* 一个不允许更新的视图上定义的视图也不允许更新。不允许更新和不可更新,不是同一个概念。
|
||||
|
||||
### 1.5 索引INDEX
|
||||
## 1.5 索引INDEX
|
||||
|
||||
##### 简介
|
||||
### 简介
|
||||
|
||||
* 顺序文件上的索引:按指定属性升序或降序存储的关系。在属性上建立一个顺序索引文件,索引文件有属性值和响应的元组指针组成。
|
||||
* B+树上的索引:B+树的叶节点为属性值和相应的元组指针。具有动态平衡的特点。
|
||||
* 散列索引:建立若干个桶,将索引属性按照其散列函数值映射到相应的桶中,同种存放索引属性值和响应的元组指针。散列索引具有查找速度快的特点。
|
||||
* 位图索引:用为向量记录索引属性中可能出现的值,每个为向量对应一个可能的值。
|
||||
* tire索引/前缀索引:用来索引字符串。
|
||||
|
||||
> 特点:索引能够加快数据库查询,需要占用一定的存储空间。基本表更新后,索引也需要更新。用户不必显示地选择索引,关系数据库管理系统在执行查询时,会自动选择合适的索引作为存储路径。
|
||||
|
||||
##### 创建
|
||||
### 创建
|
||||
|
||||
```
|
||||
CREATE [UNIQUE][CLUSTER] INDEX <索引名>
|
||||
@@ -201,7 +202,7 @@ ON <表名>(<列名>[<次序>],...)
|
||||
CREATE UNIQUE INDEX SCno ON SC(Sno,Cno DESC);
|
||||
```
|
||||
|
||||
##### 删除
|
||||
### 删除
|
||||
|
||||
```
|
||||
DROP INDEX <索引名>;
|
||||
@@ -210,7 +211,7 @@ DROP INDEX <索引名>;
|
||||
DROP INDEX <索引名>;
|
||||
```
|
||||
|
||||
##### 修改
|
||||
### 修改
|
||||
```
|
||||
ALTER INDEX <旧索引名> RENAME TO <新索引名>
|
||||
|
||||
@@ -220,7 +221,7 @@ ALTER INDEX SCno RENAME TO SCSno
|
||||
|
||||
## 2 数据库数据对象
|
||||
|
||||
### 2.1 增加
|
||||
## 2.1 增加
|
||||
|
||||
1. 插入元组(一条或多条数据)
|
||||
```
|
||||
@@ -250,7 +251,7 @@ GROUP BY Sdept;
|
||||
```
|
||||
|
||||
|
||||
### 2.2 删除
|
||||
## 2.2 删除
|
||||
|
||||
> 这里的删除是针对数据库的数据对象而言,并非基本对象,也就是说,只删除表中的数据,表的结构并不会受到影响。
|
||||
|
||||
@@ -286,7 +287,7 @@ WHERE Sno In
|
||||
WHERE Sdept='CS')
|
||||
|
||||
```
|
||||
### 2.3 修改
|
||||
## 2.3 修改
|
||||
|
||||
1. 修改某一个元组的值
|
||||
|
||||
@@ -314,9 +315,9 @@ WHERE Sno IN
|
||||
WHERE Sdept='CS')
|
||||
```
|
||||
|
||||
### 2.4 查询
|
||||
## 2.4 查询
|
||||
|
||||
##### 单表查询
|
||||
### 单表查询
|
||||
|
||||
1. 查询多列
|
||||
|
||||
@@ -412,7 +413,7 @@ HAVING COUNT(*)>3
|
||||
|
||||
> WHERE 子句作用于基本表或视图,HAVING短语作用于组,从中选择满足条件的组,也就是分组条件。
|
||||
|
||||
##### 连接查询(多表查询)
|
||||
### 连接查询(多表查询)
|
||||
|
||||
> 本质上是将多个表通过一些条件拼接成一张表。
|
||||
|
||||
@@ -453,7 +454,7 @@ FROM Student,SC,Cource
|
||||
WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno
|
||||
```
|
||||
|
||||
##### 嵌套查询
|
||||
### 嵌套查询
|
||||
|
||||
> 一个SELECT FROM WHERE语句成为一个查询快。将一个查询快嵌套在另一个查询块的WHERE子句或HAVING短语的条件中,称为嵌套查询。用户可以用多个简单查询构造成负责的查询,层层嵌套的结构化查询。
|
||||
|
||||
@@ -497,18 +498,18 @@ WHERE Grade>=(SELECT AVG(Grade)
|
||||
|
||||
谓词| 含义
|
||||
|-|-|
|
||||
>ANY |
|
||||
>ALL |
|
||||
<ANY |
|
||||
<ALL |
|
||||
>=ANY |
|
||||
>=ALL |
|
||||
<=ANY |
|
||||
<=ALL |
|
||||
=ANY |
|
||||
=ALL |
|
||||
!=ANY |
|
||||
!=ALL |
|
||||
`>ANY` |
|
||||
`>ALL` |
|
||||
`<ANY` |
|
||||
`<ALL` |
|
||||
`>=ANY` |
|
||||
`>=ALL` |
|
||||
`<=ANY` |
|
||||
`<=ALL` |
|
||||
`=ANY` |
|
||||
`=ALL` |
|
||||
`!=ANY` |
|
||||
`!=ALL` |
|
||||
|
||||
```
|
||||
|
||||
@@ -537,7 +538,7 @@ WHERE Student.Sno IN
|
||||
```
|
||||
|
||||
|
||||
##### 集合查询
|
||||
### 集合查询
|
||||
|
||||
> 因为查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作。集合操作包括UNION、INTERSECT、EXCEPT。
|
||||
|
||||
@@ -568,7 +569,7 @@ WHERE Sage<=19
|
||||
|
||||
```
|
||||
|
||||
##### 基于派生表的查询
|
||||
### 基于派生表的查询
|
||||
|
||||
> 子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这是子查询生成的临时派生表,成为主查询的对象。
|
||||
|
||||
@@ -594,15 +595,15 @@ IS NOT NULL// 非空值
|
||||
```
|
||||
### 3.3 空值的约束条件
|
||||
|
||||
> 如果在字段定义中使用了NOT NULL、Primary Key、UNIQUE,则该属性不能使用空值。
|
||||
* 如果在字段定义中使用了NOT NULL、Primary Key、UNIQUE,则该属性不能使用空值。
|
||||
|
||||
### 3.4 空值的算术晕眩、比较运算和逻辑运算
|
||||
|
||||
> 空值与另一个值的算术运算结果为空值。
|
||||
* 空值与另一个值的算术运算结果为空值。
|
||||
|
||||
> 空值与另外一个值的比较运算结果为UNKNOWN
|
||||
* 空值与另外一个值的比较运算结果为UNKNOWN
|
||||
|
||||
> 空值与另外一个值的逻辑运算遵循逻辑运算的法则。如果需要考虑空值,则为UNKNOWN,如果不虚要考虑空值就能得到结果,则为已经得到的结果。
|
||||
* 空值与另外一个值的逻辑运算遵循逻辑运算的法则。如果需要考虑空值,则为UNKNOWN,如果不虚要考虑空值就能得到结果,则为已经得到的结果。
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
## 1 数据库安全性概述
|
||||
|
||||
### 1.1 数据库的不安全因素
|
||||
## 1.1 数据库的不安全因素
|
||||
|
||||
1. 非授权用户对数据库恶意存取和破坏
|
||||
2. 数据库中重要或敏感的数据被泄露
|
||||
3. 安全环境的脆弱性
|
||||
|
||||
### 1.2 安全性标准
|
||||
## 1.2 安全性标准
|
||||
|
||||
> 通用准则 CC Common Criteria
|
||||
|
||||
@@ -21,29 +21,29 @@
|
||||
## 2 数据库安全性控制
|
||||
> 用户身份鉴别、多层存取控制、审计、视图、数据加密
|
||||
|
||||
### 2.1 用户身份鉴别
|
||||
## 2.1 用户身份鉴别
|
||||
|
||||
##### 静态口令鉴别
|
||||
##### 动态口令鉴别
|
||||
##### 生物特征鉴别
|
||||
##### 智能卡鉴别
|
||||
* 静态口令鉴别
|
||||
* 动态口令鉴别
|
||||
* 生物特征鉴别
|
||||
* 智能卡鉴别
|
||||
|
||||
### 2.2 存取控制
|
||||
## 2.2 存取控制
|
||||
|
||||
##### 简介
|
||||
存取控制主要包括定义用户权限和合法权限检查两部分
|
||||
### 简介
|
||||
> 存取控制主要包括定义用户权限和合法权限检查两部分
|
||||
|
||||
1. 定义用户权限,并将用户权限登记到数据字典当中。安全规则或授权规则
|
||||
2. 合法权限检查,当用户发出存取数据库的操作请求后,数据库管理系统查找数据字典,根据安全规则进行合法权限检查。
|
||||
|
||||
##### 自主存取控制DAC
|
||||
### 自主存取控制DAC
|
||||
|
||||
|
||||
> 在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一存取对象也有不同的权限,而且用户还可以将其拥有的存取权限转手给其他用户。
|
||||
* 在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一存取对象也有不同的权限,而且用户还可以将其拥有的存取权限转手给其他用户。
|
||||
|
||||
> 用户权限组成:数据库对象和操作类型。数据库对象包括数据库基本对象和数据库数据对象。定义存取权限称为授权。
|
||||
* 用户权限组成:数据库对象和操作类型。数据库对象包括数据库基本对象和数据库数据对象。定义存取权限称为授权。
|
||||
|
||||
1. 权限类型
|
||||
### 1. 权限类型
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
@@ -85,7 +85,7 @@
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
2. 授权-数据对象权限
|
||||
### 2. 授权-数据对象权限
|
||||
```
|
||||
GRANT <操作权限>,...
|
||||
ON <对象类型> <对象名>,...
|
||||
@@ -108,7 +108,7 @@ TO PUBLIC;
|
||||
```
|
||||
> 将制定对象的制定操作权限授予制定用户。具有授权资格的角色:数据库管理员、数据对象的创建者、已经拥有该权限的用户。WITH GRANT OPTION获得这个权限的用户已能够继续授权给其他用户。
|
||||
|
||||
3. 收回-数据对象权限
|
||||
### 3. 收回-数据对象权限
|
||||
|
||||
```
|
||||
REVOKE <权限>,...
|
||||
@@ -126,7 +126,7 @@ FROM PUBLIC;
|
||||
```
|
||||
> 用户可以自主决定将数据存取全向授予何人。所以称为自主存取控制。
|
||||
|
||||
3. 创建权限-基本对象权限(模式对象权限)
|
||||
### 4. 创建权限-基本对象权限(模式对象权限)
|
||||
```
|
||||
CREATE USER <username>
|
||||
[WITH][DBA | RESOURCE | CONNECT]
|
||||
@@ -139,7 +139,7 @@ CREATE USER <username>
|
||||
> * 没有指定,默认是CONNECT权限
|
||||
> * 每个权限的基本说明:......
|
||||
|
||||
4. 数据库角色
|
||||
### 5. 数据库角色
|
||||
|
||||
> 定义:数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
|
||||
|
||||
@@ -165,11 +165,11 @@ FROM <role>,...
|
||||
```
|
||||
|
||||
|
||||
##### 强制存取控制MAC
|
||||
### 强制存取控制MAC
|
||||
|
||||
> 在强制存取控制方法中,每一个数据库对象别标以一定的密级,每一个用户也被授予一个几倍的许可证。对于任意对象,只有具有合法许可证的用户才可以存取。相对比较严格。
|
||||
|
||||
### 2.3 视图机制
|
||||
## 2.3 视图机制
|
||||
|
||||
> 为不同的用户定义不同的视图,把数据对象限制在一定的范围内。通过视图机制,把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。
|
||||
|
||||
@@ -187,7 +187,7 @@ ON CS_Student
|
||||
TO zm;
|
||||
```
|
||||
|
||||
### 2.4 审计
|
||||
## 2.4 审计
|
||||
|
||||
> 审计功能把用户对数据库的所有操作自动记录下来放入审计日志。审计员利用甚至日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容。
|
||||
|
||||
@@ -196,7 +196,7 @@ TO zm;
|
||||
* AUDIT语句和NOAUDIT语句
|
||||
|
||||
|
||||
### 2.5 数据加密
|
||||
## 2.5 数据加密
|
||||
|
||||
> 根据一定的算法将原始数据——明文,变换为不可直接识别的格式——密文。从而使不知道解密算法的人无法获知数据内容。
|
||||
|
||||
@@ -205,11 +205,11 @@ TO zm;
|
||||
* 传输加密
|
||||
|
||||
|
||||
### 2.6 其他安全性保护
|
||||
## 2.6 其他安全性保护
|
||||
|
||||
##### 推理控制
|
||||
### 推理控制
|
||||
|
||||
##### 隐蔽信道
|
||||
### 隐蔽信道
|
||||
|
||||
##### 数据隐私保护
|
||||
### 数据隐私保护
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
> trigger触发器是用户定义在关系表示的一类由事件驱动的特殊过程。用户操作,自动激活触发器。
|
||||
|
||||
### 2.1 定义触发器
|
||||
## 2.1 定义触发器
|
||||
|
||||
```
|
||||
CREATE TRIGGER <触发器名>
|
||||
@@ -58,11 +58,11 @@ END;
|
||||
* 触发条件,触发条件为真时,动作执行
|
||||
* 触发体动作,过程块。
|
||||
|
||||
### 2.2 激活触发器
|
||||
## 2.2 激活触发器
|
||||
|
||||
> 触发器执行由触发事件激活,并由数据库服务器自动执行。
|
||||
|
||||
##### 触发顺序
|
||||
### 触发顺序
|
||||
* 执行该表上的BEFOR触发器
|
||||
* 激活触发器的SQL语句
|
||||
* 执行该表上的AFTER触发器。
|
||||
@@ -70,7 +70,7 @@ END;
|
||||
> 如果同一个表上存在多个BEFORE、AFTER触发器,遵循先创建限制性的原则,按照触发器的创建的时间先后顺序执行。
|
||||
|
||||
|
||||
### 2.3 删除触发器
|
||||
## 2.3 删除触发器
|
||||
|
||||
```
|
||||
DROP TRIGGER <触发器名> ON <表名>;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
|
||||
## 1 查询处理
|
||||
|
||||
### 1.1 查询处理的步骤
|
||||
## 1.1 查询处理的步骤
|
||||
> 与编译器进行编译的步骤有点像,先对内容进行解析,优化然后执行。实际上执行查询的步骤就是对SQL语句进行编译并且执行的步骤。
|
||||
|
||||
##### 查询分析
|
||||
### 查询分析
|
||||
> 对语句进行扫描、词法分析和语法分析。从查询语句中识别出语言符号。处理语法错误。
|
||||
|
||||
```
|
||||
@@ -13,7 +13,7 @@ graph TB
|
||||
|
||||
```
|
||||
|
||||
##### 查询检查
|
||||
### 查询检查
|
||||
|
||||
> 对合法的查询语句进行语义检查。名称是否存在、视图操作转化为基本表操作、用户权限和完整性检查。将数据库对象的外部名称抓华为内部表示,生成等价的关系代数表达式,使用查询树(语法分析树)来扩展关系代数表达式。
|
||||
|
||||
@@ -26,7 +26,7 @@ graph TB
|
||||
完整性初步检查-->生成查询树
|
||||
```
|
||||
|
||||
##### 查询优化
|
||||
### 查询优化
|
||||
> 每个查询都会有许多可供选择的执行策略和操作算法,查询优化就是选择一个搞笑执行的查询处理策略。
|
||||
|
||||
> 代数优化指关系代数表达式的优化,按照一定的规则,通过对关系代数表达式进行等价变化,改变代数表达式中操作的次序和组合,使得查询效率更加高效。
|
||||
@@ -38,14 +38,14 @@ graph TB
|
||||
代数优化-->物理优化
|
||||
```
|
||||
|
||||
##### 查询执行
|
||||
### 查询执行
|
||||
|
||||
> 依据优化器得到的执行策略生成查询执行计划。由代码生成器生成执行查询计划,回送查询结果。
|
||||
|
||||
### 1.2 查询操作的算法示例
|
||||
## 1.2 查询操作的算法示例
|
||||
|
||||
##### 选择操作的实现
|
||||
##### 连接操作的实现
|
||||
### 选择操作的实现
|
||||
### 连接操作的实现
|
||||
1. 嵌套循环算法
|
||||
2. 排序-合并算法
|
||||
3. 索引连接算法
|
||||
@@ -54,8 +54,8 @@ graph TB
|
||||
|
||||
|
||||
|
||||
## 查询优化
|
||||
## 2 查询优化
|
||||
> 查询优化可以分为代数优化、物理优化。也就是逻辑优化和非代数优化。
|
||||
代数优化是指关系代数表达式的优化,物理优化则是通过存取路径和底层操作算法的选择进行优化。
|
||||
|
||||
# 今天已经很累了,下次学习数据库的时候进行补充。
|
||||
> 今天已经很累了,下次学习数据库的时候进行补充。
|
||||
|
||||
Reference in New Issue
Block a user