MySQL數(shù)據(jù)語(yǔ)言操作

1. DDL 數(shù)據(jù)的定義語(yǔ)言

1.1 庫(kù)的定義

1) 增
CREATE DATABASE luping CHARSET utf8mb4;  
規(guī)范:  *****
1. 字符集必須設(shè)置
2. 不要有大寫(xiě)字母
3. 不要有數(shù)字開(kāi)頭
5. 庫(kù)名要和業(yè)務(wù)有關(guān)
6. 庫(kù)名不要太長(zhǎng)
7. 庫(kù)名不能是關(guān)鍵字

(2) 刪
DROP DATABASE LUPING;
一般只有管理員有權(quán)限刪除數(shù)據(jù)庫(kù).

(3) 改
ALTER DATABASE test CHARSET utf8mb4;

(5) 查
show databases;
SHOW CREATE DATABASE test;

1.2 表的定義

(1)增
表屬性:
存儲(chǔ)引擎類(lèi)型
字符集
列屬性:
數(shù)據(jù)類(lèi)型
約束 
其他屬性
USE luping;

CREATE TABLE stu (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '學(xué)號(hào)',
sname VARCHAR(32) NOT NULL COMMENT '姓名',
age TINYINT NOT NULL DEFAULT 18 COMMENT '年齡',
sex ENUM('male','female','others') NOT NULL DEFAULT 'others' COMMENT '性別',
intime DATETIME NOT NULL DEFAULT NOW() COMMENT '入學(xué)時(shí)間'
)ENGINE=INNODB CHARSET=utf8mb4 COMMENT '學(xué)生表';

建表規(guī)范:  *****
1. 表名: 小寫(xiě),業(yè)務(wù)相關(guān),不能數(shù)字開(kāi)頭,不能太長(zhǎng),不能是關(guān)鍵字. 
2. 表屬性: 字符集,存儲(chǔ)引擎,注釋 
3. 列屬性: 
合適的數(shù)據(jù)類(lèi)型(簡(jiǎn)短,合適的,完整的) 
必須要有PK(id 自增長(zhǎng)數(shù)字列).
每個(gè)列要非空,并設(shè)定默認(rèn)值.
必須要有注釋.

(2)刪
DROP TABLE xuesheng;
TRUNCATE TABLE xuesheng;

區(qū)別:
drop : 表結(jié)構(gòu)+表行
truncate: 表行刪除(表段物理清空)

(3)改 *****
例子: 
-- 在stu表中添加shouji列 *****
ALTER TABLE stu ADD shouji BIGINT NOT NULL UNIQUE COMMENT '手機(jī)號(hào)'; 
-- 在name列后添加dizhi列
ALTER TABLE stu ADD dizhi VARCHAR(100) NOT NULL COMMENT '地址' AFTER sname;
-- 在首列添加qq號(hào)列
ALTER TABLE stu ADD qq BIGINT NOT NULL UNIQUE COMMENT 'qq號(hào)' FIRST;
-- 刪除列
ALTER TABLE stu DROP qq ;
ALTER TABLE stu DROP shouji;
ALTER TABLE stu DROP dizhi;

-- 修改表屬性 
ALTER TABLE stu ENGINE=INNODB;

-- 查詢(xún)表屬性
SHOW CREATE TABLE xs;

-- 修改表名 *****
ALTER TABLE stu RENAME TO xs;

說(shuō)明: 歸檔表,日志表 
rname老的表為新名: xxxx_201906
CREATE TABLE xxx LIKE xxxx_201906;
-- 歸檔表例子  *****
--- 1. RENAME 舊表 
ALTER TABLE xs RENAME TO xs_201911;
CREATE TABLE xs LIKE xs_201911;
--- 2. Oracle 物化視圖 (了解)

-- 將sex列名改為gender,數(shù)據(jù)類(lèi)型改為tinyint,加個(gè)注釋(0代表nv,1代表男)
ALTER TABLE xs CHANGE sex gender TINYINT NOT NULL DEFAULT 1 COMMENT '0代表nv,1代表男' ;

注意: 
所有表結(jié)構(gòu)變更,都會(huì)自動(dòng)鎖表.盡量避免大表Online DDL.

建議:
    1. 最好業(yè)務(wù)不繁忙做
    2. 使用第三方工具pt-osc (percona-toolkit) 
    https://www.percona.com/software/database-tools/percona-toolkit
    3. 對(duì)于歸檔表,可以使用pt-archiver 

(5)查
DESC xs;

2. DCL

grant 
revoke
show grants for 

3.DML 數(shù)據(jù)操作語(yǔ)言

主要針對(duì)表中數(shù)據(jù)行操作.

3.1 insert 數(shù)據(jù)插入

DESC xs;
INSERT INTO xs(id,sname,age,gender,intime)
VALUES(1,'zs',18,1,'2019-11-13');     
SELECT * FROM xs;
INSERT INTO xs(id,sname,age,gender,intime)
VALUES(2,'ls',18,1,'2019-11-13'),(3,'xh',19,0,'2019-11-13');
SELECT * FROM xs;

INSERT INTO xs
VALUES(4,'ss',18,1,'2019-11-13');

INSERT INTO xs(sname,age,gender) 
VALUES('w5',18,1);

3.2 DELETE 數(shù)據(jù)刪除

DELETE FROM xs  WHERE id=4;
SELECT * FROM xs;
說(shuō)明:
DELETE 語(yǔ)句數(shù)據(jù)邏輯刪除,磁盤(pán)空間不會(huì)立即釋放,會(huì)產(chǎn)生碎片.
思考: 2億行的大表,批量刪除5000w(按時(shí)間條件)

3.3 UPDATE 數(shù)據(jù)修改

UPDATE xs SET age=28 WHERE id=5;

3.5 偽刪除

刪除id=5的行,偽刪除實(shí)現(xiàn)
ALTER TABLE xs ADD state TINYINT NOT NULL DEFAULT 1;
SELECT * FROM xs;
原語(yǔ)句:
DELETE FROM xs WHERE id=5;
替換為: 
UPDATE xs SET state=0 WHERE id=5;

原業(yè)務(wù)語(yǔ)句:
SELECT * FROM xs;
替換為:
SELECT * FROM xs WHERE state=1;

5. DQL 數(shù)據(jù)查詢(xún)語(yǔ)言 *****

5.1 select *****

  • 單獨(dú)使用
(1) 查詢(xún)參數(shù)
SELECT @@datadir;
SELECT @@port;
SELECT @@socket;
SELECT @@basedir;
SELECT @@innodb_flush_log_at_trx_commit;
SHOW VARIABLES ;

(2) 簡(jiǎn)易計(jì)算
SELECT 1024*1024;
SELECT 1+2;

(3) 函數(shù)查詢(xún)  
SELECT NOW();
SELECT CONCAT("吃飯了掉弛,出動(dòng)捺癞!")
  • 5.1.2 配合多子句(單表查詢(xún)標(biāo)準(zhǔn)用法)
多子句應(yīng)用順序: *****
(1) FROM     必須添加的
(2) WHERE    
(3) GROUP BY 
(5) HAVING 
(6) ORDER BY  
(7) LIMIT 

-- from 子句 應(yīng)用
--- 1. 查詢(xún)city表中的所有數(shù)據(jù)(不代表生產(chǎn)操作)
SELECT * FROM city;
--- 2. 查詢(xún)city表中所有的name和population
SELECT NAME,population FROM city;

-- where 子句 應(yīng)用
-- where 的等值查詢(xún)
--- 1. 查詢(xún)中國(guó)所有城市的信息
SELECT * FROM city 
WHERE countrycode='CHN';

-- where 的不等值查詢(xún)(> < >= <= !=)
--- 1. 城市人口小于100人的城市
SELECT * FROM city
WHERE population<100;

--- 2. 不是中國(guó)的城市信息 
SELECT * FROM city
WHERE countrycode <> 'CHN';

-- where 配合 like語(yǔ)句使用
--- 1. 查詢(xún)國(guó)家代號(hào)是CH開(kāi)頭的城市信息.
SELECT * FROM city 
WHERE countrycode LIKE 'CH%';

注意: LIKE 語(yǔ)句 百分號(hào)不要出現(xiàn)在查詢(xún)條件前,因?yàn)椴樵?xún)不走索引.

-- where 配合邏輯連接符(and or)

--- 1. 中國(guó)城市人口大于500w的城市
SELECT * FROM city
WHERE countrycode='CHN' AND population>5000000 ;

--- 2. 中國(guó)或者美國(guó)城市信息
SELECT * FROM city
WHERE countrycode='CHN' OR countrycode='USA';


-- where 配合邏輯連接符(and or)
--- 1. 中國(guó)城市人口大于500w的城市
SELECT * FROM city
WHERE countrycode='CHN' AND population>5000000 ;

--- 2. 中國(guó)或者美國(guó)城市信息
SELECT * FROM city
WHERE countrycode='CHN' OR countrycode='USA';

-- where 配合 in 
--- 中國(guó)或者美國(guó)城市信息
SELECT * FROM city 
WHERE countrycode IN ('CHN','USA');


-- where 配合 between and
--- 查詢(xún) 人口數(shù)量在100w-200w之間的城市
SELECT * FROM city
WHERE population >= 1000000 AND population <= 2000000;

SELECT * FROM city
WHERE population BETWEEN 1000000 AND 2000000;
  • group by (分組) + 聚合函數(shù)應(yīng)用
聚合函數(shù)? 
MAX()        最大值
MIN()        最小值
AVG()        平均值
COUNT()      數(shù)量
SUM()        求和
GROUP_CONCAT() 列轉(zhuǎn)行

說(shuō)明:  
有 GROUP by子句,必然會(huì)有聚合函數(shù)  
在業(yè)務(wù)查詢(xún)需求中,需要對(duì)于表中數(shù)據(jù)按照數(shù)據(jù)特點(diǎn)進(jìn)行分別統(tǒng)計(jì)時(shí),GROUP BY + 聚合函數(shù)來(lái)實(shí)現(xiàn)

--- 1. 統(tǒng)計(jì)世界的所有人口總和
SELECT  SUM(population) FROM city ;

--- 2. 統(tǒng)計(jì)國(guó)家的總?cè)丝跀?shù)量
SELECT countrycode, SUM(population) FROM city
GROUP BY countrycode ;

--- 3. 統(tǒng)計(jì)中國(guó)每個(gè)省的總?cè)丝跀?shù)
SELECT countrycode,district , SUM(population) 
FROM city 
GROUP BY district;

--- 5. 統(tǒng)計(jì)中國(guó)每個(gè)省的城市名列表.
SELECT district,GROUP_CONCAT(NAME) 
FROM city 
WHERE countrycode='CHN' 
GROUP BY district;

--- 6. 關(guān)于 GROUP BY 的限制
RROR 1055 (42000): Expression 
-- #1 of SELECT list is not in GROUP BY clause and contains nonaggregated 
-- column 'world.city.CountryCode' which is not functionally dependent 
-- on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

--- sql_mode=only_full_group_by
1. 在 SELECT 后的條件,不在 GROUP BY 后
2. 在 SELECT 后的條件,不在函數(shù)里包裹
3. 如果select后列是唯一值時(shí)候,就不會(huì)報(bào)錯(cuò)
5. GROUP BY 的條件列是主鍵或者唯一鍵時(shí).

總結(jié): sql_mode=only_full_group_by 為了防止出現(xiàn)結(jié)果集1對(duì)多的關(guān)系.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛹稍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌访圃,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異覆履,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)费薄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)硝全,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人楞抡,你說(shuō)我怎么就攤上這事伟众。” “怎么了召廷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵凳厢,是天一觀的道長(zhǎng)账胧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)先紫,這世上最難降的妖魔是什么治泥? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮遮精,結(jié)果婚禮上居夹,老公的妹妹穿的比我還像新娘。我一直安慰自己仑鸥,他們只是感情好吮播,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著眼俊,像睡著了一般意狠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疮胖,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天环戈,我揣著相機(jī)與錄音,去河邊找鬼澎灸。 笑死院塞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的性昭。 我是一名探鬼主播拦止,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼糜颠!你這毒婦竟也來(lái)了汹族?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤其兴,失蹤者是張志新(化名)和其女友劉穎顶瞒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體元旬,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡榴徐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匀归。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坑资。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖穆端,靈堂內(nèi)的尸體忽然破棺而出盐茎,到底是詐尸還是另有隱情,我是刑警寧澤徙赢,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布字柠,位于F島的核電站探越,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏窑业。R本人自食惡果不足惜钦幔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望常柄。 院中可真熱鬧鲤氢,春花似錦、人聲如沸西潘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喷市。三九已至相种,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間品姓,已是汗流浹背寝并。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腹备,地道東北人衬潦。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像植酥,于是被迫代替她去往敵國(guó)和親镀岛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容