mysql 常用命令技巧大全
阿新 • • 發佈:2019-01-24
#刪除資料庫
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