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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章