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