作者:Shocker
鏈接:https://shockerli.net/post/1000-line-mysql-note/
Windows服務
-- 啟動MySQL
netstartmysql
-- 創(chuàng)建Windows服務
sccreatemysql binPath= mysqld_bin_path(注意:等號與值之間有空格)
連接與斷開服務器
mysql -h 地址 -P 端口 -u 用戶名 -p 密碼
SHOWPROCESSLIST-- 顯示哪些線程正在運行
SHOWVARIABLES-- 顯示系統(tǒng)變量信息
數(shù)據(jù)庫操作
-- 查看當前數(shù)據(jù)庫
SELECTDATABASE();
-- 顯示當前時間、用戶名裸违、數(shù)據(jù)庫版本
SELECTnow(),user(),version();
-- 創(chuàng)建庫
CREATEDATABASE[IFNOTEXISTS] 數(shù)據(jù)庫名 數(shù)據(jù)庫選項
數(shù)據(jù)庫選項:
CHARACTERSETcharset_name
COLLATEcollation_name
-- 查看已有庫
SHOWDATABASES[LIKE'PATTERN']
-- 查看當前庫信息
SHOWCREATEDATABASE數(shù)據(jù)庫名
-- 修改庫的選項信息
ALTERDATABASE庫名 選項信息
-- 刪除庫
DROPDATABASE[IFEXISTS] 數(shù)據(jù)庫名
同時刪除該數(shù)據(jù)庫相關的目錄及其目錄內(nèi)容
表的操作
-- 創(chuàng)建表
CREATE[TEMPORARY]TABLE[IFNOTEXISTS] [庫名.]表名 ( 表的結構定義 )[ 表選項]
每個字段必須有數(shù)據(jù)類型
最后一個字段后不能有逗號
TEMPORARY臨時表掖桦,會話結束時表自動消失
對于字段的定義:
字段名 數(shù)據(jù)類型 [NOTNULL|NULL] [DEFAULTdefault_value] [AUTO_INCREMENT] [UNIQUE[KEY] | [PRIMARY]KEY] [COMMENT'string']
-- 表選項
-- 字符集
CHARSET= charset_name
如果表沒有設定,則使用數(shù)據(jù)庫字符集
-- 存儲引擎
ENGINE= engine_name
表在管理數(shù)據(jù)時采用的不同的數(shù)據(jù)結構供汛,結構不同會導致處理方式枪汪、提供的特性操作等不同
常見的引擎:InnoDBMyISAM Memory/Heap BDBMergeExample CSV MaxDB Archive
不同的引擎在保存表的結構和數(shù)據(jù)時采用不同的方式
MyISAM表文件含義:.frm表定義,.MYD表數(shù)據(jù)怔昨,.MYI表索引
InnoDB表文件含義:.frm表定義雀久,表空間數(shù)據(jù)和日志文件
SHOWENGINES-- 顯示存儲引擎的狀態(tài)信息
SHOWENGINE引擎名 {LOGS|STATUS}-- 顯示存儲引擎的日志或狀態(tài)信息
-- 自增起始數(shù)
AUTO_INCREMENT = 行數(shù)
-- 數(shù)據(jù)文件目錄
DATADIRECTORY ='目錄'
-- 索引文件目錄
INDEXDIRECTORY ='目錄'
-- 表注釋
COMMENT ='string'
-- 分區(qū)選項
PARTITIONBY... (詳細見手冊)
-- 查看所有表
SHOWTABLES[LIKE'pattern']
SHOWTABLESFROM表名
-- 查看表機構
SHOWCREATETABLE表名 (信息更詳細)
DESC表名 /DESCRIBE表名 /EXPLAIN表名 /SHOWCOLUMNSFROM表名 [LIKE'PATTERN']
SHOWTABLESTATUS[FROMdb_name] [LIKE'pattern']
-- 修改表
-- 修改表本身的選項
ALTERTABLE表名 表的選項
eg:ALTERTABLE表名ENGINE=MYISAM;
-- 對表進行重命名
RENAMETABLE原表名TO新表名
RENAMETABLE原表名TO庫名.表名 (可將表移動到另一個數(shù)據(jù)庫)
-- RENAME可以交換兩個表名
-- 修改表的字段機構(13.1.2. ALTER TABLE語法)
ALTERTABLE表名 操作名
-- 操作名
ADD[COLUMN] 字段定義-- 增加字段
AFTER字段名-- 表示增加在該字段名后面
FIRST-- 表示增加在第一個
ADDPRIMARYKEY(字段名)-- 創(chuàng)建主鍵
ADDUNIQUE[索引名] (字段名)-- 創(chuàng)建唯一索引
ADDINDEX[索引名] (字段名)-- 創(chuàng)建普通索引
DROP[COLUMN] 字段名-- 刪除字段
MODIFY[COLUMN] 字段名 字段屬性-- 支持對字段屬性進行修改,不能修改字段名(所有原有屬性也需寫上)
CHANGE[COLUMN] 原字段名 新字段名 字段屬性-- 支持對字段名修改
DROPPRIMARYKEY-- 刪除主鍵(刪除主鍵前需刪除其AUTO_INCREMENT屬性)
DROPINDEX索引名-- 刪除索引
DROPFOREIGNKEY外鍵-- 刪除外鍵
-- 刪除表
DROPTABLE[IFEXISTS] 表名 ...
-- 清空表數(shù)據(jù)
TRUNCATE[TABLE] 表名
-- 復制表結構
CREATETABLE表名LIKE要復制的表名
-- 復制表結構和數(shù)據(jù)
CREATETABLE表名 [AS]SELECT*FROM要復制的表名
-- 檢查表是否有錯誤
CHECKTABLEtbl_name [, tbl_name] ... [option] ...
-- 優(yōu)化表
OPTIMIZE[LOCAL|NO_WRITE_TO_BINLOG]TABLEtbl_name [, tbl_name] ...
-- 修復表
REPAIR[LOCAL|NO_WRITE_TO_BINLOG]TABLEtbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
-- 分析表
ANALYZE[LOCAL|NO_WRITE_TO_BINLOG]TABLEtbl_name [, tbl_name] ...
數(shù)據(jù)操作
-- 增
INSERT[INTO] 表名 [(字段列表)]VALUES(值列表)[, (值列表), ...]
-- 如果要插入的值列表包含所有字段并且順序一致趁舀,則可以省略字段列表岸啡。
-- 可同時插入多條數(shù)據(jù)記錄!
REPLACE與INSERT完全一樣赫编,可互換巡蘸。
INSERT[INTO] 表名SET字段名=值[, 字段名=值, ...]
-- 查
SELECT字段列表FROM表名[ 其他子句]
-- 可來自多個表的多個字段
-- 其他子句可以不使用
-- 字段列表可以用*代替,表示所有字段
-- 刪
DELETEFROM表名[ 刪除條件子句]
沒有條件子句擂送,則會刪除全部
-- 改
UPDATE表名SET字段名=新值[, 字段名=新值] [更新條件]
字符集編碼
-- MySQL悦荒、數(shù)據(jù)庫、表嘹吨、字段均可設置編碼
-- 數(shù)據(jù)編碼與客戶端編碼不需一致
SHOWVARIABLESLIKE'character_set_%'-- 查看所有字符集編碼項
character_set_client ? ? ? ?客戶端向服務器發(fā)送數(shù)據(jù)時使用的編碼
character_set_results ? ? ? 服務器端將結果返回給客戶端所使用的編碼
character_set_connection ? ?連接層編碼
SET變量名 = 變量值
SETcharacter_set_client = gbk;
SETcharacter_set_results = gbk;
SETcharacter_set_connection = gbk;
SETNAMESGBK;-- 相當于完成以上三個設置
-- 校對集
校對集用以排序
SHOWCHARACTERSET[LIKE'pattern']/SHOWCHARSET[LIKE'pattern'] ? 查看所有字符集
SHOWCOLLATION[LIKE'pattern'] ? ? 查看所有校對集
CHARSET字符集編碼 ? ? 設置字符集編碼
COLLATE校對集編碼 ? ? 設置校對集編碼
數(shù)據(jù)類型(列類型)
1. 數(shù)值類型
-- a. 整型 ----------
類型 ? ? ? ? 字節(jié) ? ? 范圍(有符號位)
tinyint ? ? 1字節(jié) ? ?-128 ~ 127 ? ? ?無符號位:0 ~ 255
smallint ? ?2字節(jié) ? ?-32768 ~ 32767
mediumint ? 3字節(jié) ? ?-8388608 ~ 8388607
int ? ? ? ? 4字節(jié)
bigint ? ? ?8字節(jié)
int(M) ?M表示總位數(shù)
- 默認存在符號位搬味,unsigned 屬性修改
- 顯示寬度,如果某個數(shù)不夠定義字段時設置的位數(shù)蟀拷,則前面以0補填碰纬,zerofill 屬性修改
例:int(5) ? 插入一個數(shù)'123',補填后為'00123'
- 在滿足要求的情況下问芬,越小越好悦析。
- 1表示bool值真,0表示bool值假此衅。MySQL沒有布爾類型强戴,通過整型0和1表示。常用tinyint(1)表示布爾型挡鞍。
-- b. 浮點型 ----------
類型 ? ? ? ? ? ? 字節(jié) ? ? 范圍
float(單精度) ? ? 4字節(jié)
double(雙精度) ? ?8字節(jié)
浮點型既支持符號位 unsigned 屬性骑歹,也支持顯示寬度 zerofill 屬性。
不同于整型墨微,前后均會補填0.
定義浮點型時道媚,需指定總位數(shù)和小數(shù)位數(shù)。
float(M, D) ? ? double(M, D)
M表示總位數(shù),D表示小數(shù)位數(shù)最域。
M和D的大小會決定浮點數(shù)的范圍谴分。不同于整型的固定范圍。
M既表示總位數(shù)(不包括小數(shù)點和正負號)羡宙,也表示顯示寬度(所有顯示符號均包括)狸剃。
支持科學計數(shù)法表示掐隐。
浮點數(shù)表示近似值狗热。
-- c. 定點數(shù) ----------
decimal-- 可變長度
decimal(M, D) ? M也表示總位數(shù),D表示小數(shù)位數(shù)虑省。
保存一個精確的數(shù)值匿刮,不會發(fā)生數(shù)據(jù)的改變,不同于浮點數(shù)的四舍五入探颈。
將浮點數(shù)轉換為字符串來保存熟丸,每9位數(shù)字保存為4個字節(jié)。
2. 字符串類型
-- a. char, varchar ----------
char ? ?定長字符串伪节,速度快光羞,但浪費空間
varchar 變長字符串,速度慢怀大,但節(jié)省空間
M表示能存儲的最大長度纱兑,此長度是字符數(shù),非字節(jié)數(shù)化借。
不同的編碼潜慎,所占用的空間不同。
char,最多255個字符蓖康,與編碼無關铐炫。
varchar,最多65535字符,與編碼有關蒜焊。
一條有效記錄最大不能超過65535個字節(jié)倒信。
utf8 最大為21844個字符,gbk 最大為32766個字符泳梆,latin1 最大為65532個字符
varchar 是變長的堤结,需要利用存儲空間保存 varchar 的長度,如果數(shù)據(jù)小于255個字節(jié)鸭丛,則采用一個字節(jié)來保存長度竞穷,反之需要兩個字節(jié)來保存。
varchar 的最大有效長度由最大行大小和使用的字符集確定鳞溉。
最大有效長度是65532字節(jié)瘾带,因為在varchar存字符串時,第一個字節(jié)是空的熟菲,不存在任何數(shù)據(jù)看政,然后還需兩個字節(jié)來存放字符串的長度朴恳,所以有效長度是64432-1-2=65532字節(jié)。
例:若一個表定義為CREATETABLEtb(c1int, c2char(30), c3varchar(N))charset=utf8;問N的最大值是多少允蚣?答:(65535-1-2-4-30*3)/3
-- b. blob, text ----------
blob 二進制字符串(字節(jié)字符串)
tinyblob, blob, mediumblob, longblob
text 非二進制字符串(字符字符串)
tinytext, text, mediumtext, longtext
text 在定義時于颖,不需要定義長度,也不會計算總長度嚷兔。
text 類型在定義時森渐,不可給default值
-- c. binary, varbinary ----------
類似于char和varchar,用于保存二進制字符串冒晰,也就是保存字節(jié)字符串而非字符字符串同衣。
char, varchar, text 對應 binary, varbinary, blob.
3. 日期時間類型
一般用整型保存時間戳,因為PHP可以很方便的將時間戳進行格式化壶运。
datetime ? ?8字節(jié) ? ?日期及時間 ? ? 1000-01-01 00:00:00 到 9999-12-31 23:59:59
date ? ? ? ?3字節(jié) ? ?日期 ? ? ? ? 1000-01-01 到 9999-12-31
timestamp ? 4字節(jié) ? ?時間戳 ? ? ? ?19700101000000 到 2038-01-19 03:14:07
time ? ? ? ?3字節(jié) ? ?時間 ? ? ? ? -838:59:59 到 838:59:59
year ? ? ? ?1字節(jié) ? ?年份 ? ? ? ? 1901 - 2155
datetime ? ?YYYY-MM-DD hh:mm:ss
timestamp ? YY-MM-DD hh:mm:ss
YYYYMMDDhhmmss
YYMMDDhhmmss
YYYYMMDDhhmmss
YYMMDDhhmmss
date ? ? ? ?YYYY-MM-DD
YY-MM-DD
YYYYMMDD
YYMMDD
YYYYMMDD
YYMMDD
time ? ? ? ?hh:mm:ss
hhmmss
hhmmss
year ? ? ? ?YYYY
YY
YYYY
YY
4. 枚舉和集合
-- 枚舉(enum) ----------
enum(val1, val2, val3...)
在已知的值中進行單選耐齐。最大數(shù)量為65535.
枚舉值在保存時,以2個字節(jié)的整型(smallint)保存蒋情。每個枚舉值埠况,按保存的位置順序,從1開始逐一遞增棵癣。
表現(xiàn)為字符串類型辕翰,存儲卻是整型。
NULL值的索引是NULL浙巫。
空字符串錯誤值的索引值是0金蜀。
-- 集合(set) ----------
set(val1, val2, val3...)
createtabletab ( genderset('男','女','無') );
insertintotabvalues('男, 女');
最多可以有64個不同的成員。以bigint存儲的畴,共8個字節(jié)渊抄。采取位運算的形式。
當創(chuàng)建表時丧裁,SET成員值的尾部空格將自動被刪除护桦。
選擇類型
-- PHP角度
1. 功能滿足
2. 存儲空間盡量小,處理效率更高
3. 考慮兼容問題
-- IP存儲 ----------
1. 只需存儲煎娇,可用字符串
2. 如果需計算二庵,查找等,可存儲為4個字節(jié)的無符號int缓呛,即unsigned
1) PHP函數(shù)轉換
ip2long可轉換為整型催享,但會出現(xiàn)攜帶符號問題。需格式化為無符號的整型哟绊。
利用sprintf函數(shù)格式化字符串
sprintf("%u", ip2long('192.168.3.134'));
然后用long2ip將整型轉回IP字符串
2) MySQL函數(shù)轉換(無符號整型因妙,UNSIGNED)
INET_ATON('127.0.0.1') 將IP轉為整型
INET_NTOA(2130706433) 將整型轉為IP
列屬性(列約束)
1. PRIMARY 主鍵
- 能唯一標識記錄的字段,可以作為主鍵。
- 一個表只能有一個主鍵攀涵。
- 主鍵具有唯一性铣耘。
- 聲明字段時,用 primary key 標識以故。
也可以在字段列表之后聲明
例:createtabletab ( idint, stuvarchar(10),primarykey(id));
- 主鍵字段的值不能為null蜗细。
- 主鍵可以由多個字段共同組成。此時需要在字段列表后聲明的方法怒详。
例:createtabletab ( idint, stuvarchar(10), ageint,primarykey(stu, age));
2. UNIQUE 唯一索引(唯一約束)
使得某字段的值也不能重復炉媒。
3. NULL 約束
null不是數(shù)據(jù)類型,是列的一個屬性棘利。
表示當前列是否可以為null橱野,表示什么都沒有朽缴。
null, 允許為空善玫。默認。
not null, 不允許為空密强。
insertintotabvalues(null,'val');
-- 此時表示將第一個字段的值設為null, 取決于該字段是否允許為null
4. DEFAULT 默認值屬性
當前字段的默認值茅郎。
insertintotabvalues(default,'val');-- 此時表示強制使用默認值。
createtabletab ( add_timetimestampdefaultcurrent_timestamp);
-- 表示將當前時間的時間戳設為默認值或渤。
current_date, current_time
5. AUTO_INCREMENT 自動增長約束
自動增長必須為索引(主鍵或unique)
只能存在一個字段為自動增長系冗。
默認為1開始自動增長⌒金校可以通過表屬性 auto_increment = x進行設置掌敬,或altertabletbl auto_increment = x;
6. COMMENT 注釋
例:createtabletab ( idint) comment'注釋內(nèi)容';
7. FOREIGN KEY 外鍵約束
用于限制主表與從表數(shù)據(jù)完整性。
altertablet1addconstraint`t1_t2_fk`foreignkey(t1_id)referencest2(id);
-- 將表t1的t1_id外鍵關聯(lián)到表t2的id字段池磁。
-- 每個外鍵都有一個名字奔害,可以通過 constraint 指定
存在外鍵的表,稱之為從表(子表)地熄,外鍵指向的表华临,稱之為主表(父表)。
作用:保持數(shù)據(jù)一致性端考,完整性雅潭,主要目的是控制存儲在外鍵表(從表)中的數(shù)據(jù)。
MySQL中却特,可以對InnoDB引擎使用外鍵約束:
語法:
foreign key (外鍵字段) references 主表名 (關聯(lián)字段) [主表記錄刪除時的動作] [主表記錄更新時的動作]
此時需要檢測一個從表的外鍵需要約束為主表的已存在的值扶供。外鍵在沒有關聯(lián)的情況下,可以設置為null.前提是該外鍵列裂明,沒有not null椿浓。
可以不指定主表記錄更改或更新時的動作,那么此時主表的操作被拒絕。
如果指定了 onupdate或ondelete:在刪除或更新時轰绵,有如下幾個操作可以選擇:
1.cascade粉寞,級聯(lián)操作。主表數(shù)據(jù)被更新(主鍵值更新)左腔,從表也被更新(外鍵值更新)唧垦。主表記錄被刪除,從表相關記錄也被刪除液样。
2.setnull振亮,設置為null。主表數(shù)據(jù)被更新(主鍵值更新)鞭莽,從表的外鍵被設置為null坊秸。主表記錄被刪除,從表相關記錄外鍵被設置成null澎怒。但注意褒搔,要求該外鍵列,沒有notnull屬性約束喷面。
3.restrict星瘾,拒絕父表刪除和更新。
注意惧辈,外鍵只被InnoDB存儲引擎所支持琳状。其他引擎是不支持的。
建表規(guī)范
-- Normal Format, NF
- 每個表保存一個實體信息
- 每個具有一個ID字段作為主鍵
- ID主鍵 + 原子表
-- 1NF, 第一范式
字段不能再分盒齿,就滿足第一范式念逞。
-- 2NF, 第二范式
滿足第一范式的前提下,不能出現(xiàn)部分依賴边翁。
消除符合主鍵就可以避免部分依賴翎承。增加單列關鍵字。
-- 3NF, 第三范式
滿足第二范式的前提下倒彰,不能出現(xiàn)傳遞依賴审洞。
某個字段依賴于主鍵,而有其他字段依賴于該字段待讳。這就是傳遞依賴芒澜。
將一個實體信息的數(shù)據(jù)放在一個表內(nèi)實現(xiàn)。
SELECT
SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合計函數(shù)] -> HAVING -> ORDER BY -> LIMIT
a. select_expr
-- 可以用 * 表示所有字段创淡。
select * from tb;
-- 可以使用表達式(計算公式痴晦、函數(shù)調用、字段也是個表達式)
select stu, 29+25, now() from tb;
-- 可以為每個列使用別名琳彩。適用于簡化列標識誊酌,避免多個列標識符重復部凑。
- 使用 as 關鍵字,也可省略 as.
select stu+10 as add10 from tb;
b. FROM 子句
用于標識查詢來源碧浊。
-- 可以為表起別名涂邀。使用as關鍵字。
SELECT * FROM tb1 AS tt, tb2 AS bb;
-- from子句后箱锐,可以同時出現(xiàn)多個表比勉。
-- 多個表會橫向疊加到一起,而數(shù)據(jù)會形成一個笛卡爾積驹止。
SELECT * FROM tb1, tb2;
-- 向優(yōu)化符提示如何選擇索引
USE INDEX浩聋、IGNORE INDEX、FORCE INDEX
SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3;
SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;
c. WHERE 子句
-- 從from獲得的數(shù)據(jù)源中進行篩選臊恋。
-- 整型1表示真衣洁,0表示假冠骄。
-- 表達式由運算符和運算數(shù)組成躯喇。
-- 運算數(shù):變量(字段)、值可岂、函數(shù)返回值
-- 運算符:
=, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
is/is not 加上ture/false/unknown岸售,檢驗某個值的真假
<=>與<>功能相同践樱,<=>可用于null比較
d. GROUP BY 子句, 分組子句
GROUP BY 字段/別名 [排序方式]
分組后會進行排序厂画。升序:ASC凸丸,降序:DESC
以下[合計函數(shù)]需配合 GROUP BY 使用:
count 返回不同的非NULL值數(shù)目 ?count(*)、count(字段)
sum 求和
max 求最大值
min 求最小值
avg 求平均值
group_concat 返回帶有來自一個組的連接的非NULL值的字符串結果袱院。組內(nèi)字符串連接屎慢。
e. HAVING 子句,條件子句
與 where 功能忽洛、用法相同腻惠,執(zhí)行時機不同。
where 在開始時執(zhí)行檢測數(shù)據(jù)欲虚,對原數(shù)據(jù)進行過濾集灌。
having 對篩選出的結果再次進行過濾。
having 字段必須是查詢出來的复哆,where 字段必須是數(shù)據(jù)表存在的欣喧。
where 不可以使用字段的別名,having 可以梯找。因為執(zhí)行WHERE代碼時唆阿,可能尚未確定列值。
where 不可以使用合計函數(shù)锈锤。一般需用合計函數(shù)才會用 having
SQL標準要求HAVING必須引用GROUP BY子句中的列或用于合計函數(shù)中的列驯鳖。
f. ORDER BY 子句闲询,排序子句
order by 排序字段/別名 排序方式 [,排序字段/別名 排序方式]...
升序:ASC,降序:DESC
支持多個字段的排序浅辙。
g. LIMIT 子句扭弧,限制結果數(shù)量子句
僅對處理好的結果進行數(shù)量限制。將處理好的結果的看作是一個集合记舆,按照記錄出現(xiàn)的順序寄狼,索引從0開始。
limit 起始位置, 獲取條數(shù)
省略第一個參數(shù)氨淌,表示從索引0開始泊愧。limit 獲取條數(shù)
h. DISTINCT, ALL 選項
distinct 去除重復記錄
默認為 all, 全部記錄
UNION
將多個select查詢的結果組合成一個結果集合。
SELECT...UNION[ALL|DISTINCT]SELECT...
默認DISTINCT方式盛正,即所有返回的行都是唯一的
建議删咱,對每個SELECT查詢加上小括號包裹。
ORDERBY排序時豪筝,需加上LIMIT進行結合痰滋。
需要各select查詢的字段數(shù)量一樣。
每個select查詢的字段列表(數(shù)量续崖、類型)應一致敲街,因為結果中的字段名以第一條select語句為準。
子查詢
- 子查詢需用括號包裹严望。
-- from型
from后要求是一個表多艇,必須給子查詢結果取個別名。
- 簡化每個查詢內(nèi)的條件像吻。
- from型需將結果生成一個臨時表格峻黍,可用以原表的鎖定的釋放。
- 子查詢返回一個表拨匆,表型子查詢姆涩。
select*from(select*fromtbwhereid>0)assubfromwhereid>1;
-- where型
- 子查詢返回一個值,標量子查詢惭每。
- 不需要給子查詢?nèi)e名骨饿。
- where子查詢內(nèi)的表,不能直接用以更新台腥。
select*fromtbwheremoney = (selectmax(money)fromtb);
-- 列子查詢
如果子查詢結果返回的是一列宏赘。
使用 in 或 not in 完成查詢
exists 和 not exists 條件
如果子查詢返回數(shù)據(jù),則返回1或0览爵。常用于判斷條件置鼻。
selectcolumn1fromt1whereexists(select*fromt2);
-- 行子查詢
查詢條件是一個行。
select*fromt1where(id, gender)in(selectid, genderfromt2);
行構造符:(col1, col2, ...) 或 ROW(col1, col2, ...)
行構造符通常用于與對能返回兩個或兩個以上列的子查詢進行比較蜓竹。
-- 特殊運算符
!= all() ? ?相當于 not in
= some() ? ?相當于 in箕母。any 是 some 的別名
!= some() ? 不等同于 not in储藐,不等于其中某一個。
all, some 可以配合其他運算符一起使用嘶是。
連接查詢(join)
將多個表的字段進行連接钙勃,可以指定連接條件。
-- 內(nèi)連接(inner join)
- 默認就是內(nèi)連接聂喇,可省略inner辖源。
- 只有數(shù)據(jù)存在時才能發(fā)送連接。即連接結果不能出現(xiàn)空行希太。
on 表示連接條件克饶。其條件表達式與where類似。也可以省略條件(表示條件永遠為真)
也可用where表示連接條件誊辉。
還有 using, 但需字段名相同矾湃。using(字段名)
-- 交叉連接 cross join
即,沒有條件的內(nèi)連接堕澄。
select*fromtb1crossjointb2;
-- 外連接(outer join)
- 如果數(shù)據(jù)不存在邀跃,也會出現(xiàn)在連接結果中。
-- 左外連接 left join
如果數(shù)據(jù)不存在蛙紫,左表記錄會出現(xiàn)拍屑,而右表為null填充
-- 右外連接 right join
如果數(shù)據(jù)不存在,右表記錄會出現(xiàn)坑傅,而左表為null填充
-- 自然連接(natural join)
自動判斷連接條件完成連接僵驰。
相當于省略了using,會自動查找相同字段名裁蚁。
natural join
natural left join
natural right join
selectinfo.id, info.name, info.stu_num, extra_info.hobby, extra_info.sexfrominfo, extra_infowhereinfo.stu_num = extra_info.stu_id;
導出
select*intooutfile文件地址 [控制格式]from表名;-- 導出表數(shù)據(jù)
loaddata[local]infile文件地址 [replace|ignore]intotable表名 [控制格式];-- 導入數(shù)據(jù)
生成的數(shù)據(jù)默認的分隔符是制表符
local未指定矢渊,則數(shù)據(jù)文件必須在服務器上
replace和ignore關鍵詞控制對現(xiàn)有的唯一鍵記錄的重復的處理
-- 控制格式
fields控制字段格式
默認:fieldsterminatedby' 'enclosedby''escapedby'\'
terminatedby'string'-- 終止
enclosedby'char'-- 包裹
escapedby'char'-- 轉義
-- 示例:
SELECTa,b,a+bINTOOUTFILE'/tmp/result.text'
FIELDSTERMINATEDBY','OPTIONALLYENCLOSEDBY'"'
LINESTERMINATEDBY'
'
FROMtest_table;
lines ? 控制行格式
默認:lines terminated by '
'
terminated by 'string'-- 終止
INSERT
select語句獲得的數(shù)據(jù)可以用insert插入。
可以省略對列的指定枉证,要求values() 括號內(nèi),提供給了按照列順序出現(xiàn)的所有字段的值移必。
或者使用set語法室谚。
INSERTINTOtbl_nameSETfield=value,...;
可以一次性使用多個值崔泵,采用(), (), ();
的形式秒赤。
INSERTINTOtbl_nameVALUES(), (), ();
可以在列值指定時,使用表達式憎瘸。
INSERTINTOtbl_nameVALUES(field_value,10+10,now());
可以使用一個特殊值 DEFAULT入篮,表示該列使用默認值。
INSERTINTOtbl_nameVALUES(field_value,DEFAULT);
可以通過一個查詢的結果幌甘,作為需要插入的值潮售。
INSERTINTOtbl_nameSELECT...;
可以指定在插入的值出現(xiàn)主鍵(或唯一索引)沖突時痊项,更新其他非主鍵列的信息。
INSERTINTOtbl_nameVALUES/SET/SELECTONDUPLICATEKEYUPDATE字段=值, …;
DELETE
DELETEFROMtbl_name [WHEREwhere_definition] [ORDERBY...] [LIMITrow_count]
按照條件刪除酥诽。where
指定刪除的最多記錄數(shù)鞍泉。limit
可以通過排序條件刪除。orderby+limit
支持多表刪除肮帐,使用類似連接語法咖驮。
deletefrom需要刪除數(shù)據(jù)多表1,表2using表連接操作 條件训枢。
TRUNCATE
TRUNCATE[TABLE] tbl_name
清空數(shù)據(jù)
刪除重建表
區(qū)別:
1托修,truncate是刪除表再創(chuàng)建,delete是逐條刪除
2恒界,truncate重置auto_increment的值诀黍。而delete不會
3,truncate不知道刪除了幾條仗处,而delete知道眯勾。
4,當被用于帶分區(qū)的表時婆誓,truncate會保留分區(qū)
備份與還原
備份吃环,將數(shù)據(jù)的結構與表內(nèi)數(shù)據(jù)保存起來。
利用 mysqldump 指令完成洋幻。
-- 導出
mysqldump [options] db_name [tables]
mysqldump [options] ---database DB1 [DB2 DB3...]
mysqldump [options] --all--database
1. 導出一張表
mysqldump -u用戶名 -p密碼 庫名 表名 > 文件名(D:/a.sql)
2. 導出多張表
mysqldump -u用戶名 -p密碼 庫名 表1 表2 表3 > 文件名(D:/a.sql)
3. 導出所有表
mysqldump -u用戶名 -p密碼 庫名 > 文件名(D:/a.sql)
4. 導出一個庫
mysqldump -u用戶名 -p密碼 --lock-all-tables --database 庫名 > 文件名(D:/a.sql)
可以-w攜帶WHERE條件
-- 導入
1. 在登錄mysql的情況下:
source ?備份文件
2. 在不登錄的情況下
mysql -u用戶名 -p密碼 庫名 < 備份文件
視圖
什么是視圖:
視圖是一個虛擬表郁轻,其內(nèi)容由查詢定義。同真實的表一樣文留,視圖包含一系列帶有名稱的列和行數(shù)據(jù)好唯。但是,視圖并不在數(shù)據(jù)庫中以存儲的數(shù)據(jù)值集形式存在燥翅。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表骑篙,并且在引用視圖時動態(tài)生成。
視圖具有表結構文件森书,但不存在數(shù)據(jù)文件靶端。
對其中所引用的基礎表來說,視圖的作用類似于篩選凛膏。定義視圖的篩選可以來自當前或其它數(shù)據(jù)庫的一個或多個表杨名,或者其它視圖。通過視圖進行查詢沒有任何限制猖毫,通過它們進行數(shù)據(jù)修改時的限制也很少台谍。
視圖是存儲在數(shù)據(jù)庫中的查詢的sql語句,它主要出于兩種原因:安全原因吁断,視圖可以隱藏一些數(shù)據(jù)趁蕊,如:社會保險基金表坞生,可以用視圖只顯示姓名,地址介衔,而不顯示社會保險號和工資數(shù)等恨胚,另一原因是可使復雜的查詢易于理解和使用。
-- 創(chuàng)建視圖
CREATE[ORREPLACE] [ALGORITHM = {UNDEFINED |MERGE| TEMPTABLE}]VIEWview_name [(column_list)]ASselect_statement
- 視圖名必須唯一炎咖,同時不能與表重名赃泡。
- 視圖可以使用select語句查詢到的列名,也可以自己指定相應的列名乘盼。
- 可以指定視圖執(zhí)行的算法升熊,通過ALGORITHM指定。
- column_list如果存在绸栅,則數(shù)目必須等于SELECT語句檢索的列數(shù)
-- 查看結構
SHOWCREATEVIEWview_name
-- 刪除視圖
- 刪除視圖后级野,數(shù)據(jù)依然存在。
- 可同時刪除多個視圖粹胯。
DROPVIEW[IFEXISTS] view_name ...
-- 修改視圖結構
- 一般不修改視圖蓖柔,因為不是所有的更新視圖都會映射到表上。
ALTERVIEWview_name [(column_list)]ASselect_statement
-- 視圖作用
1.簡化業(yè)務邏輯
2.對客戶端隱藏真實的表結構
-- 視圖算法(ALGORITHM)
MERGE合并
將視圖的查詢語句风纠,與外部查詢需要先合并再執(zhí)行况鸣!
TEMPTABLE ? 臨時表
將視圖執(zhí)行完畢后,形成臨時表竹观,再做外層查詢镐捧!
UNDEFINED ? 未定義(默認),指的是MySQL自主去選擇相應的算法臭增。
事務(transaction)
事務是指邏輯上的一組操作懂酱,組成這組操作的各個單元,要不全成功要不全失敗誊抛。
- 支持連續(xù)SQL的集體成功或集體撤銷列牺。
- 事務是數(shù)據(jù)庫在數(shù)據(jù)晚自習方面的一個功能。
- 需要利用 InnoDB 或 BDB 存儲引擎芍锚,對自動提交的特性支持完成昔园。
- InnoDB被稱為事務安全型引擎。
-- 事務開啟
STARTTRANSACTION;或者BEGIN;
開啟事務后并炮,所有被執(zhí)行的SQL語句均被認作當前事務內(nèi)的SQL語句。
-- 事務提交
COMMIT;
-- 事務回滾
ROLLBACK;
如果部分操作發(fā)生問題甥郑,映射到事務開啟前逃魄。
-- 事務的特性
1. 原子性(Atomicity)
事務是一個不可分割的工作單位,事務中的操作要么都發(fā)生澜搅,要么都不發(fā)生伍俘。
2. 一致性(Consistency)
事務前后數(shù)據(jù)的完整性必須保持一致邪锌。
- 事務開始和結束時,外部數(shù)據(jù)一致
- 在整個事務過程中癌瘾,操作是連續(xù)的
3. 隔離性(Isolation)
多個用戶并發(fā)訪問數(shù)據(jù)庫時觅丰,一個用戶的事務不能被其它用戶的事物所干擾,多個并發(fā)事務之間的數(shù)據(jù)要相互隔離妨退。
4. 持久性(Durability)
一個事務一旦被提交妇萄,它對數(shù)據(jù)庫中的數(shù)據(jù)改變就是永久性的。
-- 事務的實現(xiàn)
1. 要求是事務支持的表類型
2. 執(zhí)行一組相關的操作前開啟事務
3. 整組操作完成后咬荷,都成功冠句,則提交;如果存在失敗幸乒,選擇回滾懦底,則會回到事務開始的備份點。
-- 事務的原理
利用InnoDB的自動提交(autocommit)特性完成罕扎。
普通的MySQL執(zhí)行語句后聚唐,當前的數(shù)據(jù)提交操作均可被其他客戶端可見。
而事務是暫時關閉“自動提交”機制腔召,需要commit提交持久化數(shù)據(jù)操作杆查。
-- 注意
1.數(shù)據(jù)定義語言(DDL)語句不能被回滾,比如創(chuàng)建或取消數(shù)據(jù)庫的語句宴咧,和創(chuàng)建根灯、取消或更改表或存儲的子程序的語句。
2.事務不能被嵌套
-- 保存點
SAVEPOINT保存點名稱-- 設置一個事務保存點
ROLLBACKTOSAVEPOINT保存點名稱-- 回滾到保存點
RELEASESAVEPOINT保存點名稱-- 刪除保存點
-- InnoDB自動提交特性設置
SETautocommit =0|1;
0表示關閉自動提交掺栅,1表示開啟自動提交烙肺。
- 如果關閉了,那普通操作的結果對其他客戶端也不可見氧卧,需要commit提交后才能持久化數(shù)據(jù)操作桃笙。
- 也可以關閉自動提交來開啟事務。但與STARTTRANSACTION不同的是沙绝,
SETautocommit是永久改變服務器的設置搏明,直到下次再次修改該設置。(針對當前連接)
而STARTTRANSACTION記錄開啟前的狀態(tài)闪檬,而一旦事務提交或回滾后就需要再次開啟事務星著。(針對當前事務)
鎖表
表鎖定只用于防止其它客戶端進行不正當?shù)刈x取和寫入
MyISAM 支持表鎖,InnoDB 支持行鎖
-- 鎖定
LOCKTABLEStbl_name [ASalias]
-- 解鎖
UNLOCKTABLES
觸發(fā)器
觸發(fā)程序是與表有關的命名數(shù)據(jù)庫對象粗悯,當該表出現(xiàn)特定事件時虚循,將激活該對象
監(jiān)聽:記錄的增加、修改、刪除横缔。
-- 創(chuàng)建觸發(fā)器
CREATETRIGGERtrigger_name trigger_time trigger_eventONtbl_nameFOREACHROWtrigger_stmt
參數(shù):
trigger_time是觸發(fā)程序的動作時間铺遂。它可以是before或after,以指明觸發(fā)程序是在激活它的語句之前或之后觸發(fā)茎刚。
trigger_event指明了激活觸發(fā)程序的語句的類型
INSERT:將新行插入表時激活觸發(fā)程序
UPDATE:更改某一行時激活觸發(fā)程序
DELETE:從表中刪除某一行時激活觸發(fā)程序
tbl_name:監(jiān)聽的表襟锐,必須是永久性的表,不能將觸發(fā)程序與TEMPORARY表或視圖關聯(lián)起來膛锭。
trigger_stmt:當觸發(fā)程序激活時執(zhí)行的語句粮坞。執(zhí)行多個語句,可使用BEGIN...END復合語句結構
-- 刪除
DROPTRIGGER[schema_name.]trigger_name
可以使用old和new代替舊的和新的數(shù)據(jù)
更新操作泉沾,更新前是old捞蚂,更新后是new.
刪除操作,只有old.
增加操作跷究,只有new.
-- 注意
1.對于具有相同觸發(fā)程序動作時間和事件的給定表姓迅,不能有兩個觸發(fā)程序。
-- 字符連接函數(shù)
concat(str1,str2,...])
concat_ws(separator,str1,str2,...)
-- 分支語句
if 條件 then
執(zhí)行語句
elseif 條件 then
執(zhí)行語句
else
執(zhí)行語句
endif;
-- 修改最外層語句結束符
delimiter 自定義結束符號
SQL語句
自定義結束符號
delimiter ;-- 修改回原來的分號
-- 語句塊包裹
begin
語句塊
end
-- 特殊的執(zhí)行
1.只要添加記錄俊马,就會觸發(fā)程序丁存。
2.Insertintoonduplicatekeyupdate語法會觸發(fā):
如果沒有重復記錄,會觸發(fā)beforeinsert,afterinsert;
如果有重復記錄并更新柴我,會觸發(fā) beforeinsert,beforeupdate,afterupdate;
如果有重復記錄但是沒有發(fā)生更新解寝,則觸發(fā) beforeinsert,beforeupdate
3.Replace語法 如果有記錄,則執(zhí)行beforeinsert,beforedelete,afterdelete,afterinsert
SQL編程
--// 局部變量 ----------
-- 變量聲明
declarevar_name[,...] type [defaultvalue]
這個語句被用來聲明局部變量艘儒。要給變量提供一個默認值聋伦,請包含一個default子句。值可以被指定為一個表達式界睁,不需要為一個常數(shù)觉增。如果沒有default子句,初始值為null翻斟。
-- 賦值
使用set和selectinto語句為變量賦值逾礁。
- 注意:在函數(shù)內(nèi)是可以使用全局變量(用戶自定義的變量)
--// 全局變量 ----------
-- 定義、賦值
set語句可以定義并為變量賦值访惜。
set@var=value;
也可以使用selectinto語句為變量初始化并賦值嘹履。這樣要求select語句只能返回一行,但是可以是多個字段债热,就意味著同時為多個變量進行賦值砾嫉,變量的數(shù)量需要與查詢的列數(shù)一致。
還可以把賦值語句看作一個表達式窒篱,通過select執(zhí)行完成焰枢。此時為了避免=被當作關系運算符看待蚓峦,使用:=代替舌剂。(set語句可以使用= 和 :=)济锄。
select@var:=20;
select@v1:=id, @v2=namefromt1limit1;
select*fromtbl_namewhere@var:=30;
selectinto可以將表中查詢獲得的數(shù)據(jù)賦給變量。
-|selectmax(height)into@max_heightfromtb;
-- 自定義變量名
為了避免select語句中霍转,用戶自定義的變量與系統(tǒng)標識符(通常是字段名)沖突荐绝,用戶自定義變量在變量名前使用@作為開始符號。
@var=10;
- 變量被定義后避消,在整個會話周期都有效(登錄到退出)
--// 控制結構 ----------
-- if語句
if search_condition then
statement_list
[elseif search_condition then
statement_list]
...
[else
statement_list]
endif;
-- case語句
CASE value WHEN [compare-value] THEN result
[WHEN [compare-value] THEN result ...]
[ELSE result]
END
-- while循環(huán)
[begin_label:] while search_conditiondo
statement_list
endwhile [end_label];
- 如果需要在循環(huán)內(nèi)提前終止 while循環(huán)低滩,則需要使用標簽;標簽需要成對出現(xiàn)岩喷。
-- 退出循環(huán)
退出整個循環(huán) leave
退出當前循環(huán) iterate
通過退出的標簽決定退出哪個循環(huán)
--// 內(nèi)置函數(shù) ----------
-- 數(shù)值函數(shù)
abs(x)-- 絕對值 abs(-10.9) = 10
format(x, d)-- 格式化千分位數(shù)值 format(1234567.456, 2) = 1,234,567.46
ceil(x)-- 向上取整 ceil(10.1) = 11
floor(x)-- 向下取整 floor (10.1) = 10
round(x)-- 四舍五入去整
mod(m, n)-- m%n m mod n 求余 10%3=1
pi()-- 獲得圓周率
pow(m, n)-- m^n
sqrt(x)-- 算術平方根
rand()-- 隨機數(shù)
truncate(x, d)-- 截取d位小數(shù)
-- 時間日期函數(shù)
now(),current_timestamp();
-- 當前日期時間
current_date();-- 當前日期
current_time();-- 當前時間
date('yyyy-mm-dd hh:ii:ss');-- 獲取日期部分
time('yyyy-mm-dd hh:ii:ss');-- 獲取時間部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j');-- 格式化時間
unix_timestamp();-- 獲得unix時間戳
from_unixtime();-- 從時間戳獲得時間
-- 字符串函數(shù)
length(string)-- string長度恕沫,字節(jié)
char_length(string)-- string的字符個數(shù)
substring(str, position [,length])-- 從str的position開始,取length個字符
replace(str,search_str ,replace_str)-- 在str中用replace_str替換search_str
instr(string,substring)-- 返回substring首次在string中出現(xiàn)的位置
concat(string[,...])-- 連接字串
charset(str)-- 返回字串字符集
lcase(string)-- 轉換成小寫
left(string, length)-- 從string2中的左邊起取length個字符
load_file(file_name)-- 從文件讀取內(nèi)容
locate(substring,string[,start_position])-- 同instr,但可指定開始位置
lpad(string, length,pad)-- 重復用pad加在string開頭,直到字串長度為length
ltrim(string)-- 去除前端空格
repeat(string,count)-- 重復count次
rpad(string, length,pad)--在str后用pad補充,直到長度為length
rtrim(string)-- 去除后端空格
strcmp(string1 ,string2)-- 逐字符比較兩字串大小
-- 流程函數(shù)
casewhen[condition]thenresult [when[condition]thenresult ...] [elseresult]end多分支
if(expr1,expr2,expr3) ?雙分支。
-- 聚合函數(shù)
count()
sum();
max();
min();
avg();
group_concat()
-- 其他常用函數(shù)
md5();
default();
--// 存儲函數(shù)纱意,自定義函數(shù) ----------
-- 新建
CREATEFUNCTIONfunction_name (參數(shù)列表)RETURNS返回值類型
函數(shù)體
- 函數(shù)名婶溯,應該合法的標識符,并且不應該與已有的關鍵字沖突偷霉。
- 一個函數(shù)應該屬于某個數(shù)據(jù)庫迄委,可以使用db_name.funciton_name的形式執(zhí)行當前函數(shù)所屬數(shù)據(jù)庫,否則為當前數(shù)據(jù)庫类少。
- 參數(shù)部分叙身,由"參數(shù)名"和"參數(shù)類型"組成。多個參數(shù)用逗號隔開硫狞。
- 函數(shù)體由多條可用的mysql語句信轿,流程控制,變量聲明等語句構成残吩。
- 多條語句應該使用begin...end語句塊包含财忽。
- 一定要有return返回值語句。
-- 刪除
DROPFUNCTION[IFEXISTS] function_name;
-- 查看
SHOWFUNCTIONSTATUSLIKE'partten'
SHOWCREATEFUNCTIONfunction_name;
-- 修改
ALTERFUNCTIONfunction_name 函數(shù)選項
--// 存儲過程世剖,自定義功能 ----------
-- 定義
存儲存儲過程 是一段代碼(過程)定罢,存儲在數(shù)據(jù)庫中的sql組成。
一個存儲過程通常用于完成一段業(yè)務邏輯旁瘫,例如報名祖凫,交班費,訂單入庫等酬凳。
而一個函數(shù)通常專注與某個功能惠况,視為其他程序服務的,需要在其他語句中調用函數(shù)才可以宁仔,而存儲過程不能被其他調用稠屠,是自己執(zhí)行 通過call執(zhí)行。
-- 創(chuàng)建
CREATEPROCEDUREsp_name (參數(shù)列表)
過程體
參數(shù)列表:不同于函數(shù)的參數(shù)列表,需要指明參數(shù)類型
IN权埠,表示輸入型
OUT榨了,表示輸出型
INOUT,表示混合型
注意攘蔽,沒有返回值龙屉。
/* 存儲過程 */------------------
存儲過程是一段可執(zhí)行性代碼的集合。相比函數(shù)满俗,更偏向于業(yè)務邏輯转捕。
調用:CALL過程名
-- 注意
- 沒有返回值。
- 只能單獨調用唆垃,不可夾雜在其他語句中
-- 參數(shù)
IN|OUT|INOUT 參數(shù)名 數(shù)據(jù)類型
IN輸入:在調用過程中五芝,將數(shù)據(jù)輸入到過程體內(nèi)部的參數(shù)
OUT ? ? 輸出:在調用過程中,將過程體處理完的結果返回到客戶端
INOUT ? 輸入輸出:既可輸入辕万,也可輸出
-- 語法
CREATEPROCEDURE過程名 (參數(shù)列表)
BEGIN
過程體
END
用戶和權限管理
-- root密碼重置
1. 停止MySQL服務
2. ?[Linux] /usr/local/mysql/bin/safe_mysqld--skip-grant-tables &
[Windows] mysqld--skip-grant-tables
3.usemysql;
4.UPDATE`user`SETPASSWORD=PASSWORD("密碼")WHERE`user`="root";
5.FLUSHPRIVILEGES;
用戶信息表:mysql.user
-- 刷新權限
FLUSHPRIVILEGES;
-- 增加用戶
CREATEUSER用戶名IDENTIFIEDBY[PASSWORD] 密碼(字符串)
- 必須擁有mysql數(shù)據(jù)庫的全局CREATEUSER權限枢步,或擁有INSERT權限。
- 只能創(chuàng)建用戶蓄坏,不能賦予權限价捧。
- 用戶名,注意引號:如'user_name'@'192.168.1.1'
- 密碼也需引號涡戳,純數(shù)字密碼也要加引號
- 要在純文本中指定密碼结蟋,需忽略PASSWORD關鍵詞。要把密碼指定為由PASSWORD()函數(shù)返回的混編值渔彰,需包含關鍵字PASSWORD
-- 重命名用戶
RENAMEUSERold_userTOnew_user
-- 設置密碼
SETPASSWORD=PASSWORD('密碼')-- 為當前用戶設置密碼
SETPASSWORDFOR用戶名 =PASSWORD('密碼')-- 為指定用戶設置密碼
-- 刪除用戶
DROPUSER用戶名
-- 分配權限/添加用戶
GRANT權限列表ON表名TO用戶名 [IDENTIFIEDBY[PASSWORD]'password']
-allprivileges表示所有權限
- *.* 表示所有庫的所有表
- 庫名.表名 表示某庫下面的某表
GRANTALLPRIVILEGESON`pms`.*TO'pms'@'%'IDENTIFIEDBY'pms0817';
-- 查看權限
SHOWGRANTSFOR用戶名
-- 查看當前用戶權限
SHOWGRANTS;
或SHOWGRANTSFORCURRENT_USER;或SHOWGRANTSFORCURRENT_USER();
-- 撤消權限
REVOKE 權限列表 ON 表名 FROM 用戶名
REVOKE ALL PRIVILEGES,GRANTOPTIONFROM用戶名-- 撤銷所有權限
-- 權限層級
-- 要使用GRANT或REVOKE嵌屎,您必須擁有GRANT OPTION權限,并且您必須用于您正在授予或撤銷的權限恍涂。
全局層級:全局權限適用于一個給定服務器中的所有數(shù)據(jù)庫宝惰,mysql.user
GRANTALLON*.*和REVOKEALLON*.*只授予和撤銷全局權限。
數(shù)據(jù)庫層級:數(shù)據(jù)庫權限適用于一個給定數(shù)據(jù)庫中的所有目標再沧,mysql.db, mysql.host
GRANTALLONdb_name.*和REVOKEALLONdb_name.*只授予和撤銷數(shù)據(jù)庫權限尼夺。
表層級:表權限適用于一個給定表中的所有列,mysql.talbes_priv
GRANTALLONdb_name.tbl_name和REVOKEALLONdb_name.tbl_name只授予和撤銷表權限炒瘸。
列層級:列權限適用于一個給定表中的單一列淤堵,mysql.columns_priv
當使用REVOKE時,您必須指定與被授權列相同的列顷扩。
-- 權限列表
ALL[PRIVILEGES]-- 設置除GRANT OPTION之外的所有簡單權限
ALTER-- 允許使用ALTER TABLE
ALTERROUTINE-- 更改或取消已存儲的子程序
CREATE-- 允許使用CREATE TABLE
CREATEROUTINE-- 創(chuàng)建已存儲的子程序
CREATETEMPORARYTABLES-- 允許使用CREATE TEMPORARY TABLE
CREATEUSER-- 允許使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES拐邪。
CREATEVIEW-- 允許使用CREATE VIEW
DELETE-- 允許使用DELETE
DROP-- 允許使用DROP TABLE
EXECUTE-- 允許用戶運行已存儲的子程序
FILE-- 允許使用SELECT...INTO OUTFILE和LOAD DATA INFILE
INDEX-- 允許使用CREATE INDEX和DROP INDEX
INSERT-- 允許使用INSERT
LOCKTABLES-- 允許對您擁有SELECT權限的表使用LOCK TABLES
PROCESS-- 允許使用SHOW FULL PROCESSLIST
REFERENCES-- 未被實施
RELOAD-- 允許使用FLUSH
REPLICATION CLIENT-- 允許用戶詢問從屬服務器或主服務器的地址
REPLICATIONSLAVE-- 用于復制型從屬服務器(從主服務器中讀取二進制日志事件)
SELECT-- 允許使用SELECT
SHOWDATABASES-- 顯示所有數(shù)據(jù)庫
SHOWVIEW-- 允許使用SHOW CREATE VIEW
SHUTDOWN-- 允許使用mysqladmin shutdown
SUPER-- 允許使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL語句,mysqladmin debug命令隘截;允許您連接(一次)扎阶,即使已達到max_connections汹胃。
UPDATE-- 允許使用UPDATE
USAGE-- “無權限”的同義詞
GRANTOPTION-- 允許授予權限
表維護
-- 分析和存儲表的關鍵字分布
ANALYZE[LOCAL|NO_WRITE_TO_BINLOG]TABLE表名 ...
-- 檢查一個或多個表是否有錯誤
CHECKTABLEtbl_name [, tbl_name] ... [option] ...
option= {QUICK|FAST|MEDIUM|EXTENDED|CHANGED}
-- 整理數(shù)據(jù)文件的碎片
OPTIMIZE[LOCAL|NO_WRITE_TO_BINLOG]TABLEtbl_name [, tbl_name] ...
雜項
1. 可用反引號(`)為標識符(庫名、表名东臀、字段名着饥、索引、別名)包裹啡邑,以避免與關鍵字重名贱勃!中文也可以作為標識符!
2. 每個庫目錄存在一個保存當前數(shù)據(jù)庫的選項文件db.opt谤逼。
3. 注釋:
單行注釋 # 注釋內(nèi)容
多行注釋/* 注釋內(nèi)容 */
單行注釋-- 注釋內(nèi)容 ? ? (標準SQL注釋風格,要求雙破折號后加一空格符(空格仇穗、TAB流部、換行等))
4. 模式通配符:
_ ? 任意單個字符
% ? 任意多個字符,甚至包括零字符
單引號需要進行轉義 '
5. CMD命令行內(nèi)的語句結束符可以為 ";", "G", "g"纹坐,僅影響顯示結果枝冀。其他地方還是用分號結束。delimiter 可修改當前對話的語句結束符耘子。
6. SQL對大小寫不敏感
7. 清除已有語句:c