From be46d5fe3d0c8d3edb0210c7b39b064eca7904ab Mon Sep 17 00:00:00 2001 From: yinkanglong_lab Date: Wed, 31 Mar 2021 14:20:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +- 操作系统/6 文件系统.md | 1 - 数据库/MySQL/操作日志——常见操作指令.md | 103 ++++---- 数据库/MySQL/操作日志——注册表文件修改.md | 25 +- 数据库/MySQL/系列1.md | 102 ++++++++ 数据库/MySQL/系列10.md | 92 +++++++ 数据库/MySQL/系列11.md | 102 ++++++++ 数据库/MySQL/系列12.md | 62 +++++ 数据库/MySQL/系列2.md | 104 ++++++++ 数据库/MySQL/系列3.md | 89 +++++++ 数据库/MySQL/系列4.md | 140 +++++++++++ 数据库/MySQL/系列5.md | 56 +++++ 数据库/MySQL/系列6.md | 95 ++++++++ 数据库/MySQL/系列7.md | 99 ++++++++ 数据库/MySQL/系列8.md | 73 ++++++ 数据库/MySQL/系列9.md | 132 ++++++++++ 数据库/MySQL/系列一.md | 201 ---------------- 数据库/MySQL/系列七.md | 194 --------------- 数据库/MySQL/系列三.md | 177 -------------- 数据库/MySQL/系列九.md | 269 --------------------- 数据库/MySQL/系列二.md | 206 ---------------- 数据库/MySQL/系列五.md | 117 --------- 数据库/MySQL/系列八.md | 146 ------------ 数据库/MySQL/系列六.md | 194 --------------- 数据库/MySQL/系列十.md | 184 -------------- 数据库/MySQL/系列十一.md | 200 ---------------- 数据库/MySQL/系列十二.md | 123 ---------- 数据库/MySQL/系列四.md | 291 ----------------------- 数据库/基础篇——1.数据模型和系统结构.md | 187 ++++++--------- 数据库/基础篇——4.SQL.md | 91 +++---- 数据库/基础篇——6.安全性.md | 52 ++-- 数据库/基础篇——7.断言和触发器.md | 8 +- 数据库/系统篇——1.查询处理和查询优化.md | 20 +- 33 files changed, 1393 insertions(+), 2558 deletions(-) create mode 100644 数据库/MySQL/系列1.md create mode 100644 数据库/MySQL/系列10.md create mode 100644 数据库/MySQL/系列11.md create mode 100644 数据库/MySQL/系列12.md create mode 100644 数据库/MySQL/系列2.md create mode 100644 数据库/MySQL/系列3.md create mode 100644 数据库/MySQL/系列4.md create mode 100644 数据库/MySQL/系列5.md create mode 100644 数据库/MySQL/系列6.md create mode 100644 数据库/MySQL/系列7.md create mode 100644 数据库/MySQL/系列8.md create mode 100644 数据库/MySQL/系列9.md delete mode 100644 数据库/MySQL/系列一.md delete mode 100644 数据库/MySQL/系列七.md delete mode 100644 数据库/MySQL/系列三.md delete mode 100644 数据库/MySQL/系列九.md delete mode 100644 数据库/MySQL/系列二.md delete mode 100644 数据库/MySQL/系列五.md delete mode 100644 数据库/MySQL/系列八.md delete mode 100644 数据库/MySQL/系列六.md delete mode 100644 数据库/MySQL/系列十.md delete mode 100644 数据库/MySQL/系列十一.md delete mode 100644 数据库/MySQL/系列十二.md delete mode 100644 数据库/MySQL/系列四.md diff --git a/README.md b/README.md index c0170ecd..8c0ba0b1 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,8 @@ ## 3 关于做笔记的讨论 -> 感觉没有必要做笔记,只要在书上做好指明就好了。这就好像在PDF原文上做笔记一样。 -> 那么什么样的东西才会需要自己做笔记呢?我觉得应该是那些视频教程。如果有纸质书,或者PDF的,可以吧这些资料整合起来。 +* 感觉没有必要做笔记,只要在书上做好指明就好了。这就好像在PDF原文上做笔记一样。 +* 那么什么样的东西才会需要自己做笔记呢?我觉得应该是那些视频教程。如果有纸质书,或者PDF的,可以吧这些资料整合起来。 ### 资料的形式可以分为三种: * PDF,电子版 @@ -51,6 +51,14 @@ ### 说明 * 最好的笔记不能是“讲解”型的,应该是“总结”型的。最好通过符号和图形作为笔记的内容。说明型文字最好不要出现。最好有自己的理解。 +* 感觉还是具体情况具体分析吧。有一些计算机类的只是,还是详细记录,整理知识点。对于算法或者模型,还是主要讲解数学原理和模型的构建。有书籍的尽量在原来的书籍上做好笔记。如果没有书籍,再考虑大量的做vscode的笔记。 - -> 感觉还是具体情况具体分析吧。有一些计算机类的只是,还是详细记录,整理知识点。对于算法或者模型,还是主要讲解数学原理和模型的构建。有书籍的尽量在原来的书籍上做好笔记。如果没有书籍,再考虑大量的做vscode的笔记。 \ No newline at end of file +## 2021年3月31日说明 +* 昨天晚上思考了一下。做笔记不是写书。不应该写得这么详细。你这种抄书的行为,干嘛不直接去看原来的书籍呢。抄一遍仅仅是为了加深理解?显然不行。 +* 前几天看了一下sklearn的cookbook。感觉他的风格非常棒。 + * Getting ready 概念 + * How to do it 怎么做 + * How it works 为什么 + * What's more 还有什么 +* 我觉得以后做关于技术或者只是类的笔记都可以这么做。 +* 究极哲学问题:是什么、怎么做、为什么。 \ No newline at end of file diff --git a/操作系统/6 文件系统.md b/操作系统/6 文件系统.md index 7f10c14a..5f38525d 100644 --- a/操作系统/6 文件系统.md +++ b/操作系统/6 文件系统.md @@ -9,7 +9,6 @@ > 6. 文件共享与文件保护 > 7. 数据一致性控制 - ## 1 文件 ### 定义 * 具有符号名的,在逻辑上具有完整意义的一组相关信息项的序列 diff --git a/数据库/MySQL/操作日志——常见操作指令.md b/数据库/MySQL/操作日志——常见操作指令.md index 83c7e278..b558c0a2 100644 --- a/数据库/MySQL/操作日志——常见操作指令.md +++ b/数据库/MySQL/操作日志——常见操作指令.md @@ -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 存储在内存中的内容创建表,对应磁盘文件,对磁盘快速处理。 +``` diff --git a/数据库/MySQL/操作日志——注册表文件修改.md b/数据库/MySQL/操作日志——注册表文件修改.md index df1911df..1e701ab6 100644 --- a/数据库/MySQL/操作日志——注册表文件修改.md +++ b/数据库/MySQL/操作日志——注册表文件修改.md @@ -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位更加安全的密码。 +> +> 最终运行成功! diff --git a/数据库/MySQL/系列1.md b/数据库/MySQL/系列1.md new file mode 100644 index 00000000..015daf4c --- /dev/null +++ b/数据库/MySQL/系列1.md @@ -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; + +``` \ No newline at end of file diff --git a/数据库/MySQL/系列10.md b/数据库/MySQL/系列10.md new file mode 100644 index 00000000..9deb02f7 --- /dev/null +++ b/数据库/MySQL/系列10.md @@ -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 +--运算符的优先级 + +``` \ No newline at end of file diff --git a/数据库/MySQL/系列11.md b/数据库/MySQL/系列11.md new file mode 100644 index 00000000..257b9790 --- /dev/null +++ b/数据库/MySQL/系列11.md @@ -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)--解锁 + +``` \ No newline at end of file diff --git a/数据库/MySQL/系列12.md b/数据库/MySQL/系列12.md new file mode 100644 index 00000000..96769bae --- /dev/null +++ b/数据库/MySQL/系列12.md @@ -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 +``` \ No newline at end of file diff --git a/数据库/MySQL/系列2.md b/数据库/MySQL/系列2.md new file mode 100644 index 00000000..07ddfd47 --- /dev/null +++ b/数据库/MySQL/系列2.md @@ -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 +``` \ No newline at end of file diff --git a/数据库/MySQL/系列3.md b/数据库/MySQL/系列3.md new file mode 100644 index 00000000..be099cf7 --- /dev/null +++ b/数据库/MySQL/系列3.md @@ -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; +``` \ No newline at end of file diff --git a/数据库/MySQL/系列4.md b/数据库/MySQL/系列4.md new file mode 100644 index 00000000..c9f1e8ff --- /dev/null +++ b/数据库/MySQL/系列4.md @@ -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(); +``` \ No newline at end of file diff --git a/数据库/MySQL/系列5.md b/数据库/MySQL/系列5.md new file mode 100644 index 00000000..08a7011e --- /dev/null +++ b/数据库/MySQL/系列5.md @@ -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; +``` \ No newline at end of file diff --git a/数据库/MySQL/系列6.md b/数据库/MySQL/系列6.md new file mode 100644 index 00000000..b9600e1d --- /dev/null +++ b/数据库/MySQL/系列6.md @@ -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 '____'; +``` \ No newline at end of file diff --git a/数据库/MySQL/系列7.md b/数据库/MySQL/系列7.md new file mode 100644 index 00000000..3dd62aaa --- /dev/null +++ b/数据库/MySQL/系列7.md @@ -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; + + +``` \ No newline at end of file diff --git a/数据库/MySQL/系列8.md b/数据库/MySQL/系列8.md new file mode 100644 index 00000000..0f658b2a --- /dev/null +++ b/数据库/MySQL/系列8.md @@ -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; +--左外连接就是一左边的表为查询主表,从左边寻找满足条件要求的项,并在右表中找到对应的数据 + +``` \ No newline at end of file diff --git a/数据库/MySQL/系列9.md b/数据库/MySQL/系列9.md new file mode 100644 index 00000000..1a0aabc8 --- /dev/null +++ b/数据库/MySQL/系列9.md @@ -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; +``` \ No newline at end of file diff --git a/数据库/MySQL/系列一.md b/数据库/MySQL/系列一.md deleted file mode 100644 index ecd28cb7..00000000 --- a/数据库/MySQL/系列一.md +++ /dev/null @@ -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; diff --git a/数据库/MySQL/系列七.md b/数据库/MySQL/系列七.md deleted file mode 100644 index 3103f193..00000000 --- a/数据库/MySQL/系列七.md +++ /dev/null @@ -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; diff --git a/数据库/MySQL/系列三.md b/数据库/MySQL/系列三.md deleted file mode 100644 index 190cb258..00000000 --- a/数据库/MySQL/系列三.md +++ /dev/null @@ -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; diff --git a/数据库/MySQL/系列九.md b/数据库/MySQL/系列九.md deleted file mode 100644 index e342efcc..00000000 --- a/数据库/MySQL/系列九.md +++ /dev/null @@ -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; diff --git a/数据库/MySQL/系列二.md b/数据库/MySQL/系列二.md deleted file mode 100644 index a64dea4f..00000000 --- a/数据库/MySQL/系列二.md +++ /dev/null @@ -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 diff --git a/数据库/MySQL/系列五.md b/数据库/MySQL/系列五.md deleted file mode 100644 index 0dab748e..00000000 --- a/数据库/MySQL/系列五.md +++ /dev/null @@ -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; diff --git a/数据库/MySQL/系列八.md b/数据库/MySQL/系列八.md deleted file mode 100644 index c321a079..00000000 --- a/数据库/MySQL/系列八.md +++ /dev/null @@ -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. \--左外连接就是一左边的表为查询主表,从左边寻找满足条件要求的项,并在右表中找到对应的数据 diff --git a/数据库/MySQL/系列六.md b/数据库/MySQL/系列六.md deleted file mode 100644 index ba11319d..00000000 --- a/数据库/MySQL/系列六.md +++ /dev/null @@ -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 - '____'; diff --git a/数据库/MySQL/系列十.md b/数据库/MySQL/系列十.md deleted file mode 100644 index 854ddbea..00000000 --- a/数据库/MySQL/系列十.md +++ /dev/null @@ -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. \--运算符的优先级 diff --git a/数据库/MySQL/系列十一.md b/数据库/MySQL/系列十一.md deleted file mode 100644 index c7a6dd1b..00000000 --- a/数据库/MySQL/系列十一.md +++ /dev/null @@ -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**)--解锁 diff --git a/数据库/MySQL/系列十二.md b/数据库/MySQL/系列十二.md deleted file mode 100644 index c68f332d..00000000 --- a/数据库/MySQL/系列十二.md +++ /dev/null @@ -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 diff --git a/数据库/MySQL/系列四.md b/数据库/MySQL/系列四.md deleted file mode 100644 index f5e0380e..00000000 --- a/数据库/MySQL/系列四.md +++ /dev/null @@ -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**(); diff --git a/数据库/基础篇——1.数据模型和系统结构.md b/数据库/基础篇——1.数据模型和系统结构.md index 24013d6d..144e7c59 100644 --- a/数据库/基础篇——1.数据模型和系统结构.md +++ b/数据库/基础篇——1.数据模型和系统结构.md @@ -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 结束输出日志 +``` \ No newline at end of file diff --git a/数据库/基础篇——4.SQL.md b/数据库/基础篇——4.SQL.md index e462a97b..e0c107da 100644 --- a/数据库/基础篇——4.SQL.md +++ b/数据库/基础篇——4.SQL.md @@ -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` | ``` @@ -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,如果不虚要考虑空值就能得到结果,则为已经得到的结果。 diff --git a/数据库/基础篇——6.安全性.md b/数据库/基础篇——6.安全性.md index a2c9bdae..266a0bac 100644 --- a/数据库/基础篇——6.安全性.md +++ b/数据库/基础篇——6.安全性.md @@ -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. 权限类型 @@ -85,7 +85,7 @@
-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 [WITH][DBA | RESOURCE | CONNECT] @@ -139,7 +139,7 @@ CREATE USER > * 没有指定,默认是CONNECT权限 > * 每个权限的基本说明:...... -4. 数据库角色 +### 5. 数据库角色 > 定义:数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。 @@ -165,11 +165,11 @@ FROM ,... ``` -##### 强制存取控制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 其他安全性保护 -##### 推理控制 +### 推理控制 -##### 隐蔽信道 +### 隐蔽信道 -##### 数据隐私保护 +### 数据隐私保护 diff --git a/数据库/基础篇——7.断言和触发器.md b/数据库/基础篇——7.断言和触发器.md index 79db6a12..c5d89cb1 100644 --- a/数据库/基础篇——7.断言和触发器.md +++ b/数据库/基础篇——7.断言和触发器.md @@ -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 <表名>; diff --git a/数据库/系统篇——1.查询处理和查询优化.md b/数据库/系统篇——1.查询处理和查询优化.md index 2c15bccd..d3dac210 100644 --- a/数据库/系统篇——1.查询处理和查询优化.md +++ b/数据库/系统篇——1.查询处理和查询优化.md @@ -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 查询优化 > 查询优化可以分为代数优化、物理优化。也就是逻辑优化和非代数优化。 代数优化是指关系代数表达式的优化,物理优化则是通过存取路径和底层操作算法的选择进行优化。 -# 今天已经很累了,下次学习数据库的时候进行补充。 +> 今天已经很累了,下次学习数据库的时候进行补充。