日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

dml语句包括哪些_聊聊MySQL基本操作DDL,DML,DQL,DCL

發(fā)布時(shí)間:2023/12/3 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dml语句包括哪些_聊聊MySQL基本操作DDL,DML,DQL,DCL 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? 本篇文章來(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。