数据库完成

This commit is contained in:
yinkanglong_lab
2021-03-31 14:20:42 +08:00
parent 10b827c8e1
commit be46d5fe3d
33 changed files with 1393 additions and 2558 deletions

View File

@@ -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 还有什么
* 我觉得以后做关于技术或者只是类的笔记都可以这么做。
* 究极哲学问题:是什么、怎么做、为什么。

View File

@@ -9,7 +9,6 @@
> 6. 文件共享与文件保护
> 7. 数据一致性控制
## 1 文件
### 定义
* 具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列

View File

@@ -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 存储在内存中的内容创建表,对应磁盘文件,对磁盘快速处理。
```

View File

@@ -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
View 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;
```

View 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
View 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(S1LEN,S2)/RPAD(S1LEN,S2)将字符串S1用S2填充到制定的LEN.
--LTRIM(S)/RTRIM(S)/TRIM(S)去掉字符串中的空格
--TRIM(S1 FROM S)去掉字符串s中开始处和结尾处的字符串
--REPEAT(S,N)重复字符串指定次数
--SPACE(N)返回N个空格
--REPLACE(S,S1S2)将字符串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(D1D2)返回两个日期之间相隔的天数
#
--条件判断函数和系统函数
--IF (EXPR,V1V2)如果表达式成立返回结果v1否则返回V2
--IFNULL(V1V2)如果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)--解锁
```

View 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
View 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
```

View 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
View 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();
```

View 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;
```

View 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)
--查询用户名为kingqueen张三的记录忽略英文的大小写
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 '____';
```

View 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()函数进行使用
--查询idsexusername的详情 按照性别分组
--通过性别分组分组后得到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;
```

View 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表中idusername
--查询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表中idusername,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
View 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;
```

View File

@@ -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;

View File

@@ -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. \--查询idsexusername的详情 按照性别分组
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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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表中idusername
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表中idusername,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. \--左外连接就是一左边的表为查询主表,从左边寻找满足条件要求的项,并在右表中找到对应的数据

View File

@@ -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. \--查询用户名为kingqueen张三的记录忽略英文的大小写
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
'____';

View File

@@ -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. \--运算符的优先级

View File

@@ -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(S1LEN,S2)/RPAD(S1LEN,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,S1S2)将字符串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(D1D2)返回两个日期之间相隔的天数
56.
57. \#第四十九课时
58. \--条件判断函数和系统函数
59. \--IF (EXPR,V1V2)如果表达式成立返回结果v1否则返回V2
60. \--IFNULL(V1V2)如果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**)--解锁

View File

@@ -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

View File

@@ -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**();

View File

@@ -1,133 +1,96 @@
\>定义
# 基础篇——1 数据模型和系统结构
## 1 定义
数据库:存储数据的仓库,为了方便数据的存储和管理
* 数据库:存储数据的仓库,为了方便数据的存储和管理
数据库系统DBS比数据库大很多由数据库、数据库管理系统、应用开发工具构成
* 数据库系统DBS比数据库大很多由数据库、数据库管理系统、应用开发工具构成
数据库管理系统database management
system。用来定义数据库、管理和维护数据的软件。像OracleMySQL等是管理系统
* 数据库管理系统database managementsystem。用来定义数据库、管理和维护数据的软件。像OracleMySQL等是管理系统
\>SQL
## 2 SQL
structure query
language结构化查询语言数据库管理系统通过SQL语言来管理数据库中的数据
### 概念
* structure query language结构化查询语言数据库管理系统通过SQL语言来管理数据库中的数据
组成部分:
### 组成部分:
DDLdata defination
language数据定义语言定义数据库、表、视图、索引、触发器。
* DDLdata defination language数据定义语言定义数据库、表、视图、索引、触发器。
DMLdata manipulation
language对数据的增删改INSERT插入数据、UPDATA更新数据、DELETE删除数据
* DMLdata manipulation language对数据的增删改INSERT插入数据、UPDATA更新数据、DELETE删除数据
DQLdata query
language数据检索语言。用来从表中获得数据确定数据怎样在应用程序中给出。SELECT查询数据
* DQLdata query language数据检索语言。用来从表中获得数据确定数据怎样在应用程序中给出。SELECT查询数据
DCLdata control
language数据控制语言主要用于控制用户访问的权限想GRANT、REVOKE、COMMIT、ROLLBACK等语句
* DCLdata 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 结束输出日志
```

View File

@@ -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如果不虚要考虑空值就能得到结果则为已经得到的结果。

View File

@@ -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 其他安全性保护
##### 推理控制
### 推理控制
##### 隐蔽信道
### 隐蔽信道
##### 数据隐私保护
### 数据隐私保护

View File

@@ -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 <表名>;

View File

@@ -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 查询优化
> 查询优化可以分为代数优化、物理优化。也就是逻辑优化和非代数优化。
代数优化是指关系代数表达式的优化,物理优化则是通过存取路径和底层操作算法的选择进行优化。
# 今天已经很累了,下次学习数据库的时候进行补充。
> 今天已经很累了,下次学习数据库的时候进行补充。