dml语句包括哪些_聊聊MySQL基本操作DDL,DML,DQL,DCL
? ? 本篇文章來回顧一下MySQL的基本操作之DDL,DML,DQL,DCL,每種操作都有各自不同的語法,常用的操作匯總如下。
一、DDL-數據定義語言
作用:數據定義語言主要用來定義數據庫中的各類對象,包括用戶、庫、表、視圖、索引、觸發器、事件、存儲過程和函數等。
常見的DDL操作的基本用法如下:
CREATE?USER???????????#創建用戶CREATE?DATABASE???????#創建數據庫
CREATE?TABLE??????????#創建表
CREATE?VIEW???????????#創建視圖
CREATE?INDEX??????????#創建索引
CREATE?TRIGGER????????#創建觸發器
CREATE?EVENT??????????#創建事件
CREATE?PROCEDURE??????#創建存儲過程
CREATE?FUNCTION???????#創建自定義函數
...其他不常用的DDL(如:TABLESPACE)操作可自行查閱資料...
1、創建用戶
用法:
'username'@參數解釋:
username:表示登陸MySQL實例的用戶名[ip/domain/ip range]:表示數據庫實例允許的登陸ip,域名或者ip段示例:創建一個名稱為bingwang,登陸ip為192.168.0.10的用戶:
'bingwang'@2、創建數據庫
用法:
CREATE?DATABASE?db_name;示例:創建一個名稱為test_db,字符集為utf8的數據庫
mysql>?CREATE?DATABASE?test_db?DEFAULT?CHARSET?UTF8;3、創建表
用法:
CREATE?TABLE?table_name;示例:創建一個名稱為t_test,字符集為utf8,存儲引擎為InnoDB,字符校驗集為utf8_general_ci的表:CREATE?TABLE?t_test?(
???????????id?INT?NOT?NULL?AUTO_INCREMENT,
???????????name?VARCHAR(50),
???????????PRIMARY?KEY(id)
???????)?ENGINE?=?InnoDB?DEFAUL?CHARSET?=?UTF8?COLLATE?=?utf8_general_ci;
4、創建視圖
詳細用法:
CREATE?VIEW?view_name?as?;參數解釋:?
:查詢語句
示例:創建一個視圖t_view,用來查詢t_test中的ID為1或者2的數據:FROM?t_test?WHERE?id?IN?(1,2);查看創建視圖的過程:
mysql>?SHOW?CREATE?VIEW?test_view;5、創建索引
????有兩種方法,CREATE和ALTER,下面先介紹一下CREATE的語法
用法:
INDEX?index_name?ON?table_name(field[num])?;參數解釋:?
UNIQUE:表示創建的索引類型為唯一索引,如果創建的為一般索引可以忽略該選項;table_name:表名稱;field:表中的某個字段。num為可選參數,如果field為字符創類型,表示給該字段的前num個字符創建索引;OPTIONS:表示可選選項,可以指定索引使用的算法,比如:USING BTREE。不指定默認為BTREE;示例:
(1)給t_test表中的name字段添加一個唯一索引,使用BTREE作為其索引算法:CREATE?UNIQUE?INDEX?name_ind?ON?t_test(name)?USING?BTREE;(2)給t_test表中的name字段的前5個字符創建一般索引,使用BTREE作為其索引算法:
CREATE?INDEX?name_index?ON?t_test(name(5));關于索引的更多用法及優化在后面的文章中會詳細講解。6、創建觸發器
用法:
CREATE?TRIGGER?trigger_name?trigger_time?trigger_event?FOR?EACH?ROW?BEGIN?
??trigger_stmt?
END;
示例:創建觸發器內容稍多,此處先稍微提一下,后面專門章節介紹;
7、創建存儲過程
用法:
CREATE?PROCEDURE?procedure_name([proc_parameter[,...]])BEGIN
??...存儲過程體
END示例:創建存儲過程內容稍多,此處先稍微提一下,后面專門章節介紹;
8、創建自定義函數
CREATE?FUNCTION?function_name([func_parameter[,...]])RETURNS?type
BEGIN
...函數體
END
示例:創建自定義函數內容稍多,此處先稍微提一下,后面專門章節介紹;
至此,簡單的DDL操作介紹完成。
二、DML-數據操縱語言
作用:用來操作數據庫中的表對象,主要包括的操作有:INSERT,UPDATE,DELETE
常見的DML的基本操作方法如下:
#給表中添加數據INSERT?INTO?...
#修改表中的數據
UPDATE?table_name?SET?...
#刪除表中的數據
DELETE?FROM?table_name?WHERE?;注意:表示DML操作時的條件
1、向表中插入數據
用法:
INSERT?INTO?table_name(field1,field2,[,...])?values(value1,value2),(value3,value4),...;示例:向學生表中插入一條數據,name:'xiaohong', age:24, gender:'M' ,如下:
(1)創建表:CREATE?TABLE?student(????????id?INT?PRIMARY?KEY?AUTO_INCREMENT,
????????name?VARCHAR(50)?NOT?NULL?DEFAULT?'',
????????age?TINYINT,
????????gender?ENUM('F','M')
?????)?ENGINE?=?InnoDB?DEFAULT?CHARSET?=?UTF8;
(2)插入數據:
INSERT?INTO?student(name,age,gender)?VALUES('xiaohong',24,'M');注意:主鍵如果自動遞增,插入時可不用指定;
2、修改表中的數據
用法:
UPDATE?table_name?SET?field1?=?value1,?field2?=?value2,?...?,?WHERE?;示例:將student表中id為1的記錄中的name值修改為:"xiaohua",如下:'xiaohua'?WHERE?id?=?注意:此處修改的時候,一定得注意加條件,否則整個表都會被改。講個技巧:在MySQL的命令中執行操作的時候,可以在登錄MySQL時添加-U選項,如果忘加條件,會被阻止執行sql語句。登錄命令如下:@WB-BLOG?~]#?mysql?-uroot?-proot?-U?-h127.0.0.1?-P3306可見:登錄之后如果不加條件執行UPDATE語句,會被阻止;
3、刪除表中的數據
詳細用法:mysql>?DELETE?FROM?table_name?WHERE?;示例:刪除student表中id為1的記錄,如下:1;注意:
????注意!注意!!再注意!!!,該操作非常危險,命令行中操作時,需要萬分注意。可以使用登錄時加-U參數的方式,防止忘加條件而刪除所有數據,加了-U參數之后,如果不加條件,會被阻止,執行結果如下:
mysql>?DELETE?FROM?student;ERROR?1175?(HY000):?You?are?using?safe?update?mode?and?you?tried?to?update?a?table?without?a?WHERE?that?uses?a?KEY?column
至此,DML操作介紹完畢。
三、DQL-數據查詢語言
作用:主要用來查看表中的數據,也是平時使用最多的操作,主要命令為SELECT,基本用法如下:
mysql>?SELECT?fields?FROM?table_name?WHERE?;注意:
fields:表示要查詢的字段列表,可以使用代替,但是在程序中最好別寫,因為使用*一方面會降低SQL的查詢效率,查詢到一些用不到的字段;另一方面,使用一些ORM框架時,如果數據庫中字段有變動,可能會立刻導致程序報錯。
1、不加條件的單表查詢
用法:
mysql>?SELECT?*?FROM?table;示例略。
2、單表中的條件查詢
????常見的條件:
????>,>=,,!=,IN,NOT IN,LIKE,NOT LIKE,REGEXP
示例:
23的記錄注意:
(1)當某個字段上有索引時,使用上述的反向查詢或者前模糊查詢,如:<>,!=,NOT LIKE,NOT IN,LIKE "%test",將會不走索引;
(2)查詢中的潛在問題:如果某個字段在創建表結構的時候未設置非空,則使用WHERE name!="BING"的時候,將不會包含name為NULL的記錄;
示例:查詢student表中年齡大于"xiaohong"年齡的記錄的數量:
SELECT?COUNT(*)?FROM?student?WHERE?age?>?(SELECT?age?FROM?student?WHERE?name?=?'xiaohong');3、分頁查詢用法:
mysql>?SELECT?*?FROM?table_name?LIMIT?start,num;參數解釋:
start:開始位置,默認從0開始;
num:偏移量,即:從開始位置向后查詢的數據條數;
示例:查詢test表中,第二頁的數據,每頁顯示10條,如下:
1,4、使用ORDER BY對查詢結果進行排序
基本用法:
SELECT?*?FROM?table_name??ORDER?BY??ASC/DESC;示例:從student表中查詢出所有年齡大于20的學生記錄,并且按照年齡age倒序排列,如下:20?ORDER?BY?age?DESC;注意:如果在排序時ORDER BY 之后沒有添加DESC和ASC關鍵字,默認按照ASC升序排列;5、使用GROUP BY對查詢結果集進行分組
用法:
mysql>?SELECT?res?FROM?table_name??GROUP?BY?;示例:查詢student表中男生和女生的數量:
mysql>?SELECT?gender,COUNT(*)?FROM?student?GROUP?BY?gender;6、使用GROUP BY之后,在使用HAVING完成分組之后的條件查詢
用法:
SELECT?res?FROM?table_name??GROUP?BY??;示例:查詢student_course表中有3門成績大于等于80的學生學號(1)創建測試表結構:
CREATE?TABLE?student_course(????sno?INT(11)?NOT?NULL,
????cno?INT(11)?NOT?NULL,
????grade?SMALLINT?NOT?NULL?DEFAULT?0
)ENGINE?=?InnoDB?DEFAULT?CHARSET?=?UTF8;
(2)插入測試數據:
INSERT?INTO?student_course(sno,cno,grade)?VALUES(1,100,79);(3)查詢:
80?THEN?四、DCL-數據控制語言
作用:用來授予或回收訪問數據庫的某種特權,并控制數據庫操縱事務發生的時間及效果。
1、GRANT授予用戶權限
基本用法:
mysql>?GRANT?priv_type?ON??TO?user?;示例:給用戶jerry授予對test_db數據庫的增刪改查權限,允許該用戶從IP為'192.168.0.10'的網絡登錄(1)方法一:'jerry'@(2)方法二:'jerry'@2、REVOKE收回用戶權限用法:mysql>?REVOKE?priv_type?ON??FROM?'jerry'@'192.168.0.10';示例:收回用戶對test_db庫的刪除權限:'jerry'@3、查看給某個用戶所授予的權限
用法:
mysql>?SHOW?GRANTS?FOR?user;示例:查詢給'jerry'@'192.168.0.10'所授予的所有權限:
'jerry'@4、查詢可授予的所有權限,使用技巧
(1)授予所有權限
????首先將某個庫(如:test_db)的所有權限授予給用戶'jerry'@'localhost'
'jerry'@(2)收回某個權限
????如:查詢權限
'jerry'@(3)查看剩余權限
????這樣就可以查到除了查詢權限之外的權限,再加上查詢權限即可授予的所有權限,如下:
'jerry'@????至此,MySQL的基本操作DDL,DML,DQL,DCL介紹完畢。
關注菜鳥封神記,定期分享技術干貨!
點贊和在看是最大的支持,感謝↓↓↓
總結
以上是生活随笔為你收集整理的dml语句包括哪些_聊聊MySQL基本操作DDL,DML,DQL,DCL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 祖师香什么意思
- 下一篇: 真心话的问题题目大全109个