-
sql 語(yǔ)句:DDL 語(yǔ)句,DML 語(yǔ)句,DQL 語(yǔ)句,DCL 語(yǔ)句
DDL 語(yǔ)句操作數(shù)據(jù)庫(kù)以及表的 create, drop, alter
DML 語(yǔ)句對(duì)表數(shù)據(jù)進(jìn)行 insert(增加),delete(刪除),update(修改)
DQL 語(yǔ)句對(duì)表數(shù)據(jù)進(jìn)行 select 查詢
mysql 數(shù)據(jù)庫(kù)約束:主鍵約束,唯一約束,非空約束
控制臺(tái)連接數(shù)據(jù)庫(kù)
//?登錄格式1????mysql?-u用戶名?-p密碼 mysql?-uroot?-proot //?登錄格式2????mysql?-hip地址?-u用戶名?-p密碼 mysql?-u127.0.0.1?-uroot?-proot //?登錄格式3????mysql?--host=ip地址?--user=用戶名?--password=密碼 mysql?--host=127.0.0.1?--user=root?--password=root //?exit?退出數(shù)據(jù)庫(kù)
sql 結(jié)構(gòu)化查詢語(yǔ)言
DDL 數(shù)據(jù)定義語(yǔ)言
用來(lái)定義數(shù)據(jù)庫(kù)對(duì)象:數(shù)據(jù)庫(kù),表,列。關(guān)鍵字:create, drop, alter
DML 語(yǔ)句 數(shù)據(jù)操作語(yǔ)言
用來(lái)對(duì)數(shù)據(jù)庫(kù)中表的數(shù)據(jù)進(jìn)行增刪改查。關(guān)鍵字:insert, delete, update
DQL 語(yǔ)句 數(shù)據(jù)查詢語(yǔ)言
用來(lái)查詢數(shù)據(jù)庫(kù)中表的記錄(數(shù)據(jù))。關(guān)鍵字:select, where
DCL 語(yǔ)句 數(shù)據(jù)控制語(yǔ)言
用來(lái)定義數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限和安全級(jí)別,及創(chuàng)建用戶。關(guān)鍵字:GRANT, REVOKE
sql 通用語(yǔ)法
sql 語(yǔ)句可以單行或多行,以分號(hào)結(jié)尾
可以使用空格和縮進(jìn)來(lái)增強(qiáng)語(yǔ)句的可讀性
mysql 數(shù)據(jù)庫(kù)的 sql 語(yǔ)句不區(qū)分大小寫,關(guān)鍵字建議使用大寫
DDL 語(yǔ)句
創(chuàng)建數(shù)據(jù)庫(kù)
--??直接創(chuàng)建數(shù)據(jù)庫(kù) ????CREATE?DATABASE?數(shù)據(jù)庫(kù)名; --??判斷是否存在并創(chuàng)建數(shù)據(jù)庫(kù) ????CREATE?DATABASE?IF?NOT?EXISTS?數(shù)據(jù)庫(kù)名; --??創(chuàng)建數(shù)據(jù)庫(kù)并指定字符集(編碼類型) ????CREATE?DATABASE?數(shù)據(jù)庫(kù)名?CHARACTER?SET?字符集; ????CREATE?DATABASE?db1; ????CREATE?DATABASE?IF?NOT?EXISTS?db2; ????CREATE?DATABASE?db3?CHARACTER?SET?gbk; --??查看某個(gè)數(shù)據(jù)庫(kù) ????SHOW?CREATE?DATABASE?數(shù)據(jù)庫(kù)名; ????SHOW?CREATE?DATABASE?db1;
修改數(shù)據(jù)庫(kù)
--??修改數(shù)據(jù)庫(kù)字符集格式 ????ALTER?DATABASE?數(shù)據(jù)庫(kù)名?DEFAULT?CHARACTER?SET?字符集; ????ALTER?DATABASE?db3?DEFAULT?CHARACTER?SET?UTF8;
刪除數(shù)據(jù)庫(kù)
--??刪除數(shù)據(jù)庫(kù) DROP?DATABASE?數(shù)據(jù)庫(kù)名; DROP?DATABASE?db4;
使用數(shù)據(jù)庫(kù)
--??查看正在使用的數(shù)據(jù)庫(kù) ????SELECT?DATABASE(); --??切換數(shù)據(jù)庫(kù) ????USE?數(shù)據(jù)庫(kù)名; ????USE?DB2;
創(chuàng)建表
CREATE?TABLE?表名?(字段名1,字段類型1,字段名2,字段類型2......); --??建議寫成如下格式 CREATE?TABLE?表名?( ????字段名1,字段類型1, ????字段名2,字段類型2, ????...... ); CREATE?TABLE?student( ????id?int, ????name?varchar(10), ????age?int, ????birthday?date, ????sex?char(1) );
mysql 數(shù)據(jù)庫(kù)常用類型
類型 描述 int 整型 double 浮點(diǎn)型 varchar 字符串型 data 日期類型:yyyy-mm-dd 詳細(xì)的數(shù)據(jù)類型
分類 類型名稱 說(shuō)明 整數(shù)類型 tinylnt 很小的整數(shù) smallint 小的整數(shù) mediumint 中等大小的整數(shù) int(integer) 普通大小的整數(shù) 小數(shù)類型 float 單精度浮點(diǎn)數(shù) double 雙精度浮點(diǎn)數(shù) decimal (m,d) 壓縮嚴(yán)格的定點(diǎn)數(shù) 日期類型 year YYYY 1901-2155 time HH:MM:SS data YYYY-MM-DD datatime YYYY-MM-DD HH:MM:SS timestamp 文本,二進(jìn)制類型 CHAR(M) M 為 0~255 之間的整數(shù) VARCHAR(M) M 為 0~65535 之間的整數(shù) TINYBLOB 允許長(zhǎng)度 0~255 字節(jié) BLOB 允許長(zhǎng)度 0~65535 字節(jié) MEDIUMBLOB 允許長(zhǎng)度 0~167772150 字節(jié) LONGBLOB 允許長(zhǎng)度 0~4294967295 字節(jié) TINYTEXT 允許長(zhǎng)度 0~255 字節(jié) TEXT 允許長(zhǎng)度 0~65535 字節(jié) MEDIUMTEXT 允許長(zhǎng)度 0~167772150 字節(jié) LONGTEXT 允許長(zhǎng)度 0~4294967295 字節(jié) VARBINAPY(M) 允許長(zhǎng)度 0~M 個(gè)字節(jié)的變長(zhǎng)字節(jié)字符串 BINARY(M) 允許長(zhǎng)度 0~M 個(gè)字節(jié)的變長(zhǎng)字節(jié)字符串 查看表
--??查看某個(gè)數(shù)據(jù)庫(kù)中的所有表 ????SHOW?TABLES; --??查看表結(jié)構(gòu) ????DESC?表名; --??查看創(chuàng)建表的sql語(yǔ)句 ????SHOW?CREATE?TABLE?表名;
快速創(chuàng)建一個(gè)表結(jié)構(gòu)相同的表
CREATE?TABLE?新表名?LIKE?舊表名; --??創(chuàng)建?s1?表,?表結(jié)構(gòu)和student表結(jié)構(gòu)相同 CREATE?TABLE?s1?LIKE?student;
刪除表
--??直接刪除表 DROP?TABLE?表名; --??判斷表是否存在并刪除表 DROP?TABLE?IF?EXISTS?表名; DROP?TABLE?db1; DROP?TABLE?IF?EXISTS?db2;
修改表結(jié)構(gòu)
--??添加表列 ALTER?TABLE?表名?ADD?列名?類型; --??修改列類型 ALTER?TABLE?表名?MODIFY?列名?新的類型; --??修改列名 ALTER?TABLE?表名?CHANGE?舊列名?行列名?類型; --??刪除列 ALTER?TABLE?表名?DROP?列名; --??修改表名 RENAME?TABLE?表名?TO?新表名; --??修改字符集 ALTER?TABLE?表名?character?set?字符集;
DML 語(yǔ)句
插入記錄
1.關(guān)鍵字說(shuō)明
INSERT?INTO?表名?-?表示往那張表添加數(shù)據(jù) (字段名1,?字段名2,?...);????--?要給那些字段設(shè)置值 VALUES?(值1,?值2,?...);??--?設(shè)置的具體的值
值與字段必須對(duì)應(yīng),個(gè)數(shù)相同,類型相同
值的數(shù)據(jù)大小必須在字段的長(zhǎng)度范圍之內(nèi)
除了數(shù)組類型外,其他字段類型的值必須使用引號(hào)引起。(建議使用單引號(hào))
如果要插入空值,可以不寫字段,或者插入 null
插入全部字段
--??所有的字段名都寫出來(lái) ????INSERT?INTO?表名?(字段名1,?字段名2,?...)?VALUES?(值1,?值2,?...); --??不寫字段名 ????INSERT?INTO?表名?VALUES?(值1,?值2,?...);
插入部分?jǐn)?shù)據(jù)
--??沒有添加數(shù)據(jù)的字段會(huì)使用null ????INSERT?INTO?表名?(字段名1,?字段名3,?...)?VALUES?(值1,?值3,?...);
案例
--??創(chuàng)建db3數(shù)據(jù)庫(kù)并使用 ????CREATE?DATABASE?db3; ????USE?db3; --??創(chuàng)建完整學(xué)生信息表,包括學(xué)員的id,姓名,年齡,性別,家庭地址,電話號(hào)碼,生日,數(shù)學(xué)成績(jī),英語(yǔ)成績(jī) CREATE?TABLE?student( ????id?int, ????name?varchar(20), ????age?int, ????sex?char(1), ????address?varchar(200), ????phone?varchar(20), ????birthday?date, ????math?double, ????english?double ); --??插入一條數(shù)據(jù)?順序可以打亂,字段名和值要對(duì)應(yīng) INSERT?INTO?student(id,name,sex,age,birthday,address,phone,math,english)values(1,'zhangsan','男','19','2010-12-11','北京市','18833336666',98.5,67); --??校驗(yàn)插入的數(shù)據(jù),查看student表的所有字段數(shù)據(jù) SELECT?*?FROM?student;
蠕蟲復(fù)制
在已有的數(shù)據(jù)基礎(chǔ)上,將原來(lái)的數(shù)據(jù)進(jìn)行復(fù)制,插入到對(duì)應(yīng)的表中
--??語(yǔ)法格式化 INSERT?INTO?表名1?SELECT?*?FROM?表名2; --??創(chuàng)建student2表,student2結(jié)構(gòu)和student表結(jié)構(gòu)一樣 CREATE?TABLE?student?LIKE?student2; --??將student表中的數(shù)據(jù)添加到student2表中 INSERT?INTO?student?SELECT?*?FROM?student2; --??只復(fù)制student表中name,age字段數(shù)據(jù)到student2表中使用如下格式 INSERT?INTO?student2(name,age)?SELECT?name,age?FROM?student;
更新表記錄
--??不帶條件修改數(shù)據(jù)????全部修改 UPDATE?表名?SET?字段名=值; --??帶條件修改數(shù)據(jù)??????指定范圍修改 UPDATE?表名?SET?字段名=值?WHERE?字段名=值; --??關(guān)鍵字?UPDATE:?修改數(shù)據(jù)?SET:?修改哪些字段??WHERE:?指定條件 --??不帶修改條件,將所有的性別改為女 UPDATE?student?SET?sex='女'; --??帶條件修改數(shù)據(jù),將id為2的學(xué)生性別修改為難 UPDATE?student?SET?sex='男'?WHERE?id=2; --??一次修改多列,把id為3的學(xué)生,年齡改為26,?address改為北京 UPDATE?student?SET?age=26,?address='北京'?WHERE?id=3;
刪除表記錄
--??不帶條件刪除數(shù)據(jù) DELETE?FROM?表名; --??帶條件刪除數(shù)據(jù) DELETE?FROM?表名?WHERE?字段名=值; --??帶條件刪除數(shù)據(jù),刪除id為3的記錄 DELETE?FROM?student?WHERE?id=3; --??不帶條件刪除數(shù)據(jù)刪除表中的所有數(shù)據(jù) DELETE?FROM?student;
truncate 刪除表記錄
delete 是將表中的數(shù)據(jù)一條一條刪除
truncate 是將整個(gè)表摧毀,重新創(chuàng)建一個(gè)新的表,新的表結(jié)構(gòu)和原來(lái)的表結(jié)構(gòu)一模一樣
TRUNCATE?TABLE?表名;
DQL 語(yǔ)句
簡(jiǎn)單查詢
--創(chuàng)建student表 CREATE?TABLE?student( ????id?int, ????name?varchar(20), ????age?int, ????sex?char(1), ????address?varchar(200), ????phone?varchar(20), ????birthday?date, ????math?doub1e, ????english?doub1e ); --為student準(zhǔn)備數(shù)據(jù) INSERT?INTO?student?values(1,'閆妮',43,'女','北京市',?'12222222222',?'2019-02-12',92.5,88); INSERT?INTO?student?values(2,'郭富城',21,'男','上海市','1666666666',?'2018-06-O6',97.5,65.5); INSERT?INTO?student?values(4,?'張學(xué)友',34,'男','杭州市','17777777777','2013-11-17',69,65); INSERT?INTO?student?values(5,'成龍',51,'男','哈爾濱市','15555555555',?'2005-10-12',88,97); INSERT?INTO?student?values(6,'劉德華',57,'男','盤錦市','19999999999',?'2015-11-11',74.5,92.5); INSERT?INTO?student?values(7,'馬伊刺',42,'女','長(zhǎng)沙市','18888888888'?,?'2008-03-26',86.5,71.5); INSERT?INTO?student?values(8,'黎明',49,'男','昆明市','11111111111','2000-09-14',77.5,60);I
查詢表所有數(shù)據(jù)
--??使用*表示所有列 SELECT?*?FROM?表名; SELECT?*?FROM?student; --??寫出查詢每列的名稱 SELECT?字段名1,字段名2,字段名3,...?FROM?表名; SELECT?id,name,age,sex,address,phone?FROM?表名;
查詢指定列
--??寫出查詢每列的名稱 SELECT?字段名1,字段名2,字段名3,...?FROM?表名; SELECT?id,name,age?FROM?表名;
別名查詢
--??查詢時(shí)給列、表指定別名需要使用as關(guān)鍵字 --??使用別名的好處是方便觀看和處理查詢到的數(shù)據(jù) SELECT?字段名1?AS?別名,?字段名2?AS?別名,...?FROM?表名; SELECT?name?AS?姓名,?age?AS?年齡?FROM?student;
清除重復(fù)值
--??查詢指定列?并且?結(jié)果?不出現(xiàn)重復(fù)數(shù)據(jù) SELECT?DISTINCT?字段名?FROM?表名; --??查詢name,age列并且?結(jié)果?不出現(xiàn)重復(fù)name SELECT?DISTINCT?name,?age?FROM?student;
查詢結(jié)果參與運(yùn)算
參與運(yùn)算的必須是數(shù)值類型,查詢顯示新列,不會(huì)改動(dòng)原數(shù)據(jù)
--??某列數(shù)據(jù)和固定值運(yùn)算 SELECT?列名1?+?固定值?FROM?表名; --??某列數(shù)據(jù)和其他列數(shù)據(jù)參與運(yùn)算 SELECT?列名1?+?列名2?FROM?表名; SELECT?math+english?總成績(jī)?FROM?student; SELECT?name?姓名,sex?性別,math?數(shù)學(xué)成績(jī),english?英語(yǔ)成績(jī),math+english?總成績(jī)?FROM?student; SELECT?name,age+10?FROM?student;
條件查詢
--??語(yǔ)法格式 SELECT?字段名?FROM?表名?WHERE?條件; --??準(zhǔn)備數(shù)據(jù) INSERT?into?hero?values(1,'業(yè)瑟',35,'男',320,'戰(zhàn)上',3000,0,1,'2017-05-14',14.2); INSERT?into?hero?values(2,'阿呆',19,'女',470,'刺客',1500,1100,0,'2019-06-11',15.6); INSERT?into?hero?values(3,'老人子',75,'男',430,'戰(zhàn)士',2500,0,1,?'2016-11-18',17.7); INSERT?into?hero?values(4,?'呂布',40,'男',500,'悅士',2700,1000,1,?'?2015-04-22',12.2); INSERT?into?hero?values(5,'甄姬',27,'女',210,'法師'?,1400,1900,0,'2018-06-06',13.1); INSERT?into?hero?values(6,'旗嫩',25,'女',370,'時(shí)手',1600,1200,1,'2013-02-24',11.2); INSERT?into?hero?values(7,'德瑪調(diào)亞',35,'男',220,'戰(zhàn)上'?,?39oo,1500,1,'2011-02-14',11.2); INSERT?into?hero?values(8,'孫尚否',24,'女',260,'時(shí)手',1300,900,0,'2020-03-12',9.2); INSERT?into?hero?values(9,'孫策',39,'',280,'戰(zhàn)上',3200,1100,1,'2016-07-14',16.7); INSERT?into?hero?values(10,'孫悟空',32,'男',460,'戰(zhàn)上',2900,1300,o,'2013-02-11',17.2); INSERT?into?hero?values(11,'公孫策',37,'男',210,'法師',2200,700,1,?'2019-09-16',11.4); INSERT?into?hero?values(12,'上行孫',22,'男',195,?'W客',1400,1700,1,'2013-02-16',12.4); INSERT?into?hero?values(13,'后蕾',39,'男',420,"射手',780,700,0,'2019-01-19'?,NULL);
比較運(yùn)算符
--??>?大于?<?小于?<=?小于等于??>=?大于等于??<>??!=??不等于 SELECT?*?FROM?hero?where?條件(字段?運(yùn)算符?篩選條件); --??查詢?定位為射手的英雄 SELECT?*?FROM?hero?where?location='射手';
邏輯運(yùn)算符
--??and?多個(gè)條件同時(shí)滿足 --??or?多個(gè)條件其中一個(gè)滿足 --??not?不滿足 SELECT?*?FROM?hero?where?age>35?AND?life>2500; SELECT?*?FROM?hero?where?age>35?OR?max_score<1; SELECT?*?FROM?hero?where?id=1?OR?if=4?OR?id=5; --??in?關(guān)鍵字?in里面的每個(gè)數(shù)據(jù)都會(huì)作為一次條件 SELECT?*?FROM?hero?where?id?in?(1,4,5);
范圍
--??BETWEEN?值1?AND?值2??表示從值1到值2的范圍,包頭包尾 SELECT?*?FROM?hero?WHERE?grounding_data?BETWEEN?'2013-01-01'?AND?'2017-01-01'; SELECT?*?FROM?hero?WHERE?grounding_data?>=?'2013-01-01'?AND?grounding_data?<=?'2017-01-01';
like 模糊查詢
--??LIKE?表示模糊查詢 SELECT?*?FROM?表名?WHERE?字段名?LIKE?'通配符字符串'; --??MySQL?通配符有兩個(gè)?%:?表示0個(gè)或多個(gè)字符??_:?表示一個(gè)字符 --??查詢姓孫的英雄 SELECT?*?FROM?hero?WHERE?name?LIKE?'孫%'; --??查詢名字中含有孫字的英雄 SELECT?*?FROM?hero?WHERE?name?LIKE?'%孫%'; --??查詢姓孫,且姓名是三個(gè)字的英雄 SELECT?*?FROM?hero?WHERE?name?LIKE?'孫__';
排序
--??ORDER?BY?子句?可以將查詢的結(jié)果進(jìn)行排序?(排序只是顯示方式,?不會(huì)改變數(shù)據(jù)庫(kù)中數(shù)據(jù)的順序) SELECT?字段名?FROM?表名?WHERE?字段=值?ORDER?BY?字段名?[ASC|DESC]; --??ASC?升序,默認(rèn)的?DESC?降序 --??單列排序?使用一個(gè)字段進(jìn)行排序 --??查詢年齡小于35的英雄,按照年齡升序排列 SELECT?*?FROM?hero?WHERE?age<=35?ORDER?BY?age?ASC; --??組合排序?先使用第一個(gè)字段進(jìn)行排序?如果第一個(gè)字段相同,才使用第二個(gè)字段進(jìn)行排序。以此類推 SELECT?字段名?FROM?FROM?表名?WHERE字段=值?ORDER?BY?字段名1?[ASC|DESC],?字段名2?[ASC|DESC]; --??查詢年齡小于35歲的英雄?按照年齡升序?如果年齡相同?按照生命值降序排列 SELECT?*?FROM?hero?WHERE?age<=35?ORDER?BY?age?ASC,lifr?desc;
聚合函數(shù)
之前的查詢都是橫向查詢,根據(jù)條件一行一行的進(jìn)行判斷,而聚合函數(shù)查詢是縱向查詢,對(duì)一列的值進(jìn)行計(jì)算,返回結(jié)果值。聚合函數(shù)會(huì)忽略空值
count: ?統(tǒng)計(jì)指定列的記錄數(shù)(行數(shù)),值為NULL的不統(tǒng)計(jì)
sum: ?計(jì)算指定列的數(shù)值和,如果不是數(shù)值,計(jì)算結(jié)果為0
max: ?計(jì)算指定列的最大值
min: ?計(jì)算指定列的最小值
avg: ?計(jì)算指定列的平均值,如果不是數(shù)值,計(jì)算結(jié)果為0
--??聚合函數(shù)寫在sql語(yǔ)句SELECT?后?字段名的地方 SELECT?字段名...?FROM?表名; SELECT?COUNT(age)?FROM?表名; --??查詢英雄的總數(shù) SELECT?COUTN(max_SCORE)?FROM?hero; --??對(duì)于NULL的記錄不統(tǒng)計(jì),只要只用全部字段為衡量標(biāo)準(zhǔn)就不會(huì)有遺漏的錯(cuò)誤統(tǒng)計(jì)出現(xiàn) SELECT?COUNT(*)?FROM?hero;
分組查詢
--??分組查詢是使用?GROUP?BY語(yǔ)句對(duì)查詢信息進(jìn)行分組??[HAVING?條件]?分組后的篩選 SELECT?字段1,字段2...?FROM?表名?GROUP?BY?分組字段?[HAVING?條件]; SELECT?*?FROM?hero?FROUP?BY?sex; --??這就sql語(yǔ)句會(huì)將sex相同的數(shù)據(jù)作為一組,但是會(huì)返回每組的第一條,沒有任何意義 --??分組的目的就是為了統(tǒng)計(jì),一般分組會(huì)和聚合函數(shù)一起使用 --??分組后聚合函數(shù)?不操作所有數(shù)據(jù),而是操作一組數(shù)據(jù) SELECT?SUM(life)?FROM?hero?GROUP?BY?sex;?--??返回兩組的生命值之和 --??當(dāng)使用摸個(gè)字段分組時(shí),需要將這個(gè)字段查詢出來(lái),否則看不到數(shù)據(jù)是屬于哪組的 SELECT?SUM(life),sex?FROM?hero?GROUP?BY?sex; --??查詢年齡小于30的,按性別進(jìn)行分組,統(tǒng)計(jì)每組的人數(shù) --?1.先過(guò)濾年齡小于30的?2.分組?3.最后統(tǒng)計(jì)人數(shù) SELECT?sex,COUNT(*)?FROM?hero?WHERE?age<30?GROUP?BY?sex; --??查詢年齡大于25的?按性別分組,統(tǒng)計(jì)每組人數(shù),?并只顯示性別人數(shù)大于2的數(shù)據(jù) --??錯(cuò)誤 SELECT?sex,conut(*)?FROM?hero?WHERE?age<30?GROUP?BY?sex?WHERE?COUNT(*)>2; --??正確 SELECT?sex,conut(*)?FROM?hero?WHERE?age<30?GROUP?BY?sex?HAVING?COUNT(*)>2;
limit語(yǔ)句 分頁(yè)
limit語(yǔ)句是限制的意思,限制查詢記錄的條數(shù)。limit語(yǔ)句要放在最后面
--??LIMIT語(yǔ)法格式 LIMIT?offset,length;??LIMIT?length; --??offset是指偏移量,調(diào)過(guò)的記錄數(shù)量,默認(rèn)為0??length是指需要顯示的總記錄數(shù) --??查詢hero表,從第三條開始顯示,顯示6條 SELECT?*?FROM?hero?LIMIT?2,6;
數(shù)據(jù)庫(kù)約束
約束種類
PRIMARY KEY : ?主鍵
UNIQUE : 唯一
NOT NULL : 非空
DEFAULT : 默認(rèn)
FOREIGN KEY : 外鍵
主鍵約束
每個(gè)表有且只有一個(gè)主鍵,通常以id為主鍵
主鍵的特點(diǎn):
主鍵必須包含唯一的值(不重復(fù))
主鍵不能包含NULL值
--??創(chuàng)建主鍵 字段名?字段類型?PRIMARY?KEY; --??創(chuàng)建表hero1,包含字段(id,name,age)將id作為主鍵 CREATE?TABLE?hero1( ?id?int?PRIMARY?KEY, ????name?varchar(20), ????age?int )
刪除主鍵
--?刪除主鍵 ALTER?TABLE?表名?DROP?PRIMARY?KEY; --?刪除hero1表的主鍵 ALTER?TABLE?hero1?DROP?PRIMARY?KEY;
主鍵自增
--??AUTO_INCREMENT表示自動(dòng)增長(zhǎng) --??創(chuàng)建表hero2,包含字段(id,name,age)將id作為主鍵并自動(dòng)增長(zhǎng) CREATE?TABLE?hero2( ?id?int?PRIMARY?KEY?AUTO_INCREMENT, ????name?varchar(20), ????age?int )
擴(kuò)展:默認(rèn)的AUTO_INCREMENT的起始值是1,下列語(yǔ)法可以修改起始值
AUTO_INCREMENT?表名?AUTO_INCREMENT?=?起始值;
DELETE和TRUNCATE的區(qū)別 ●DELETE刪除表中的數(shù)據(jù),但不重置AUTO_ INCREMENT的值。 ●TRUNCATE摧毀表,重建表,AUTO_ _INCREMENT重置為1
唯一約束
--??唯一約束 字段名?字段類型?UNIQUE; --??創(chuàng)建表hero3,包含字段(id,name)將name設(shè)為唯一約束,不能出現(xiàn)相同的數(shù)據(jù) CREATE?TABLE?hero3( ?id?int, ????name?varchar(20)?UNIQUE )
非空約束
--??非空約束 字段名?字段類型?NOT?NULL; --??創(chuàng)建表hero4,包含字段(id,name)將name設(shè)為非空約束,name不能為NULL CREATE?TABLE?hero4( ?id?int, ????name?varchar(20)?NOT?NULL )
默認(rèn)值
--??默認(rèn)值格式 字段名?字段類型?DEFAULT?默認(rèn)值; --??創(chuàng)建表hero5,包含字段(id,name),name默認(rèn)是英雄 CREATE?TABLE?hero5( ?id?int, ????name?varchar(20)?DEFAULT?'英雄' )
查看全部 -
powerdesigner??數(shù)據(jù)庫(kù)建模工具
查看全部 -
SQL? 結(jié)構(gòu)化查詢語(yǔ)言
查看全部 -
// 登錄格式1 mysql -u用戶名 -p密碼
mysql -uroot -proot
// 登錄格式2 mysql -hip地址 -u用戶名 -p密碼
mysql -u127.0.0.1 -uroot -proot
// 登錄格式3 mysql --host=ip地址 --user=用戶名 --password=密碼
mysql --host=127.0.0.1 --user=root --password=root
// exit 退出數(shù)據(jù)庫(kù)
查看全部 -
sql語(yǔ)句:DDL語(yǔ)句,DML語(yǔ)句,DQL語(yǔ)句,DCL語(yǔ)句
DDL語(yǔ)句操作數(shù)據(jù)庫(kù)以及表的 create, drop, alter
DML語(yǔ)句對(duì)表數(shù)據(jù)進(jìn)行insert(增加),delete(刪除),update(修改)
DQL語(yǔ)句對(duì)表數(shù)據(jù)進(jìn)行select查詢
mysql數(shù)據(jù)庫(kù)約束:主鍵約束,唯一約束,非空約束
查看全部 -
DDL:數(shù)據(jù)定義語(yǔ)言,用來(lái)定義數(shù)據(jù)庫(kù)對(duì)象;數(shù)據(jù)庫(kù)、表、列等,關(guān)鍵字:create、drop、alter等
DML:數(shù)據(jù)操作語(yǔ)言,用來(lái)對(duì)數(shù)據(jù)庫(kù)中表的數(shù)據(jù)進(jìn)行增刪改。關(guān)鍵字:insert、delete、update等
DQL:數(shù)據(jù)庫(kù)查詢語(yǔ)言,用來(lái)查詢數(shù)據(jù)庫(kù)中表的記錄,關(guān)鍵字:select,where等
DCL:數(shù)據(jù)控制語(yǔ)言,用來(lái)定義數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限和安全級(jí)別,以及創(chuàng)建用戶。關(guān)鍵字:grant,revoke等
查看全部 -
唯一約束:在這張表中這個(gè)字段的值不能重復(fù)
字段名 字段類型 UNIQUE
查看全部 -
數(shù)據(jù)可的約束
主鍵約束 ? 用來(lái)唯一標(biāo)識(shí)一條記錄(不能有空值)
創(chuàng)建: 字段名 類型名 PRIMARY key
主鍵自增
創(chuàng)建: 字段名 類型名 primary key AUTO_INCREMENT
擴(kuò)展
默認(rèn)的AUTO_INCREMENT的開始值是1,如果希望修改起始值,可用
ALTER TABLE 表名 AUTO_INCREMENT = 起始值(用delete刪除記錄后重新輸入是在起始值基礎(chǔ)上增加的)
查看全部 -
條件查詢值模糊查詢
SELECT * FROM 表名 WHERE 字段名 LIKE '通配字符串';
%:表示0個(gè)或多個(gè)任意字符
_:表示一個(gè)字符 ? ? ?? 如搜: %筆記本%
查看全部 -
DQL語(yǔ)句
簡(jiǎn)單查詢
SELECT *FROM student;
查詢指定列
SELECT l列名1,列名2,。。。FROM 表名;
別名查詢(查詢時(shí)賦別名,不會(huì)改變?cè)恚?/p>
SELECT 字段1 AS 別名,字段2 as 別名,... FROM 表名; ?? 別名為字符串時(shí)不用加單引號(hào),as 可省略。
清除重復(fù)值
SELECT DISITNCT 字段名 FROM 表名;
SELECT DISITNCT 字段名1,字段名2 FROM 表名;
查詢結(jié)果參與運(yùn)算
某列數(shù)據(jù)和固定值運(yùn)算? SELECT 列名 + 固定值 FROM 表名;
某列數(shù)據(jù)和其他列數(shù)據(jù)參與運(yùn)算 SELECT 列名1 + 列名2 FROM 表名;
注意:運(yùn)算結(jié)果是查詢結(jié)果,不改變?cè)?/p>
查看全部 -
修改表數(shù)據(jù)
全部修改:
UPDATE 表名 set 列 = 修改值;
update student set sex = '女';
條件修改
update student set sex = '男' where id = 2;
多字段條件修改
update student set sex = '女' , address = '上海' where id = 3;
刪除表
全部刪除(表還在,但為空)
DELECT FROM 表名;
條件刪除(刪除行)
DELETE FROM student where id = 3;
TRUNCATE TABLE 表名; ? ? 先摧毀該表,并創(chuàng)建一個(gè)結(jié)構(gòu)名、結(jié)構(gòu)一樣的新表,但無(wú)數(shù)據(jù)。而delete則是一條一條的刪除數(shù)據(jù)
查看全部 -
蠕蟲復(fù)制:
創(chuàng)建student1表,結(jié)構(gòu)與student相同
CREATE TABLE student1 LIKE student;
將student表中的數(shù)據(jù)復(fù)制到student1中(復(fù)制全部字段)
INSERT INTO student1 SELECT * FROM student;
SELECT * FROM student1;
復(fù)制部分字段
如只想復(fù)制student表中的name, address字段到student2中:
CREATE TABLE student2 LIKE student1;
INSERT INTO student2(name, address)SELECT nmae, address FROM student1;
SELECT * FROM student2;
查看全部 -
DML語(yǔ)句:數(shù)據(jù)操作語(yǔ)言
插入insert
(添加所有值)
第一種:INSERT INTO 表名 (字段名1, 字段名2, 字段名3)VALUES (值1, 值2, 值3);
第二種:INSERT INTO 表名 VALUES (值1, 值2, 值3);
(添加部分值)
INSERT INTO 表名 (字段名1, 字段名2, ...)VALUES (值1, 值2,...);
沒有添加數(shù)據(jù)的字段會(huì)使用NULL
查看全部 -
DDL操作表:前提先使用某個(gè)數(shù)據(jù)庫(kù)
創(chuàng)建表: CREATE TABLE 表名 (字段1 類型1, 字段2 類型2, ...);
字段須為英文
CREATE TABLE student (id int, name varchar(10), birthday data, sex char(1));
char(M)\varcgar(M), M表示字符或字符串的規(guī)格大小
SHOW TABLES; ? 查看表
DESC 表名; ?? 查看表結(jié)構(gòu)
SHOW CREATE TABLE 表名; ?? 查看創(chuàng)建表的SQL語(yǔ)句
CREATE TABLE 新表明 LIKE 舊表名; ?? 快速創(chuàng)建相同表結(jié)構(gòu)的表
DROP TABLE 表名;? 刪除表
SHOW TABLES;
DROP TABLE IF EXISTS 表名; ? 判斷表是否存在并刪除表
SHOW TABLES;
修改表結(jié)構(gòu):(不常用)
ALTER TABLE 表名 ADD 列名 類型; ? ? ? ? ? ? ? ? ? ? 添加列
具體操作:為學(xué)生表添加一個(gè)新的字段remark,類型為varchar(20)
ALTER TABLE student ADD remark VARCHAR(20);
DESC student;
ALTER TABLE 表名 MODIFY 列名 新的類型; ? ? ? ? ? ? 修改列類型
ALTER TABLE student MODIFY remark varchar(100);
DESC student;
ALTER TABLE 表名 CHANGE 舊列名 新列名 類型; ? ? ? ? ? ? 修改列名
ALTER TABLE studentCHANGE remark intro varchar(30);
DESC student;
ALTER TABLE 表名 DROP 列名; ? ? ? ? ? ?? 刪除列
ALTER TABLE student DROP intro;
DESC student;
RENAME TABLE 表名 TO 新表名; ? ? ? ? ? ? ? ? 修改表名
RENAME TABLE student TO student2;
SHOW TABLES;
ALTER TABLE 表名 CHARACTER SET 字符集; ? ? ? ? ? ?? 修改字符集
具體操作:將student2表的編碼修改為gbk
SHOW CREATE TABLE student2;
ALTER TABLE student2 character set gbk;
SHOW CREATE TABLE student2;
查看全部 -
mysql -uroot -proot
創(chuàng)建:CREATE DATABASE db1;
查看:SHOW DATABASES;
CREATE DATABASE IF NAT EXISTS db2;(用于數(shù)據(jù)庫(kù)的備份與還原)
CREATE DATABASE IF NAT EXISTS db2;
SHOW DATABASE;
CREATE DATABASE db3 CHARACTER SET gbk;
SHOW DATABASES;
查看數(shù)據(jù)庫(kù)創(chuàng)建時(shí)候的字符(字符集)語(yǔ)句(定義信息):
SHOW CREATE DATABASE db3;
SHOW CREATE DATABASE db2;
修改數(shù)據(jù)庫(kù)字符集格式
ALTER DATABASE db2 DEFAULT CHARACTER SET gbk;
DROP DATABASE db3;(刪除數(shù)據(jù)庫(kù))
查看正在使用的數(shù)據(jù)庫(kù):
SELECT DATABASE();
使用/切換數(shù)據(jù)庫(kù):
USE db1;
SELECT DATABASE();
USE db2;
SELECT DATABASE();
?
查看全部
舉報(bào)