1. 程式人生 > >mysql 常用命令技巧大全

mysql 常用命令技巧大全

#刪除資料庫
DROP DATABASE IF  EXISTS learn;

#建立資料庫
CREATE DATABASE learn CHARSET utf8;

#選擇資料庫
USE learn;

#刪除資料庫表
DROP TABLE IF  EXISTS tb1;
DROP TABLE IF  EXISTS tb2;
DROP TABLE IF  EXISTS tb3;

#建立表
CREATE TABLE tb1(
id INT(11) AUTO_INCREMENT NOT NULL COMMENT '主鍵',
nickname VARCHAR(50) COMMENT '暱稱',
create_time DATETIME NOT
NULL COMMENT '建立時間', update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY(id) ); #存在則不執行建立表 CREATE TABLE IF NOT EXISTS tb1( id INT(11) UNSIGNED AUTO_INCREMENT NOT NULL COMMENT '主鍵',#UNSIGNED 不使用負數,擴大正數上限 nickname VARCHAR(50) COMMENT '暱稱', create_time DATETIME NOT
NULL COMMENT '建立時間', update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY(id)#指定主鍵 ); CREATE TABLE IF NOT EXISTS tb2( id INT(11) UNSIGNED AUTO_INCREMENT NOT NULL COMMENT '主鍵',#UNSIGNED 不使用負數,擴大正數上限 username VARCHAR(50) NOT NULL COMMENT '賬號', pass_word VARCHAR(50
) NOT NULL COMMENT '密碼', create_time DATETIME NOT NULL COMMENT '建立時間', update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY(id)#指定主鍵 ); #新增欄位 ALTER TABLE tb1 ADD COLUMN user_role INT(2) COMMENT '使用者角色';#COLUMN可省略 #修改以存在列 ALTER TABLE tb1 MODIFY user_role INT(2) DEFAULT '0'; #可以增加字元型別的列寬度 #可以增加數值型別的寬度和精度 #只有空列或空表才可以減少列寬度 #空列才可以改變資料型別 #改變列的預設值只會影響以後的操作 #新增欄位 ALTER TABLE tb1 ADD COLUMN test1 INT(2) COMMENT '測試刪除列'; #刪除欄位 COLUMN可省略 ALTER TABLE tb1 DROP COLUMN test1; #插入資料 INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (1,'張三',NOW(),1); INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (3,'王五',NOW(),1); INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (4,'牛六',NOW(),1); INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (5,'陳7',NOW(),2); INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (6,'陳8',NOW(),2); INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (7,'陳9',NOW(),2); INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (8,'趙10',NOW(),3); INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (9,'趙11',NOW(),4); INSERT INTO tb1 (id,nickname,create_time,user_role) VALUES (10,'趙12',NOW(),4); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (1,'111','111',NOW()); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (2,'222','222',NOW()); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (3,'333','333',NOW()); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (4,'444','444',NOW()); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (5,'555','555',NOW()); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (7,'777','777',NOW()); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (8,'888','888',NOW()); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (9,'999','999',NOW()); INSERT INTO tb2 (id,username,pass_word,create_time) VALUES (10,'101010','101010',NOW()); CREATE TABLE IF NOT EXISTS tb3( id INT(11) UNSIGNED AUTO_INCREMENT NOT NULL COMMENT '主鍵',#UNSIGNED 不使用負數,擴大正數上限 username VARCHAR(50) NOT NULL COMMENT '賬號', pass_word VARCHAR(50) NOT NULL COMMENT '密碼', create_time DATETIME NOT NULL COMMENT '建立時間', update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY(id)#指定主鍵 ); #使用子查詢複製表資料到另一個表 INSERT INTO tb3 (id,username,pass_word,create_time,update_time) SELECT id,username,pass_word,create_time,update_time FROM tb2; #更新表 UPDATE tb1 SET nickname='張三暱稱被更新' WHERE id=1; #刪除錶行資料 DELETE FROM tb3 WHERE id=1; #建立索引 #新增PRIMARY KEY(主鍵索引) #ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) #新增UNIQUE(唯一索引) #ALTER TABLE `table_name` ADD UNIQUE (`column`) #新增INDEX(普通索引) #ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) #新增FULLTEXT(全文索引) #ALTER TABLE `table_name` ADD FULLTEXT ( `column`) #新增多列索引 #ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` ) #刪除索引 #DROP INDEX index_name ON talbe_name #ALTER TABLE table_name DROP INDEX index_name #ALTER TABLE table_name DROP PRIMARY KEY #檢視 SELECT * FROM tb1 GROUP BY user_role; #建立檢視 CREATE VIEW group_tb1 AS SELECT * FROM tb1 GROUP BY user_role; #使用檢視 SELECT * FROM group_tb1; #內連線(最常用) SELECT t1.id,t1.nickname,t1.user_role,t1.create_time,t2.username FROM tb1 t1 INNER JOIN tb2 t2 ON t1.id=t2.id; #左外連線 SELECT t1.id,t1.nickname,t1.user_role,t1.create_time,t2.username FROM tb1 t1 LEFT JOIN tb2 t2 ON t1.id=t2.id; #右外連線 SELECT t1.id,t1.nickname,t1.user_role,t1.create_time,t2.username FROM tb1 t1 RIGHT JOIN tb2 t2 ON t1.id=t2.id; #全外連線(mysql不支援) #運算子 + - * / () SELECT 1+1+t1.user_role FROM tb1 t1; #字串連線 SELECT CONCAT_WS('-',t1.id,t1.nickname) FROM tb1 t1; #條件限制語句 where #distinct 結果集去重複 升序 SELECT DISTINCT t1.user_role FROM tb1 t1; SELECT DISTINCT t1.user_role ,t1.create_time FROM tb1 t1; #in關鍵字 SELECT * FROM tb1 t1 WHERE t1.user_role IN(4,3); #使用 exists代替in SELECT * FROM tb1 t1 WHERE EXISTS(SELECT * FROM tb1 t2 WHERE t2.id=t1.id AND t2.user_role IN(4,3)); #使用 between and 代替in (必須由小到大) SELECT * FROM tb1 t1 WHERE t1.user_role BETWEEN 3 AND 4; #比較符 > < >= <= = 不等於 != <> ^= #使用比較符代替in SELECT * FROM tb1 t1 WHERE t1.user_role >=3 AND t1.user_role <=4; #模糊搜尋 like % 不確定多個字元 _ 不確定單個字元 搜尋 % _時 要轉義 \_ \% SELECT * FROM tb1 t1 WHERE t1.nickname LIKE '%陳%'; #排序 desc 降序 升序 SELECT * FROM tb1 t1 ORDER BY t1.user_role DESC; #多個排序級別 SELECT * FROM tb1 t1 ORDER BY t1.user_role DESC ,t1.create_time ASC; #分組函式 1 2017-08-11 22:13:46 SELECT * FROM tb1 t1 ORDER BY t1.create_time DESC; SELECT COUNT(id),t1.* FROM tb1 t1 GROUP BY t1.user_role; #查詢每組最新的記錄 #錯誤寫法,預設顯示第一次插入的行 即升序 SELECT * FROM tb1 t1 GROUP BY t1.user_role ORDER BY t1.create_time DESC; #錯誤寫法,子查詢的排序不能起效 SELECT * FROM (SELECT * FROM tb1 t1 ORDER BY t1.create_time )tmp GROUP BY tmp.user_role; #正確寫法 獲取最新的一條或n條 SELECT * FROM tb1 t1 WHERE ( SELECT COUNT(*) FROM tb1 t2 #分組欄位連線 WHERE t2.user_role=t1.user_role #排序欄位比較 AND t2.create_time >t1.create_time )<2 ORDER BY t1.create_time DESC #計數 count() SELECT COUNT(*) FROM tb1 t1; SELECT COUNT(*) FROM tb1 t1 GROUP BY t1.user_role; #平均 avg() SELECT AVG(t1.user_role) FROM tb1 t1; #總和 sum() SELECT SUM(t1.user_role) FROM tb1 t1; #最小 min() SELECT MIN(t1.user_role) FROM tb1 t1; #最大 max() SELECT MAX(t1.user_role) FROM tb1 t1; #分組限制語句 having SELECT COUNT(id),t1.* FROM tb1 t1 GROUP BY t1.user_role HAVING COUNT(t1.user_role) <=2; #子查詢 可用在 select 子句 from 子句 where 子句 等等 SELECT (SELECT COUNT(*) FROM tb1 t1) FROM tb1; #臨時表 SELECT * FROM (SELECT * FROM tb1 t1) tmp #臨時表分頁 SELECT * FROM (SELECT * FROM tb1 t1 LIMIT 0,5 ) tmp