設(shè)計(jì)師個(gè)人網(wǎng)站網(wǎng)絡(luò)推廣渠道公司
文章目錄
- 前言
- 1.數(shù)據(jù)庫(kù)概述
- 1.1 數(shù)據(jù)庫(kù)相關(guān)概念
- 1.2登錄MySQL:
- 1.3 MySQL常用命令
- 1.4表:
- 1.5SQL語(yǔ)句分類:
- 2.CRUD操作
- 2.1 DQL
- 1.基礎(chǔ)查詢
- 基礎(chǔ)查詢(簡(jiǎn)單查詢)
- 條件查詢:
- 排序查詢:
- 分組查詢:
- 分頁(yè)查詢:
- 2 鏈接查詢
- 鏈接方式分類
- 3 子查詢
- where子查詢
- from子句中的子查詢
- select后面的子查詢
- 4 union合并查詢結(jié)果集
- 5 limit 查詢
- 2.2 DDL
- 2.2.1 create:表的創(chuàng)建
- 2 .2.2 alter:修改表
- 2.2.3 drop:刪除表
- 快速刪除表
- 2.3DML
- 2.3.1插入 insert
- 2.3.2修改 Update
- 2.3.3刪除 delete
- 2.4 表
- 2.4.1 表結(jié)構(gòu)的增刪改查
- 2.4.2約束 (constraint)
- 1 非空約束 (not null)
- 2 唯一性約束 (unique)
- 3 主鍵約束 (primary key :PK)
- 4 外鍵約束(foreign key :FK)
- 2.5 數(shù)據(jù)處理函數(shù)
- 2.2.1 單行處理函數(shù)
- 2.2.2 多行處理函數(shù)
- 3 存儲(chǔ)引擎
- 4 事務(wù)
- 4.1 實(shí)現(xiàn)事務(wù)
- 4.1.1 提交事務(wù) (commit)
- 4.1.2 回滾事務(wù) (rollback)
- 4.2 事務(wù)的特性
- 4.2.1 事務(wù)的隔離性
- 1 事務(wù)的隔離級(jí)別
- 5 索引
- 5.1創(chuàng)建索引
- 5.2索引失效
- 5.3 索引的分類
- 6 視圖
- 6.1 創(chuàng)建視圖
- 6.2 刪除視圖
- 6.3 視圖的CRUD
- 7 DBA命令
- 7.1 新建用戶
- 7.2 授權(quán)
- 7.2.1 回收授權(quán)
- 7.3 數(shù)據(jù)的導(dǎo)入導(dǎo)出
- 7.3.2數(shù)據(jù)的導(dǎo)入
- 8 數(shù)據(jù)庫(kù)設(shè)計(jì)的三規(guī)范
- 9 SQL高級(jí)應(yīng)用
- 8.1 T-SQL程序設(shè)計(jì)
- 8.1.1 變量
- 8.1.2 流程控制語(yǔ)句
- 8.2存儲(chǔ)過(guò)程
- 8.2.1 存儲(chǔ)過(guò)程 的有點(diǎn)
- 8.2.2 存儲(chǔ)過(guò)程的分類
- 8.2.3 創(chuàng)建存儲(chǔ)過(guò)程
- 8.3觸發(fā)器
- 8.3.1 分類
- 8.3.2 創(chuàng)建DML觸發(fā)器
- 8.3.3 創(chuàng)建DDL觸發(fā)器
前言
MySQL專欄匯總 :MySQL 必死
1.數(shù)據(jù)庫(kù)概述
1.1 數(shù)據(jù)庫(kù)相關(guān)概念
數(shù)據(jù)庫(kù):DataBase (DB)
- 按照一定格式存儲(chǔ)數(shù)據(jù)的一些文件的組合
- 存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù),數(shù)據(jù)文件,日志文件。具有一定特定格式的數(shù)據(jù)。
數(shù)據(jù)庫(kù)管理系統(tǒng):DataBase Management (DBMS)
- 專門用來(lái)管理數(shù)據(jù)庫(kù)中的數(shù)據(jù)的,數(shù)據(jù)庫(kù)管理系統(tǒng)可以對(duì)數(shù)據(jù)當(dāng)中的數(shù)據(jù)進(jìn)行增刪改查
SQL :結(jié)構(gòu)化查詢語(yǔ)言
- 使用DBMS負(fù)責(zé)執(zhí)行SQL語(yǔ)句,來(lái)完成數(shù)據(jù)庫(kù)中的增刪改查。
- SQL是一套標(biāo)準(zhǔn)語(yǔ)言,主要學(xué)習(xí)SQL語(yǔ)句。SQL語(yǔ)句可以在MySQL、Oracle、DB2中使用。
三者之間的關(guān)系:
DBMS ----執(zhí)行-----> SQL -------操作----> DB
1.2登錄MySQL:
mysql修改登錄用戶名和秘密
# 修改密碼-- 1.進(jìn)入cmd
-- 2. 輸入
mysql -u root -p;
-- 3.輸入舊密碼
Enter password: *****
-- 4.選擇數(shù)據(jù)庫(kù)
mysql> use 庫(kù)名;
-- 輸入修改語(yǔ)句信息
mysql> UPDATE user SET password =PASSWORD("新密碼") WHERE user = '用戶名';-- 刷新
mysql> flush privileges;#修改用戶名:
-- 1.進(jìn)入cmd
-- 2. 輸入
mysql -u root -p;
-- 3.輸入舊密碼
Enter password: *****
-- 4.選擇數(shù)據(jù)庫(kù)
mysql> use 庫(kù)名;
-- 輸入修改語(yǔ)句信息
mysql> UPDATE user SET u =user("新用戶名") WHERE user = 'root';
mysql> flush privileges;
mysql> exit
1.在DOS窗口下:(隱藏密碼形式)
-
打開mysql:
net start mysql
-
關(guān)閉mysql:
net stop mysql
-
進(jìn)入mysql指令:
mysql -u root -p
-
關(guān)閉mysql指令:
exit
(退出)
2.一步到位登錄MySQL指令:(顯示密碼形式)
mysql -uroot -p123456
// -p 后面的是MySQL 的密碼
1.3 MySQL常用命令
-
查看數(shù)據(jù)庫(kù)
show Database;
-
使用數(shù)據(jù)庫(kù)
use test;
use 數(shù)據(jù)庫(kù)名 ;
-
創(chuàng)建數(shù)據(jù)庫(kù)
create database test1
create database 數(shù)據(jù)庫(kù)名
-
查看表
show tables;
-
sql中導(dǎo)入數(shù)據(jù) (執(zhí)行sql腳本)
source 全路徑(指定sql腳本的路徑)
路徑不能出現(xiàn)中文!!!
-
查看MySQL版本
select version();
-
查看當(dāng)前使用的數(shù)據(jù)庫(kù)
select database();
1.4表:
數(shù)據(jù)庫(kù)中的最基本單元 :表
表結(jié)構(gòu):
-
行(row):數(shù)據(jù) / 記錄
-
列(column):字段 (每一個(gè)字段都有:字段名,數(shù)據(jù)類型,約束等屬性)
-
字段名:
-
數(shù)據(jù)類型:字符型、日期型、時(shí)間型、整型等
-
約束:
1.5SQL語(yǔ)句分類:
-
DDL : 數(shù)據(jù)定義語(yǔ)言 (Data Definition Language)
- 對(duì)表結(jié)構(gòu)進(jìn)行操作
create
:創(chuàng)建alter
:修改drop
:刪除
-
DML : 數(shù)據(jù)操作語(yǔ)言 (Data Manipulation Language)
- 對(duì)表當(dāng)中的數(shù)據(jù)進(jìn)行增刪改查 ,操作表中的數(shù)據(jù)data
inster
:插入delete
:刪除update
:修改
-
DQL : 數(shù)據(jù)查詢語(yǔ)言 (Data Query Language)
select
語(yǔ)句
-
DCL : 數(shù)據(jù)控制語(yǔ)言 (Data Control Language)
- 授權(quán):
GRANT
- 撤銷權(quán)限:
REVOKE
- 授權(quán):
-
TCL :事務(wù)控制語(yǔ)言
- 事務(wù)提交:
commit
- 事務(wù)回滾:
rollback
- 事務(wù)提交:
2.CRUD操作
2.1 DQL
- SQL語(yǔ)句是通用的,以英文分號(hào) " ; " 結(jié)束
- MySQL數(shù)據(jù)庫(kù)的SQL語(yǔ)句不區(qū)分大小寫,關(guān)鍵字建議使用大寫。
- 注釋
- 單行注釋:-- 注釋內(nèi)容或 # 注釋內(nèi)容(MySQL特有)
- 多行注釋:/* 注釋 */
1.基礎(chǔ)查詢
-
查詢所有列 (字段)
SELECT * FROM 表名; -- 查詢所有字段 (效率低、可讀性差、開發(fā)中不建議)
-
查詢單個(gè)/多個(gè)字段
SELECT 字段1,字段2,···,字段n FROM 表名; -- 查詢單個(gè)/多個(gè)字段
-
去重查詢
SELECT DISTINCT 去重的字段1 FROM 表名; SELECT DISTINCT name FROM student; -- 去重復(fù)的姓名
- 為字段起別名
SELECT 字段1 AS 別名名稱 FROM 表名; -- 方式一SELECT 新字段名 = 字段1 FROM 表名; -- 方式二-- 列如:SELECT name AS 姓名 FROM student; -- 方式一SELECT name 姓名 FROM student; -- 方式二SELECT 姓名 = name FROM studnet; -- 方式三```**別名只是在顯示中,并不會(huì)修改到表中的字段名**別名中間存在有空格,會(huì)出現(xiàn)報(bào)錯(cuò),不符合語(yǔ)法,編譯錯(cuò)誤。若是字段中間必須要有空格必須使用單引號(hào)或者雙引號(hào)括起來(lái)```sqlSELECT name AS '姓 名' FROM student; -- 標(biāo)準(zhǔn)字符串,單引號(hào)括起來(lái)SELECT name AS "姓 名" FROM student; -- 不推薦,不標(biāo)準(zhǔn)```==注意:==1. 單引號(hào)是標(biāo)準(zhǔn)的字符串形式2. 雙引號(hào)在mysql中可以使用,在oracle中不可以使用
-
字段可以使用數(shù)學(xué)表達(dá)式
- 給字段進(jìn)行加減乘除
SELECT 字段1,字段2,···,字段n,FROM 表名WHERE 條件;
-
條件符號(hào):
符號(hào) 說(shuō)明 = 等于 <>或!= 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于 between ···· and 兩個(gè)值之間,當(dāng)同于>= and <= 遵循左小右大 is null 為空(is not null 不能為空) and 并且 or 或者 in 包含,相當(dāng)于多個(gè) or (not in :不包括在內(nèi)) like 模糊查詢,支持%或下劃線匹配 % 通配符:匹配任意個(gè)字符 _ 下劃線:匹配一個(gè)字符
SELECT name ,age FROM student WHERE age = 55 ; -- 等于SELECT name ,age FROM student WHERE age != 55; -- 不等于SELECT name ,age FROM student WHERE age <> 55;SELECT name ,age FROM student WHERE age < 55; -- 小于SELECT name ,age FROM student WHERE age <= 55; -- 小于等于SELECT name ,age FROM student WHERE age > 55 ; -- 大于SELECT name ,age FROM student WHERE age >= 55; -- 大于等于SELECT name ,age FROM student WHERE age BETWEEN 23 AND 30; -- 年齡在23到30之間SELECT name ,age FROM student WHERE age >= 23 AND <= 30 ;SELECT name ,age FROM student WHERE age IS NULL; -- is null is不能改為等號(hào)SELECT name ,age FROM student WHERE age IS NOT NULL; -- is not null is不能改為等號(hào)SELECT name ,age FROM student WHERE name = '張三' AND age > 45; -- endSELECT name ,age FROM student WHERE name = '張三' OR name = '小三'; -- OR 有一個(gè)就可以查找到SELECT name ,age FROM student WHERE age > 15 AND name = '張三' OR name = '小三'; -- and 和 or 同時(shí)出現(xiàn)這一句中:先執(zhí)行 and 在執(zhí)行 or SELECT name ,age FROM student WHERE age > 15 AND (name = '張三' OR name = '小三'); -- 正確的寫法 讓 or 先執(zhí)行SELECT name ,age FROM student WHERE age IN(15,35,45,25); -- 年齡在15、25、35、45中的SELECT name ,age FROM student WHERE age NOT IN(15,35,45,25); -- 年齡不在15、25、35、45中的name 和 age
- 模糊查詢:LIKE
SELECT 字段1 AS 別名名稱 FROM 表名; -- 方式一SELECT 新字段名 = 字段1 FROM 表名; -- 方式二-- 列如:SELECT name AS 姓名 FROM student; -- 方式一SELECT name 姓名 FROM student; -- 方式二SELECT 姓名 = name FROM studnet; -- 方式三```**別名只是在顯示中,并不會(huì)修改到表中的字段名**別名中間存在有空格,會(huì)出現(xiàn)報(bào)錯(cuò),不符合語(yǔ)法,編譯錯(cuò)誤。若是字段中間必須要有空格必須使用單引號(hào)或者雙引號(hào)括起來(lái)```sqlSELECT name AS '姓 名' FROM student; -- 標(biāo)準(zhǔn)字符串,單引號(hào)括起來(lái)SELECT name AS "姓 名" FROM student; -- 不推薦,不標(biāo)準(zhǔn)```==注意:==1. 單引號(hào)是標(biāo)準(zhǔn)的字符串形式2. 雙引號(hào)在mysql中可以使用,在oracle中不可以使用SELECT name ,age FROM student WHERE LIKE '%小%' ;-- 含有‘小’的名字SELECT name ,age FROM student WHERE LIKE '張%' ;-- 姓張的SELECT name ,age FROM student WHERE LIKE '%森' ;-- 以森結(jié)尾的SELECT name ,age FROM student WHERE LIKE '%_垂%'; -- 第二個(gè)字為垂的SELECT name ,age FROM student WHERE LIKE '%__森%'; -- 第二個(gè)字為森的SELECT name ,age FROM student WHERE LIKE '%_%' ;-- 找出名字中含有下劃線的。 因?yàn)橄聞澗€具有特殊含義,需要把下劃線進(jìn)行轉(zhuǎn)義SELECT name ,age FROM student WHERE LIKE '%\_%'; -- 正確 √
-
排序查詢:
排序總是在最后執(zhí)行!!!
-
語(yǔ)法
SELECT 字段1,字段2,···,字段n, FROM 表名 ORDER BY 排序字段名1 [排序方式1], 排序字段名2 [排序方式2] ...;
-
排序方式
-
ASC : 升序 (默認(rèn)值),不寫就是默認(rèn)升序
-
DEAC :降序
-
-
多個(gè)字段排序 :如果有多個(gè)排序條件,當(dāng)前邊的條件值一樣時(shí),才會(huì)根據(jù)第二條件進(jìn)行排序
-
SELECT name ,age FROM student ORDER BY age ; -- 按照年齡 默認(rèn)升序SELECT name ,age FROM student ORDER BY age DESC; -- 降序SELECT name ,age FROM student ORDER BY age ASC ; -- 指定升序-- 多個(gè)字段排序 :如果有多個(gè)排序條件,當(dāng)前邊的條件值一樣時(shí),才會(huì)根據(jù)第二條件進(jìn)行排序SELECT name ,age,score FROM student ORDER BY age DESC,name DESC ; -- 若是年齡相同,才能進(jìn)行name排序-- 根據(jù)字段的位置進(jìn)行排序SELECT name ,age FROM student ORDER BY 2; -- 根據(jù)第二列排序
綜合案例:查詢年齡在20到50之間,并且更具年齡進(jìn)行降序排序
SELECTname,ageFROM studentWHEREage >= 20 AND age <= 50ORDER BYage DESC ;
SELECT 分組函數(shù)名(列名)FROM 表;
- count :計(jì)數(shù)- sum :求和- avg :平均值- max :最大值- min :最小值- ==注意:==1. 自動(dòng)忽略NULL2. count(*) 和count(具體字段)的區(qū)別- count(*) :統(tǒng)計(jì)總行數(shù),不忽略null;- count(具體字段):表示統(tǒng)計(jì)該字段下所有**不為NULL的元素的總數(shù)**。忽略null3. 分組函數(shù)不能直接使用在where子句中。4. 所有的分組函數(shù)可以組合在一起用。
-
分組查詢語(yǔ)法
- 先進(jìn)行分組,對(duì)每一組的數(shù)據(jù)進(jìn)行操作。
SELECT 字段列表 FROM 表名 [WHERE 分組前條件限定]GROUP BY 分組字段名 [HAVING 分組后條件過(guò)濾];
- ==where不參與分組,having是在分組之后的,where不能對(duì)聚合函數(shù)進(jìn)行判斷,having可以==。- **關(guān)鍵字執(zhí)行順序:from --> where --> group by --> having--> select -->order by**~~~mysqlSELECT COUNT(name) FROM student ; -- 可以執(zhí)行,因?yàn)镾ELECT在分組后執(zhí)行SELECT name ,age FROM student WHERE age > MIN(age) -- 不能執(zhí)行 因?yàn)檫M(jìn)行WHERE時(shí) 還沒有進(jìn)行分組
- 案例
-- 1.找出每個(gè)工作崗位的工資和?-- 思路:按照工作崗位分組,然后對(duì)工資求和SELECT job,SUM(sal)FROMempGROUP BYjob; -- 2.找出 '每個(gè)部門,不同工作崗位'的最高薪資-- 兩個(gè)字段進(jìn)行分組SELECTdeptID,job,MAX(sal)FROMempGROUP BYdeptID,job ;-- 3.找出部門的最高薪資,要求顯示最高薪資大于3000的(方法一)SELECTdeptID,MAX(sal)FROMempGROUP BYdeptID HAVINGMAX(sal) > 3000;(方法二) SELECTdeptID,MAX(sal)FROMempWHERE sal > 3000GROUP BYdeptID ;-- 優(yōu)化策略:where 和 having 優(yōu)先選擇where,where實(shí)現(xiàn)不了,再選擇having。-- having的執(zhí)行效率低-- 4.找出每個(gè)部門平均薪資,要求顯示平均薪資高于2500的 -- 這個(gè)就不能使用where(錯(cuò)誤的寫法,where子句中不能進(jìn)行寫分組函數(shù)) SELECTdeptID,AVG(sal)FROMempwhere avg(sal) >2500GROUP BYdeptID ;(正確寫法)SELECTdeptID,AVG(sal)FROMempGROUP BYdeptID HAVING AVG(sal) > 2500;-- 5.找出每個(gè)崗位的平均薪資,要求顯示平均薪資大于1500的,出去mag崗位之外。 SELECT job,AVG(sal) avgsalFROMempWHERE job!= 'mag'GROUP BYjobHAVING AVG(sal) > 1500ORDER BYavgsal DESC; -- jiang'x
- ==SELECT 語(yǔ)句中,含有GROUP BY 語(yǔ)句,SELECT后面只能跟:參與分組,以及分組函數(shù)的字段,其他字段不可以寫上去== 添加其他的字段在oracle中會(huì)報(bào)錯(cuò)- HAVING 子句不能單獨(dú)使用,必須和GROUP BY 一起使用。 - HAVING:對(duì)分組之后的進(jìn)行條件刷選。
-
分頁(yè)查詢:
-
語(yǔ)法:SELECT 字段名 FROM 表名 起始索引 查詢數(shù)目的條數(shù)
-
– 起始索引公式:當(dāng)前頁(yè)的起始索引 = (當(dāng)前頁(yè)碼 - 1) *每頁(yè)顯示的條數(shù)
分頁(yè)查詢
limit
是MySQL數(shù)據(jù)庫(kù)的方言Oracle分頁(yè)查詢使用
rownumber
SQL Server分頁(yè)查詢使用
top
-
-
去重查詢
- 關(guān)鍵字
select distinct name from student;
-
distinct 只能出現(xiàn)在所有查詢字段的最前方
-
可以使用分組函數(shù)
2 鏈接查詢
- 多表查詢
鏈接方式分類
-
內(nèi)連接:
完全能匹配上這個(gè)條件的數(shù)據(jù)查詢出來(lái)
多個(gè)表之間的關(guān)系的平等的關(guān)系
-
等值鏈接
-- 查詢每個(gè)員工所在部門名稱,顯示員工名和部門名 -- SQL92 :結(jié)構(gòu)不夠清晰, select s.sname,y.yname fromstudent s , yanjiu y where s.sno = y.sno;-- SQL99 :表鏈接的條件是獨(dú)立的,連接之后還可以繼續(xù)添加條件 inner可以省略 select s.sname,y.yname fromstudent s [inner] join yanjiu y ons.sno = y.sno;
-
非等值鏈接
條件不是等量關(guān)系
-- 工資介于salgrade中的最低和最高之間 用到兩個(gè)表 select e.ename,e.sal,s.grade fromemp e joinsalgrade s one.sal between s.losal and s.hisal
-
自鏈接:一個(gè)表寫成兩個(gè)表
-- 查詢員工的上級(jí)領(lǐng)導(dǎo),要求顯示員工名和對(duì)應(yīng)的領(lǐng)導(dǎo)名 selecta.ename '員工名', b.ename '領(lǐng)導(dǎo)名' from emp a joinemp b on a.mgr = b.empno;
-
-
外連接
多個(gè)表之間有主次的關(guān)系,主表和副表
主表就是要全部查詢出來(lái)的,副表的符合條件才會(huì)查詢出來(lái)
-
左鏈接
-- 左外查詢 左邊的是主表 select s.sname,y.yname fromstudent s left join yanjiu y ons.sno = y.sno;-- 查詢員工的上級(jí)領(lǐng)導(dǎo),要求顯示員工名和對(duì)應(yīng)的領(lǐng)導(dǎo)名 selecta.ename '員工名', b.ename '領(lǐng)導(dǎo)名' from emp a left joinemp b on a.mgr = b.empno;
-
右鏈接
-- 右外查詢 右邊的是主表 outer可以省略 select s.sname,y.yname fromstudent s right [outer] join yanjiu y ons.sno = y.sno;
左右鏈接之間可以相互轉(zhuǎn)換
外連接的查詢結(jié)果條數(shù)一定是 >= 內(nèi)連接的查詢結(jié)果條數(shù)
-
-
全連接
笛卡爾積現(xiàn)象:當(dāng)兩張表進(jìn)行鏈接查詢,沒有任何條件查詢的時(shí)候,最終查詢結(jié)果條數(shù),是兩張表?xiàng)l數(shù)的乘積
==避免笛卡爾積現(xiàn)象:==連接時(shí)加條件,滿足這個(gè)條件的記錄就篩選出來(lái)!
select sname,yname
fromstudent,yanjiu
where student.sno = yanjiu.sno-- 起別名
select s.sname,y.name
fromstudent s,yanjiu y
where s.sno = y.sno-- 減少鏈接次數(shù)
3 子查詢
SELECT語(yǔ)句中嵌套子查詢,被嵌套的SELECT語(yǔ)句為子查詢
where子查詢
-- 找出比最低工資高的員工姓名和工資
SELECT ename, sal
FROMemp
WHEREsal >(SELECT MIN(sal) FROM emp);
from子句中的子查詢
-
from后面的子查詢,可以將子查詢的查詢結(jié)果當(dāng)作一個(gè)臨時(shí)表
-- 找出每個(gè)崗位的平均工資的薪資等級(jí) select t.*,s.grade from (select job,avg(sal) avgsal from emp group by job) as t joinsalgrade s ont.avgsal between s.losal and s.hisal
select后面的子查詢
- 返回的結(jié)果只能有一條數(shù)據(jù),多余一條數(shù)據(jù)就會(huì)報(bào)錯(cuò)
4 union合并查詢結(jié)果集
SELECT name ,age FROM student WHERE name = '張三'
UNION
SELECT name ,age FROM student WHERE name = '小三';
-
效率高,鏈接一次新表,匹配次數(shù)就會(huì)翻倍,union可以減少匹配次數(shù),還可以將結(jié)果集拼接起來(lái)
-
union在進(jìn)行結(jié)果集的合并時(shí),要求兩個(gè)結(jié)果集的列數(shù)相同
5 limit 查詢
- 將查詢結(jié)果集的一部分取出來(lái),使用在分頁(yè)查詢中
使用方法:
- 完整寫法: LIMIT :startIndex(從0開始) ,length(長(zhǎng)度)
SELECT ename, sal
FROMemp
ORDER BYsal desc
LIMIT5 ; -- 取前五條SELECT ename, sal
FROMemp
ORDER BYsal desc
LIMIT1,5 ; -- 前六:1-6
通用分頁(yè)
每頁(yè)顯示 6頁(yè)條記錄
第1頁(yè):limit 0,6 【0、1、2、3、4、5】
第2頁(yè):limit 6,6 【6 7 8 9 10 11】
第3頁(yè):limit 12,6
第n頁(yè):limit (n-1) * 6,6
開始的index = pageSize * ( n - 1)
limit (pageNO - 1) * pageSize , pageSize
2.2 DDL
- 對(duì)表的結(jié)構(gòu)進(jìn)行操作
2.2.1 create:表的創(chuàng)建
-
語(yǔ)法:
CREATE TABLE 表名 ( 字段名1 數(shù)據(jù)類型, 字段名1 數(shù)據(jù)類型, 字段名1 數(shù)據(jù)類型, 字段名n 數(shù)據(jù)類型 );
表名規(guī)范:
以 t_table1 或者 tbl_ 開始 -- 可讀性高
創(chuàng)建表實(shí)列:
-- 建立學(xué)生表 CREATE TABLE t_student (sno int(10),name varchar(22),age int(3),sex char(5),email varchar(255) );-- 建立學(xué)生表,指定默認(rèn)值 CREATE TABLE t_student (sno int(10),name varchar(22),age int(3) default '女',sex char(5),email varchar(255) );
2. 數(shù)據(jù)類型
- 數(shù)據(jù)類型就是屬性 ,有一些常用的,例如:整數(shù)數(shù)據(jù) ,字符數(shù)據(jù),日期數(shù)據(jù),貨幣數(shù)據(jù)等
數(shù)字類型
數(shù)據(jù)類型 | 范圍 | 占用的字節(jié) |
---|---|---|
bigint | -263 ~263 -1 | 8字節(jié) |
int | -231~231-1 | 4字節(jié) (11字符) |
smallint | - 215 ~ 215-1 | 2字節(jié) |
tinyint | 0~255 | 1字節(jié) |
float | -1.79E+308~3.40E+38 | 4或者8字節(jié) |
時(shí)間類型
數(shù)據(jù)類型 | 輸出 |
---|---|
time | 12:35:29.123 (精確度到秒后面三位)時(shí)分秒 |
date | 2007-05-08 (年月日)短日期 |
smalldatetime | 2007-05-08 12:35:00 |
datetime | 2007-05-08 12:35:29.123(精確到后面 就是小數(shù)點(diǎn)后面三位) 長(zhǎng)日期 |
datetime | 2007-05-08 12:35:29.1234567(精確到小數(shù)點(diǎn)后面三七位) |
字符串類型
類型 | 說(shuō)明 |
---|---|
char[(n)] | 固定長(zhǎng)度(255長(zhǎng)度) 。 n用于定義字符串長(zhǎng)度,必須在1~8000之間。 |
varchar[(n|max)] | 可變長(zhǎng)度。n用于定義字符串長(zhǎng)度,可以在1~8000之間。 |
nchar[(n)] | 固定長(zhǎng)度的Unicode字符串?dāng)?shù)據(jù)。n用于定義字符串長(zhǎng)度,必須在1~4000之間。 |
nvarchar | 可變長(zhǎng)度的Unicode字符串?dāng)?shù)據(jù)。n用于定義字符串長(zhǎng)度,必須在1~4000之間。 |
clob | 字符大對(duì)象。最多可以存儲(chǔ)4G的字符串(超過(guò)255個(gè)字符,使用它) |
blob | 二進(jìn)制大對(duì)象。存儲(chǔ)圖片、聲音、視頻等媒體數(shù)據(jù)(插入數(shù)據(jù)時(shí),必須使用IO流) |
2 .2.2 alter:修改表
修改數(shù)據(jù)表:
- 修改表名: ALTER TABLE 表名 RENAME TO 新的表名;
- 修改列名和數(shù)據(jù)類型: ALTER TABLE 表名 CHANGE 列名 新列名 新數(shù)據(jù)類型;
- 添加一列: ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型;
- 刪除列 : ALTER TABLE 表名 DROP 列名
- 修改數(shù)據(jù)類型: ALTER TABLE 表名 MODIFY 列名 新數(shù)據(jù)類型;
2.2.3 drop:刪除表
語(yǔ)法:
DROP TABLE 表名
DROP TABLE IF EXISTS 表名 -- 存在就刪除
快速刪除表
-
語(yǔ)法
truncate table 表名;
- 特點(diǎn):物理刪除,刪除效率高,不可以恢復(fù)
- 刪除數(shù)據(jù),表結(jié)構(gòu)保留
- 不能刪除單條數(shù)據(jù)
刪除數(shù)據(jù)表:
- 刪除表:DROP TABLE 數(shù)據(jù)表名;
- drop 表TABLE if exists 表名;
2.3DML
- 對(duì)表中的數(shù)據(jù)進(jìn)行修改
2.3.1插入 insert
-
語(yǔ)法
insert into 表名(字段名1,字段名2,字段名3,...) values(值1,值2,值3,...)
- 字段名和值要一一對(duì)應(yīng):數(shù)量對(duì)應(yīng),數(shù)據(jù)類型要對(duì)應(yīng)。
插入實(shí)列:
insert into t_student(sno,name,age,sex,eamil) values(1,'張三',15,'女','1234567@qq.com') -- 按照順序insert into t_student(name,sno,age,sex,eamil) values('張三',1,15,'女','1234567@qq.com') -- 字段順序可以調(diào)整,但是字段名和值一定要對(duì)應(yīng)insert into t_student(sno,name) values('張4',2) -- 只要某些字段,插入數(shù)據(jù)后其他的字段就會(huì)是nullinsert into t_student() values(1,'李4',12,'女','123456744@qq.com') -- 省略字段名,就必須寫上所有的字段名
-
插入多條記錄
INSERT INTO 表名 (列名1,列名2.…) VALUES (值1,值2...), (值1,值2...), (值1,值2…);
-
insert插入日期
格式化:format()
-
將查詢結(jié)果插入到一張表中( 少 用 )
insert into 表名 select * from 表名 ;select * into 新表名 from 表名;
2.3.2修改 Update
-
語(yǔ)法格式
update表名 set字段名1 = 值1,字段名2 = 值2,字段名3 = 值3,字段名n = 值n where條件;
- 沒有條件將會(huì)將整個(gè)表更改
2.3.3刪除 delete
- 表中的數(shù)據(jù)被刪除了,但是數(shù)據(jù)在硬盤上的真實(shí)存儲(chǔ)空間不會(huì)被釋放
- 刪除效率低,可回滾
-
語(yǔ)法格式
delete from表名 where條件
- 沒有條件將會(huì)把整個(gè)表內(nèi)的數(shù)據(jù)進(jìn)行刪除
-
刪除大表(刪除表中的全部數(shù)據(jù))
2.4 表
2.4.1 表結(jié)構(gòu)的增刪改查
- 一旦設(shè)計(jì)好表,就很少會(huì)對(duì)表進(jìn)行修改
- 修改成本高,就要對(duì)java代碼進(jìn)行修改
- 使用工具(navicat)修改
2.4.2約束 (constraint)
- 給字段添加約束,保證表中數(shù)據(jù)的完整性,有效性!!!
- 保證表中的數(shù)據(jù)有效
- 列約束:直接在列后面添加約束
- 表級(jí)約束:約束沒有添加在列的后面
- 非空約束:not null
- 唯一約束:unique
- 主鍵約束:primary ley(PK)
- 外鍵約束:foreign key(FK)
- 級(jí)聯(lián)更新
- 檢查約束:check(mysql不支持)
1 非空約束 (not null)
-
約束的字段不嫩改為null
CREATE TABLE t_student (sno int(10) not null,name varchar(22) not null,age int(3),sex char(5),email varchar(255) );
2 唯一性約束 (unique)
-
可以為null ,但是不可以重復(fù)
drop table if exists t_student CREATE TABLE t_student (sno int(10) unique, -- 列級(jí)約束name varchar(22),age int(3),sex char(5),email varchar(255) );insert into t_student() values(1,'李4',12,'女','123456744@qq.com') insert into t_student() values(2,'李4',12,'女','123456744@qq.com') -- 在插入數(shù)據(jù)的時(shí)候,sno的值,則不能重復(fù)
-
多個(gè)字段字段聯(lián)合起來(lái)具有唯一性
CREATE TABLE t_student (sno int(10),name varchar(22),unique(sno,name) -- sno ,name 聯(lián)合起來(lái)唯一。表 ); insert into t_student() values(1,'李4',12,'女','123456744@qq.com') insert into t_student() values(2,'李武',12,'女','123456744@qq.com') -- 分開的sno,name可以重復(fù),但是(sno,name) 聯(lián)合起來(lái)就不可以重復(fù)
-
not null 和unique聯(lián)合使用
CREATE TABLE t_student (sno int(10) not null unique, -- sno變成主鍵name varchar(22) );
3 主鍵約束 (primary key :PK)
-
主鍵約束:一個(gè)表只能有一個(gè)主鍵
-
主鍵字段:字段添加主鍵約束
-
主鍵值:每一行記錄的唯一標(biāo)識(shí)。
- 建議使用:int 、bigint、char等類型
- 不建議使用:varchar來(lái)做主鍵,主鍵值定長(zhǎng)的。
-
特征
- not null + unique (主鍵值不能為空,不能重復(fù))
-
任何每一張表都要有主鍵,沒有就是非法的
drop table if exists t_student CREATE TABLE t_student (sno int primary key , name varchar(22) );-- 表級(jí)約束添加主鍵約束 drop table if exists t_student CREATE TABLE t_student (sno int , name varchar(22),primary key(sno) );-- 一個(gè)字段做主鍵:單一主鍵-- 多個(gè)字段做主鍵:復(fù)合主鍵 (不要使用) drop table if exists t_student CREATE TABLE t_student (sno int , name varchar(22),primary key(sno,name) );
-
自然主鍵:自然數(shù)(使用多)
-
業(yè)務(wù)主鍵:主鍵值與業(yè)務(wù)緊密關(guān)聯(lián)。(使用少,業(yè)務(wù)變動(dòng)會(huì)影響到業(yè)務(wù)會(huì)改變)
-- 自動(dòng)維護(hù)主鍵值 drop table if exists t_student CREATE TABLE t_student (sno int primary key auto_increment, -- 使sno自增:auto_incrementname varchar(22) );
4 外鍵約束(foreign key :FK)
-
術(shù)語(yǔ):
- 外鍵約束:
- 外鍵字段:字段添加上外鍵約束
- 外鍵值:外鍵字段中的每一個(gè)值。可以為null
-
父表:被引用的表
-
子表:引用的表
順序: (理解,不要死記)
- 刪除表:
- 先刪除子表,再刪除父表
- 創(chuàng)建表
- 先創(chuàng)建父表,再創(chuàng)建子表
- 刪除數(shù)據(jù)
- 先刪除子數(shù)據(jù),再刪除父數(shù)據(jù)
- 插入數(shù)據(jù)
- 先插入父,再插入子
CREATE TABLE t_calss -- 父表
(classno int primary key , -- 使sno自增:auto_incrementclassname varchar(22)
);CREATE TABLE t_student -- 子表
(sno int primary key auto_increment, name varchar(22),classcno int foreign key(classno) references t_class(classno)
);
2.5 數(shù)據(jù)處理函數(shù)
- 又稱為:單行處理處理函數(shù)
2.2.1 單行處理函數(shù)
- 一個(gè)輸入,對(duì)應(yīng)一個(gè)輸出
函數(shù)名 | 說(shuō)明 |
---|---|
lower | 大寫變成小寫 |
upper | 小寫變成大學(xué) |
substr | 取子串(被截取的字符串,起始下標(biāo),截取的長(zhǎng)度) |
length | 取長(zhǎng)度 |
trim | 去前后空格 |
str_to_date | 將字符串轉(zhuǎn)換成日期 |
date_fromat | 格式化日期 |
round | 四舍五入 |
rand | 生成隨機(jī)數(shù) |
ifnull | 將null轉(zhuǎn)換成一個(gè)具體值 |
SELECT loser(name),age FROM student -- name 內(nèi)容變成小寫SELECT round(123456.123,0) FROM studnet ; -- round(參數(shù)1,參數(shù)2) 參數(shù)1:要四舍五入的數(shù);參數(shù)2:保留多少位小數(shù)
2.2.2 多行處理函數(shù)
- 多個(gè)輸入,對(duì)應(yīng)一個(gè)輸出
分組函數(shù) / 聚合函數(shù) / 多行處理函數(shù) 在上面的分組查詢中查看 這里的內(nèi)容
3 存儲(chǔ)引擎
(了解)
-
表存儲(chǔ) / 組織
-
建表時(shí):指定存儲(chǔ)引擎
engine -- 指定存儲(chǔ)引擎 CHARSET -- 指定表的字符編碼
-
MySQL支持的搜索引擎
show engines \G -- 顯示目前數(shù)據(jù)庫(kù)版本支持的數(shù)據(jù)庫(kù)引擎
- MyISAM
- MyISAM的表具有以下的特征:
- 格式文件一存儲(chǔ)表結(jié)構(gòu)的定義(mytable.frm)
- 數(shù)據(jù)文件―存儲(chǔ)表行的內(nèi)容(mytable.MYD )
- 索引文件–存儲(chǔ)表上索引(mytable.MYI):索引是一本書的目錄,縮小掃描范圍,提高效率
- MyISAM的表具有以下的特征:
- InnoDB:
- MySQL默認(rèn)存儲(chǔ)引擎,重量級(jí)引擎
- 支持事務(wù),保證數(shù)據(jù)庫(kù)的安全,支持事務(wù)回滾
- 服務(wù)器崩潰了,支持自動(dòng)恢復(fù)
- 表和索引存儲(chǔ)在一個(gè)表空間內(nèi)
- MEMORY:
- 數(shù)據(jù)存儲(chǔ)在內(nèi)存當(dāng)中,斷電就沒有
- 表數(shù)據(jù)及索引被存儲(chǔ)在內(nèi)存中,查詢快,效率高,不需要與硬盤交互。
- MyISAM
4 事務(wù)
transaction
- 事務(wù):完整的業(yè)務(wù)邏輯。
事務(wù)的DML語(yǔ)句
insert
update
delete
-
數(shù)據(jù)的增刪改查要考慮安全
-
多條DML語(yǔ)句共同來(lái)聯(lián)合完成
-
多條語(yǔ)句同時(shí)成功,或者同時(shí)失敗!
4.1 實(shí)現(xiàn)事務(wù)
4.1.1 提交事務(wù) (commit)
- 清空事務(wù)性活動(dòng)的日志文件,將數(shù)據(jù)全部徹底持久化到數(shù)據(jù)庫(kù)表中
- 提交事務(wù)標(biāo)志著,事務(wù)的結(jié)束。全部成功的結(jié)束。
mysql 默認(rèn)情況下是自動(dòng)提交事務(wù)
- 自動(dòng)提交不符合我們開發(fā)的業(yè)務(wù),必須多條同時(shí)執(zhí)行成功才進(jìn)行提交業(yè)務(wù)。
-- 關(guān)系自動(dòng)提交機(jī)制,先執(zhí)行
start transaction
4.1.2 回滾事務(wù) (rollback)
- 將之前所有的DML 操作全部撤銷,并且清空事務(wù)性活動(dòng)的日志文件
- 回滾事務(wù)標(biāo)志著,事務(wù)的結(jié)束。全部失敗的結(jié)束。
-- 在經(jīng)過(guò)一系列的增刪改查之后
rollback ;
回滾到上一次的提交
4.2 事務(wù)的特性
-
A :原子性
說(shuō)明事務(wù)是最小的工作單元,不可以再分。
-
C :一致性
所有的事務(wù)要求:在同一個(gè)事務(wù)當(dāng)中,所有操作必須同時(shí)進(jìn)行,或者同時(shí)失敗,保證數(shù)據(jù)的一致性。
-
I :隔離性
A事務(wù)和B事務(wù)之間具有一定的隔離。
A和B事務(wù)同時(shí)操作同一個(gè)表,結(jié)果會(huì)怎么樣?
-
D:持久性
事務(wù)最終結(jié)束的一個(gè)屏障。事務(wù)提交,將沒有保存到硬盤上的數(shù)據(jù)保存到硬盤上。
4.2.1 事務(wù)的隔離性
1 事務(wù)的隔離級(jí)別
-
讀未提交:read uncommitted (最低的隔離級(jí)別) 《提交之前就可以讀到》
- 事務(wù)A可以讀取到事務(wù)B未提交的數(shù)據(jù)
- 臟讀現(xiàn)象 (Dirty read)
- 理論情況下
-
讀已提交:read committed 《提交之后才能讀到》
- 事務(wù)A只能讀取到事務(wù)B提交之后的數(shù)據(jù)
- 解決了臟讀現(xiàn)象
- 不可重復(fù)讀取數(shù)據(jù)
- 每一次讀取到的數(shù)據(jù)是真實(shí)數(shù)據(jù)
-
可重復(fù)讀:repeatable read 《提交之后也讀不到 :讀取到開啟事務(wù)時(shí)的數(shù)據(jù)。事務(wù)不結(jié)束數(shù)據(jù)就不會(huì)改變》
- 事務(wù)A開啟之后,每一次在事務(wù)A中讀取到的數(shù)據(jù)都是一致的。即使事務(wù)B修改數(shù)據(jù),事務(wù)A中讀取到的數(shù)據(jù)依然沒有改變。
- 解決了不可以重復(fù)讀問(wèn)題
- 出現(xiàn)幻影讀:讀取的數(shù)據(jù)都是幻想
-
序列化 / 串行化:serializable (最高的隔離級(jí)別)
-
效率最高,解決所有問(wèn)題
-
事務(wù)要進(jìn)行排隊(duì),不能并發(fā)!!
-
- 查看事務(wù)隔離級(jí)別:
select @@tx_isolation
- 設(shè)置全局隔離級(jí)別
set global transaction isolation level read uncommitted -- 讀wei
5 索引
- 索引是在數(shù)據(jù)表字段上添加的,提高查詢效率
- 一個(gè)字段可以添加一個(gè)索引,多個(gè)字段聯(lián)合起來(lái)也可以添加索引
添加索引條件:
- 數(shù)據(jù)量龐大
- 以條件查詢的形式存在
- 很少的DML(insert 、update、delete)操作
5.1創(chuàng)建索引
- 創(chuàng)建索引語(yǔ)法:
create index 索引名 on 表名(字段);
- 刪除索引
drop index 索引名 on emp;
底層原理:二叉樹(B-tree)
-
查看索引
explain select * from 表 where 條件
5.2索引失效
- 模糊查詢盡量避免以“%” 開始,則會(huì)開始進(jìn)行索引查詢,否則不會(huì)進(jìn)行索引查詢。索引查詢時(shí)必須知道第一個(gè)字母是什么
- 使用 or 的情況失效,or兩邊字段同時(shí)有索引才會(huì)走索引。
- 復(fù)合索引,沒有使用左側(cè)的列查找
- where當(dāng)中索引列參加了運(yùn)算
- 在where當(dāng)中索引列使用了函數(shù)
5.3 索引的分類
- 單一索引 :單個(gè)字段添加索引
- 復(fù)合索引 :兩個(gè)或多個(gè)字段添加索引
- 主鍵索引 :主鍵上添加索引
- 唯一性索引 :具有unique 約束的字段上添加索引 (唯一性較弱的字段上索引用處不大)
union 不會(huì)使用索引失效
6 視圖
view
- 不同角度看同一份數(shù)據(jù)
6.1 創(chuàng)建視圖
create view 視圖名 as select * from 表名
- 室友DQL語(yǔ)句才能以view的形式創(chuàng)建
6.2 刪除視圖
drop view 視圖名
6.3 視圖的CRUD
- 視圖的操作會(huì)影響到原表的操作。
- 視圖是一張臨時(shí)表
7 DBA命令
7.1 新建用戶
CREATE USER username IDENTIFIED BY 'password';
- username:你將創(chuàng)建的用戶名,
- password:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務(wù)器.
7.2 授權(quán)
grant all privileges on dbname.tbname to 'username'@'login ip' identified by 'password' with grant option;
- dbname=*表示所有數(shù)據(jù)庫(kù)
- tbname=*表示所有表
- login ip=%表示任何ip
- password為空,表示丌需要密碼即可登錄
- with grant option; 表示該用戶還可以授權(quán)給其他用戶
用戶權(quán)限表
權(quán)限名 | 權(quán)限描述 |
---|---|
alter | 修改數(shù)據(jù)庫(kù)的表 |
create | 創(chuàng)建新的數(shù)據(jù)庫(kù)戒表 |
delete | 刪除表數(shù)據(jù) |
drop | 刪除數(shù)據(jù)庫(kù)/表 |
index | 創(chuàng)建/刪除索引 |
insert | 添加表數(shù)據(jù) |
select | 查詢表數(shù)據(jù) |
update | 更新表數(shù)據(jù) |
all | 允許任何操作 |
usage | 只允許登錄 |
7.2.1 回收授權(quán)
revoke privileges on dbname[.tbname] from username;
刷新權(quán)限:
flush privileges;
7.3 數(shù)據(jù)的導(dǎo)入導(dǎo)出
7.3.1數(shù)據(jù)的導(dǎo)出
-
在dos命令窗口進(jìn)行
導(dǎo)出指定數(shù)據(jù)庫(kù)
C:\Users\25849>mysqldump bookshop>D:\bookshop.sql -uroot -p123456
-
導(dǎo)出指定表
C:\Users\25849>mysqldump bookshop emp> D:\ bookshop_emp.sql -uroot -p123456
7.3.2數(shù)據(jù)的導(dǎo)入
C:\Users\25849>mysql -uroot -p123456
mysql>create database bookshop;
mysql>use bookshop;
mysql>source D:\bookshop.sql
8 數(shù)據(jù)庫(kù)設(shè)計(jì)的三規(guī)范
數(shù)據(jù)表的設(shè)計(jì)依據(jù),對(duì)數(shù)據(jù)庫(kù)表的設(shè)計(jì)
-
第一范式(1NF):要求任何一張表必須要有主鍵,每一個(gè)字段為原子性,字段不可以再分。
-
第二范式(2NF):建立在第一范式基礎(chǔ)上,要求所有非主鍵字段完全依賴于主鍵,不存在部份依賴
-
第三范式(3NF):建立在第二范式基礎(chǔ)上,要求所有非主鍵字段直接依賴于主鍵,不存在傳遞依賴
-
減少數(shù)據(jù)表的冗余
9 SQL高級(jí)應(yīng)用
8.1 T-SQL程序設(shè)計(jì)
8.1.1 變量
-
全局變量
@@ -- @@開頭的變量
- 系統(tǒng)定于和維護(hù),用戶無(wú)法進(jìn)行修改或管理
-
局部變量
declare @i int -- 使用關(guān)鍵declare 聲明變量 i,數(shù)據(jù)類型為:int
-
局部變量賦值
-- 使用 set 或 select set @i = 123 select @i = 1
-
8.1.2 流程控制語(yǔ)句
1 if 語(yǔ)句
# 類似 java 中的 if ··· else if ··· else
if <條件表達(dá)式><命令行或程序塊>
else <命令行或程序塊>
2 begin ··· end語(yǔ)句
BEGIN<命令行或程序塊>
END
3 IF [NOT] EXISTS 語(yǔ)句
IF [NOT] EXISTS(select 子查詢)<命令行或程序塊>
else <命令行或程序塊>
4 CASE 語(yǔ)句
格式一:
CASE <表達(dá)式>WHEN <表達(dá)式> THEN <表達(dá)式>···WHEN <表達(dá)式> THEN <表達(dá)式>[ELSE <表達(dá)式>]
END
格式二:
CASE <表達(dá)式>WHEN <表達(dá)式> THEN <表達(dá)式>···WHEN <表達(dá)式> THEN <表達(dá)式>[ELSE <表達(dá)式>]
END
SELECT SNo,CNo,Score = CASEWHEN Score is null THEN '未考'WHEN Score < 60 THEN '不及格'WHEN Score >= 60 AND Score <= 90 THEN '良好'WHEN Score >= 90 THEN '優(yōu)秀'END
FROM SC
5 WHILE 語(yǔ)句
WHILE (條件)<命令行或程序塊>
8.2存儲(chǔ)過(guò)程
8.2.1 存儲(chǔ)過(guò)程 的有點(diǎn)
- 模塊化的程序設(shè)計(jì)
- 高效率的執(zhí)行
- 較少網(wǎng)絡(luò)流量
- 可以作為安全機(jī)制使用
8.2.2 存儲(chǔ)過(guò)程的分類
- 系統(tǒng)存儲(chǔ)的過(guò)程
- 用戶自定義存儲(chǔ)過(guò)程
- 擴(kuò)展存儲(chǔ)過(guò)程
8.2.3 創(chuàng)建存儲(chǔ)過(guò)程
DROP TABLE IF EXISTS t_student;CREATE TABLE t_student
(id INT(11) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL,age INT(11) NOT NULL
);INSERT INTO t_student VALUES(NULL,'懿',22),(NULL,'小懿',18);
8.3觸發(fā)器
8.3.1 分類
- DML 觸發(fā)器
- DDL 觸發(fā)器
8.3.2 創(chuàng)建DML觸發(fā)器
格式:
CREATE TRIGGER 觸發(fā)器名稱
ON { table | view }
{ FOR | AFTER | INSTEAD OF }
{ [INSERT] | [UPDATE] | [DELETE] }
AS
SQL語(yǔ)句[,...n]
例子:修改student 表數(shù)據(jù),修改之后查詢修改后的數(shù)據(jù)。
--創(chuàng)建修改之后的觸發(fā)器
CREATE TRIGGER trig_student_After
ON student
FOR UPDATE
AS PRINT 'THE TRIGGER IS AFTER'SELECT * FROM student
- FOR 和AFTER 作用一樣
8.3.3 創(chuàng)建DDL觸發(fā)器
CREATE TRIGGER 觸發(fā)器名稱ON { ALL SERVER | DATABASE }
{ FOR | AFTER }
{ 事件類型|事件組}[,...n]
AS
SQL語(yǔ)句[,...n]
例子:插入數(shù)據(jù)庫(kù)后輸入 ‘創(chuàng)建數(shù)據(jù)庫(kù)’
CREATE TRIGGER trig_create
ON ALL SERVERAFTER CREATE_DATABASE
ASPRINT '創(chuàng)建數(shù)據(jù)庫(kù)'