一、Mysql 1、什麼是資料庫? (1)資料庫(database) 資料庫是保存有組織的數據的容器(通常是一個文件或一組文件),資料庫是DBMS(資料庫管理系統或資料庫軟體)創建和操作的容器; (2)表、列、行、主鍵、數據類型分別是什麼 ①表:表是由某些特定的欄位組成的統一的結構化的存儲數據的容器 ...
一、Mysql
1、什麼是資料庫?
(1)資料庫(database)
資料庫是保存有組織的數據的容器(通常是一個文件或一組文件),資料庫是DBMS(資料庫管理系統或資料庫軟體)創建和操作的容器;
(2)表、列、行、主鍵、數據類型分別是什麼
①表:表是由某些特定的欄位組成的統一的結構化的存儲數據的容器;
②列:列是組成表結構的最基本的單位;
③行:一行表示一條資料庫記錄,存儲著記錄信息;
④主鍵:主鍵是由資料庫表中的一列或者多個列組成的,主鍵需要唯一;主鍵不能為空,主鍵
⑤數據類型:表中的每一個列,定義時都需要設定數據類型;
(3)SQL與SQL的編寫規則(大概規則)
①SQL是專門與資料庫實現通信的統一語言,但是不同的DBMS的SQL會有小的差異,不會完全相同;
②SQL編寫規範
a)SQL語言不區分大小寫,但是一般SQL開發人員,關鍵字使用大寫,表名和列名使用小寫;
b)在SQL語句中,空格都會忽略掉,所有一般開發人員為了方便讀和調試會對SQL語句進行換行;
2、Mysql中一些常用的語句
(1)use:表示切換到需要的資料庫
①use databasename:切換到databasename資料庫;如果使用命令行連接Mysql資料庫,需要使用該語句才能切換到對應的資料庫
(2)show:展示資料庫服務中的信息,相當於查看的功能;
①show databases:查看資料庫服務中的所有資料庫;
②show tables:查看資料庫服務中的所有表;
③show colums from tablename:查看表結構中所有欄位;
④show status:顯示伺服器的狀態信息;
⑤show grants:顯示當前登錄用戶的許可權信息;
⑥show warnings:顯示伺服器警告信息;
⑦show errors:顯示伺服器錯誤信息;
⑧net start/stop mysqlname:開啟或者關閉mysql服務;
⑨show global variables like 'port':查看服務開啟的埠;
⑩flush privileges:刷新緩存;
3、表結構的增刪改查
(1)創建表:CREATE TABLE TABLENAME
①創建表基本語句
CREATE TABLE tablename(
columname type 約束條件 comment '欄位名字'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表名';
CREATE TABLE IF NOT EXISTS tablename(
columname type 約束條件 COMMENT '欄位名字'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表名';
②創建表時常用的約束條件
a)主鍵(PRIMARY KEY)
b)外鍵(constraints foreign_key_idname foreign key(column) references tablename(columnname))
c)不為空(NOT NULL)
d)自增(AUTO_INCREMENT) e)預設值(DEFAULT) f)欄位備註信息(COMMENT)
③實例
CREATE TABLE IF NOT EXISTS customers
(
cust_id int NOT NULL AUTO_INCREMENT COMMENT '顧客ID',
cust_name char(50) NOT NULL comment '顧客名',
cust_address char(50) COMMENT '顧客的地址',
cust_city char(50) COMMENT '顧客的城市',
cust_state char(5) COMMENT '顧客的州',
cust_zip char(10) COMMENT '顧客的郵政編碼',
cust_country char(50) COMMENT '顧客的國家',
cust_contact char(50) COMMENT '顧客的聯繫名',
cust_email char(255) DEFAULT '[email protected]'COMMENT '顧客的聯繫email地址',
PRIMARY KEY(cust_id)
) ENGINE=InnoDB COMMENT='顧客表';
④自增AUTO_INCREMENT相關
a)每個表只能有一個列上加AUTO_INCERMENT,且該欄位必須被索引上;
b)如果在insert時設置了自增的值,則自增的值會被手工設置的值覆蓋,且後續自增的值從手工設置的值往後增;
c)在Mysql中可以使用select last_insert_id()查看自增量的最後一個值;
⑤引擎
a)InnoDB:該引擎是可靠的事務處理引擎,但是不支持全文本搜索;
b)MEMORY:等同於MyISAM,由於是存儲與記憶體所以速度較快,適用於臨時表;
c)MyISAM:性能極高,支持全文本搜索,但是不支持事務;
(2)修改表:ALTER TABLE TABLENAME
ALTER TABLE TABLENAME 後續的操作; ALTER TABLE TABLENAME ADD COLUMN COLUMNNAME INT; ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME; ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME NEWTYPE; ALTER TABLE TABLENAME RENAME COLUMNNAME TO NEWCOLUMNNAME;
(3)刪除表:DROP TABLE TABLENAME
DROP TABLE TABLENAME; RENAME TABLE TABLENAME TO NEWTABLENAME,TABLENAME1 to NEWTABLENAME1;
4、表數據的增刪改查
(1)插入數據:INSERT INTO TABLENAME...
INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) VALUES(VALUE1,VALUE2,VALUE3,...); INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) VALUES(VALUE1,VALUE2,VALUE3,...),(VALUE1,VALUE2,VALUE3,...),...; INSERT LOW_PRIORITY ...; INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) SELECT VALUE1,VALUE2,VALUE3,... FROM TABLENAME1;
(2)更新數據:UPDATE TABLENAME SET...
UPDATE TABLENAME SET COLUMNNAME='NEWVALUE' ; UPDATE TABLENAME SET COLUMNNAME='NEWVALUE' WHERE ...; UPDATE TABLENAME SET COLUMNNAME='NEWVALUE',COLUMNNAME1='NEWVALUE1' WHERE ...; UPDATE IGNORE TABLENAME SET COLUMNNAME='NEWVALUE' WHERE ...;如果存在錯誤時,忽略錯誤,繼續往下執行
(3)刪除數據:DELETE FROM TABLENAME...
DELETE FROM TABLENAME WHERE...;刪除表中的特定行或所有行 TRUNCATE TABLENAME;--刪除表中所有的數據,且直接提交不能回滾
5、查詢資料庫
(1)檢索數據
a)DISTINCTSELECT DISTINCT COLUMNNAME FROM TABLENAME; SELECT DISTINCT COLUMNNAME,COLUMNNAME1 FROM TABLENAME; SELECT DISTINCT *FROM TABLENAME; --過濾掉完全相同的行,或者把所有隻要存在一個內容不同的數據都查詢出來;
b)LIMIT
SELECT *FROM TABLENAME LIMIT 5;--查詢小於等於5條數據 SELECT *FROM TABLENAME LIMIT 5,5;--查詢從行5開始往後的5條或5條以內的數據 SELECT *FROM TABLENAME LIMIT 5 offset 5;--同上
(2)排序數據:ORDER BY COLUMNNAME
SELECT *FROM TABLENAME ORDER BY COLUMNNAME ;--預設是按照升序排列的(ASC) SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC ;--設置降序 SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC,COLUMNNAME DESC;--如果需要按照多個列排序,中間使用逗號隔開,多個列都需要降序的話多個列都需要加DESC
(3)過濾數據:WHERE
SELECT *FROM TABLENAME WHERE COLUMNNAME...; SELECT *FROM TABLENAME WHERE COLUMNNAME BETWEEN ... AND ...; SELECT *FROM TABLENAME WHERE COLUMNNAME> ... AND ; SELECT *FROM TABLENAME WHERE COLUMNNAME< ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME<= ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME>= ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME= ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME!= ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME<> ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME IS NULL; SELECT *FROM TABLENAME WHERE COLUMNNAME IS NOT NULL; SELECT *FROM TABLENAME WHERE COLUMNNAME IN(...);
(4)使用通配符和正則表達式查詢數據:LIKE®EXP
通配符: SELECT *FROM TABLENAME WHERE COLUMNNAME LIKE '%jack';--%匹配任意多個字元 SELECT *FROM TABLENAME WHERE COLUMNNAME LIKE '_jack';--%匹配單個字元
正則表達式: SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP 'jack';--表示匹配COLUMNNAME列中包含jack的行;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP 'jack|jack1';--表達式中的|表示或者;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '.jack';--表達式中的.表示匹配任意字元;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[123]ton';--表達式中的[]表示匹配[]中的任意字元,表示或的意思;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[1-9]ton';--表達式中的[1-9a-z]表示匹配1-9,a-z中的任意數字或者字母;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '\\.'--表達式中\\表示轉義,若特殊字元. - []這些內容,可以在前面加上轉義字元表示查詢特殊字元內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]*';--表達式中的*表示匹配0個或者多個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]+';--表達式中的+表示匹配1個或者多個內容;
SELECT *FROM TABLENAME WHERE COULMNNAME REGEXP '[0-9]?';--表達式中的?表示匹配0個或者1個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n,m}';--表達式中的{n,m}表示匹配n到m之間個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n,}';--表達式中的{n,}表示匹配大於等於n個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n}';--表達式中的{n}表示匹配n個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '^main';--表達式中的^表示匹配開頭;
SELECT *FROM TBALENAME WHERE COLUMNNAME REGEXP '$main';--表達式中的$表示匹配結尾;
(5)Mysql的內置函數
①計算欄位 SELECT CONCAT(COLUMNNAME ,'(',COLUMNNAME,')') AS COLUMNNAMENEW FROM TABLENAME; ②去除空格欄位 SELECT RTRIM(COLUMNNME) FROM TABLENAME;
SELECT LTRIM(COLUMNNAME)FROM TABLENAME; ③使用別名
SELECT AVG(COULUMNAME) as COLUMNNAME1 FROM TABLENAME; ④執行算數計算 +\-\*\/
SELECT COLUMNNAME*2,FROM TABLENAME; ⑤使用數據處理函數 ABS--絕對值
PI--Π
Sqrt--返回數的平方根
Sin--正弦
Cos--餘弦
Tan--正切 ⑥聚集函數 a)AVG:返回指定COLUMNNAME的平均值; SELECT AVG(COLUMNNAME)FROM TABLENAME;
SELECT AVG(COLUMNNAME) AS COLUMNNAME1 FROM TABLENAME;
b)SUM:返回指定列值的總和;
SELECT SUM(COLUMNNAME) FROM TABLENAME;
c)COUNT:返回表中行數數量; SELECT COUNT(*) FROM TABLENAME;--返回表中行數數量,包括NULL的行
SELECT COUNT(COLUMNNAME)FROM TABLENAME;--返回表中行數數量,不包括指定COLUMNNAME為NULL的;
d)MIN和MAX:查詢表中特特定列值的最大或者最小值;
SELECT MIN(COLUMNNAME) FROM TABLENAME;
SELECT MAX(COULUNNAME) FROM TABLENAME;
(6)分組數據
SELECT COLUMNNAME FROM TABLENAME GROUP BY COLUMNNAME ORDER BY COLUMNAME1 DESC;(在ORDER BY後面的COLUMNNAME可以不是GROUP BY後面的COLUMNNAME,但是根據規範最好是,如下語句)
SELECT COULMNNAME FROM TABLENAME GROUP BY COLUMNNAME ORDER BY COLUMNNAME DESC;
GROUP BY語句使用註意事項 ①GROUP BY 語句在WHERE之後,ORDER BY之前 ②在SELECT語句中使用GROUP BY時,需要查詢展示的列在GROUP BY中必須也要有,不然查詢出來的結果會不准確;如果在SELECT 中使用表達式,在GROUP BY中也必須使用表達式,不能使用別名;聚集函數可以在SELECT中存在,但是在GROUP BY中不存在; ③如果分組中存在NULL值,則NULL分為單獨一組,多個NULL值分為一組;
HAVING過濾分組
WHERE過濾行而HAVING過濾分組,WHERE在分組之前過濾,HAVING在分組之後過濾;
SELECT COLUMNNAME,COUNT(*) FROM TABLENAME GROUP BY COLUMNNAME HAVING COUNT(*)>8;
SELECT COLUMNANME,COUNT(*) FROM TABLENAME WHERE COLUMNANEM ='' GROUP BY COLUMNNAME HAVING COUNT(*)>8;
Mysql中的關鍵字的順序:
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT;
(7)子查詢
SELECT *FROM TABLENAME WHERE COLUMNNAME IN (SELECT COLUMNNAME FROM TABLENAME1 WHERE COLUMNNAME1='')
SELECT COLUMNNAME (SELECT COUNT(*) FROM TABLENAME WHERE ......s)AS COLUMNNAME FROM TABLENAME ;
(8)組合查詢
組合查詢:執行多個SELECT 查詢語句,並將結果作為單個結果集返回,使用UNION關鍵字將多個SELECT 查詢結果集組合成一個結果集返回; SELECT COLUMNNAME,COLUMNNAME1 FROM TABLENAME UNION SELECT COLUMNNAME2,COLUMNNAME3 FROM TABLENAME1; UNION規則 ①UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔; ②UNION中的每個查詢必須包含相同的列、表達式或聚集函數; ③列數據類型必須相容:類型不必完全相同,但必須是DBMS可以隱含地轉換的類型(例如,不同的數值類型或不同的日期類型); ④使用UNION時預設取消掉了重覆行,如果需要不取消重覆行需要使用UNION ALL;
⑤如果需要對UNION的結果排序,只需要在最後一個SELECT 查詢語句後面加上ORDER BY即可;
(9)Mysql中的連接方式
①內連接
a)內連接:自然連接(Naturaljoin)是一種特殊的等值連接,它要求兩個關係中進行比較的分量必須是相同的屬性組,並且在結果中把重覆的屬性列去掉; SELECT *FROM TABLENAME INNER JOIN TABLENAME1 ON TABLENAME.COLUMNNAME = TABLENAME.COLUMNNAME;(比較的分量必須是相同的屬性組) b)等值連接:等值連接是關係運算-連接運算的一種常用的連接方式。是條件連接(或稱θ連接)在連接運算符為“=”號時,即θ=0時的一個特例
SELECT *FROM TABLENAME,TABLENAME1 WHERE TABLENAME.COLUMNNAME=TABLENAME1.COLUMNNAME;
②外連接
a)左連接:LEFT JOIN或LEFT OUTER JOIN SELECT *FROM TABLENAME LEFT OUTER JOIN TABLENAME1 ON TABLENAME.COLUMNNAME=TABLENAME1.COLUMNNAME; b)右連接:RIGHT JOIN 或 RIGHT OUTER JOIN SELECT *FROM TABLENAME AS T RIGHT OUTER JOIN TABLENAME1 AS T1 ON T.COLUMNNAME=T1.COLUMNNAME; c)全連接:FULL JOIN 或 FULL OUTER JOIN SELECT *FROM TABLENAME AS T FULL OUTER JOIN TABLENAME1 AS T1 ON T.COLUMNNAME=T1.COLUMNNAME;(Mysql不支持)
(10)全文本搜索
①什麼是全文本搜索 a)Mysql中最常用的引擎就是MyISAM和InnoDB搜索引擎,前者支持全文本搜索,後者不支持; b)為了進行全文本搜索,必須索引被搜索的列,而且要隨著數據的改變不斷地重新索引;若在創建表是進行適當的設置,Mysql就會自動進行索引和重新索引; c)創建表時設置全文本搜索 CREATE TABLE TABLENAME( COLUMNNAME TYPE, FULLTEXT(COLUMNNAME) ) ②進行全文本搜索的基本語法:Match()和Against() a)其中Match()指定被搜索的列,Against()指定要使用的搜索表達式;(一般不區分大小寫) b)傳遞給Match的值必須必須要與FULLTEXT中定義的一致,且如果定義了多列則次序也需要一致; c)全文本搜索會自動根據搜索的匹配優先順序排序列出結果; SELECT *FROM TABLENAME MATCH(COLUMNNAME) AGAINST('需要搜索的內容'); ③進行全文本搜索的更高級語法 a)使用擴展查詢 SELECT *FROM TABLENAME MATCH() AGAINST('需要搜索的內容' with query expansion); b)布爾文本搜索 SELECT *FROM TABLENAME MATCH AGAINST('需要搜索的內容' IN BOOLEAN MODE) SELECT *FROM TABLENAME MATCH AGAINST('a +b' IN BOOLEAN MODE);--+表示包含,必須存在+後面的內容; SELECT *FROM TABLENAME MATCH AGAINST('a -b' IN BOOLEAN MODE);---表示不包含,必須不存在+後面的內容; SELECT *FROM TABLENAME MATCH AGAINST('a >b' IN BOOLEAN MODE);-->表示包含,而且增加等級; SELECT *FROM TABLENAME MATCH AGAINST('a <b' IN BOOLEAN MODE);--<表示包含,而且減少; SELECT *FROM TABLENAME MATCH AGAINST('a (bbbb)' IN BOOLEAN MODE);--()把片語成表達式; SELECT *FROM TABLENAME MATCH AGAINST('a b*' IN BOOLEAN MODE);--*表示匹配詞尾的表達式;
(11)視圖
①創建視圖 CREATE VIEW VIEWNAME AS SELECT COLUMNNAME,COLUMNNAME1 FROM TABLENAME WHERE COLUMNNAME=''; ②刪除視圖 DROP VIEW VIEWNAME; ③修改視圖 視圖一般是在不修改,直接先刪除視圖再重新創建視圖; CREATE OR REPLACE VIEW VIEWNAME AS SELECT ...; ④查詢視圖 SELECT *FROM VIEWNAME;--查詢視圖整體的語法與查詢表的視圖一致
(12)事務
①什麼是事務 a)事務可以用來維護資料庫的完整性,保證成批的Mysql操作要麼完全執行要麼完全不執行; b)事務中的關鍵字:事務(transaction)、回退(rollback)、提交(commit)、保留點(savepoint) ②事務的相關操作語法 SELECT *FROM TABLENAME; START TRANSACTION; DELETE FROM TABLENAME WHERE COLUMNNAME='' SAVEPOINT SAVEPOINTNAME1; DELETE FROM TABLENAME WHERE COLUMNNAME='' SAVEPOINT SAVEPOINTNAME2; ROLLBACK TO SAVEPOINT1; COMMIT;
c)Mysql中可以查看或者設置是否自動提交
SELECT @@AUTOCOMMIT;--0為不自動提交,1為自動提交;
(13)存儲過程
①什麼是存儲過程 a)可能存在一個完整的操作需要多個SQL語句才能完成,可以用存儲過程實現; b)為之後的使用而保存的一條或者多條SQL語句的結合,可以視為批處理文件; ②操作存儲過程 a)創建存儲過程 CREATE PROCEDURE PROCEDURENAME() BEGIN 需要處理的多條語句 END; b)刪除存儲過程 DROP PROCEDURE IF EXISTS PROCEDURENAME; DROP PROCEDURE PROCEDURENAME; c)調用存儲過程 CALL PROCEDURENAME() d)查看存儲過程 SHOW CREATE PROCEDURE PROCEDURENAME; SHOW PROCEDURE STATUS; ③創建帶參數的存儲過程 a)創建 CREATE PROCEDURE PROCEDURENAME( OUT max_columnname decimal(10,2), OUT avg_columnname decimal(10,2), OUT min_columnname decimal(10,2) ) BEGIN SELECT MAX(COLUMNNAME) INTO max_columnname FROM TABLENAME; SELECT AVG(COLUMNNAME) INTO avg_columnname FROM TABLENAME; SELECT MIX(COLUMNNAME) INTO min_columnname FROM TABLENAME; END; b)調用 CALL PROCEDURENAME(@max_columnname,@avg_columnname,@min_columnname); select @lowp; ④創建更加智能的存儲過程 a)創建帶IN和OUT的存儲過程 CREATE PROCEDURE PROCEDURENAME( IN columnname decimal(10,2), OUT columnname1 decimal(10,2) ) BEGIN SELECT SUM(columnname) FROM TABLENAME WHERE TABLENAME.columnname=columnname INTO columnname1; END; CALL PROCEDURENAME(a,@columnname1); b)創建更加智能的存儲過程 CREATE PROCEDURE PROCEDURENAME( IN columnname1 INT, IN columnname2 BOOLEAN, OUT columnname3 DECIMALE(10,2) ) BEGIN DECLARE columnname_3 DECIMALE(10,2); DECLARE columnname_2 INT DEFAULT 6; SELECT SUM(item_price*quantity) FROM TABLENAME INTO columnname_3; IF columnanme2 then SELECT columnname_3+(columnname_3*columnname_2/100) INTO columnname_3; END IF; SELECT columnname_3 INTO columnname3; END;
(14)觸發器
①什麼是觸發器 a)在某個表發生更改時自動處理的某一邏輯就是觸發器; b)Mysql中的觸發器就是在進行DELETE/UPDATE/INSERT操作時自動執行的一條語句; ②操作觸發器基本語句 a)創建觸發器語句 CREATE TRIGGER TRIGGERNAME BEFORE/AFTER INSERT/UPDATE/DELETE ON TABLENAME FOR EACH ROW SELECT 'PRODUCT ADDED' INTO @TEST; b)刪除觸發器 DROP TRIGGER TRIGGERNAME; ③操作觸發器更高級語句 a)INSERT觸發器 CREATE TRIGGER TABLENAME AFTER INSERT ON TABLENAME FOR EACH ROW SELECT NEW.COLUMNNAME INTO @TESTCOLUMNNAME; INSERT INTO orders(ORDER_DATE, CUST_ID) VALUES( NOW(), 10004); SELECT @TESTCOLUMNNAME; b)DELETE觸發器
CREATE TRIGGER TRIGGERNAME BEFORE DELETE ON TABLENAME
FOR EACH ROW
INSERT INTO ARCHIVE_TABLE(COLUMNNAME1,COLUMNNAME2,COLUMNNAME3) VALUES(OLD.COLUMNNAME1,OLD.COLUMNNAME2,OLD.COLUMNNAME)
BEGIN
END;
SELECT *FROM ARCHIVE_TABLE;
DELETE FROM TABLENAME WHERE COLUMNNAME='' c)UPDATE觸發器:引用名為OLD的虛擬表訪問update之前的值,引用NEW的虛擬表訪問update之後的表;
CREATE TRIGGER TRIGGERNAME BEFORE UPDATE ON TABLENAME
FOR EACH ROW SELECT NEW.COLUMNNAME = (NEW.COLUMNNAME)INTO @UPDATE;
d)NEW虛擬表中的數據可能會更新,OLD中的值全都是只讀的,不能更新; ④創建觸發器的規則 a)觸發器名需要唯一(觸發器名必須在每個表中唯一,但是設計的時候最好在同一個資料庫內唯一);需要規定觸發器關聯的表; b)觸發器需要響應的和時間:INSERT/DELETE/UPDATE,AFTER/BEFORE; c)只有表才支持觸發器,視圖或者臨時表不支持觸發器; d)每個表每個事件每次只允許一個觸發器,所有每個表最多只支持6個觸發器; e)如果BEFORE觸發器失敗,則MySQL將不執行請求的操作。此外,如果BEFORE觸發器或語句本身失敗,MySQL將不執行AFTER觸發器(如果有的話)
(15)安全管理
①管理賬戶 a)查看用戶 SELECT *FROM USER; b)創建用戶 CREATE USER USERNAME IDENTIFIED BY 'password' c)刪除用戶 DROP USER USERNAME; d)重命名用戶 RENAME USER USERNAME TO USERNAME1; e)修改密碼 SET PASSWORD FOR USERNAME =PASSWORD('aaaaaa') ②設置、收回許可權 a)查看用戶許可權 SHOW GRANTS FOR USERNAME; b)設置許可權 GRANT ALL ON DATEBASENAME.* TO USERNAME; GRANT SELECT ON DATEBASENAME.* TO USERNAME; GRANT SELECT,INSERT,ALTER ON DATEBASENAME.* TO USERNAME; c)收回許可權 REVOKE ALL ON DATEBASENAME.* TO USERNAME; REVOKE SELECT ON DATEBASENAME.* TO USERNAME; REVOKE SELECT,INSERT,ALTER ON DATEBASENAME.* TO USERNAME;
(16)字元集和校對順序
①查看所有的字元集和校對順序 a)SHOW CHARACTER SET; b)SHOW COLLATION; ②在創建表是設定字元集和校對順序 CREATE TABLE TABLENAME( COLUMNNAME INT, COLUMNNAME1 VARCHAR(10) )default character set hebrew collate hebrew_general_ci; ③在特定的列加上字元集和校對順序 CREATE TABLE TABLENAME( COLUMNNAME INT, COLUMNNAME1 VARCHAR(10) character set hebrew collate hebrew_general_ci ); ④在使用SELECT語句時加上字元集和校對順序 SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC collate latin1_general_cs;
(17)游標(等後續學習的更加透徹再更新)