MySql命令清单
一直以來都是使用 MySql 的可視化工具來創建表與數據庫,為了增強一下基礎知識,花了一點時間把 MySql 又復習了一遍。把一些命令總結了一下,留作以后的查閱,也希望能夠為大家提供一些幫助。
一、數據庫
# 顯示數據庫管理系統中所有數據庫 SHOW DATABASES;# 創建數據庫 DROP DATABASE IF EXITS [庫名]; CREATE DATABASE [數據庫名];# 選擇數據庫 USE [數據庫名];# 查看當前正在使用的數據庫 SELECT DATABASE();# 查看數據庫創建語句 SHOW CREATE DATABASE [數據庫名]; # 更改數據庫編碼 ALTER DATABASE [數據庫名] CHARACTER SET [編碼格式];# 刪除一個數據庫 DROP DATABASE IF EXITS [數據庫名];二、數據表
# 查看某個數據庫中的所有表,通用命令(即:沒有選擇數據庫時也可以使用) SHOW TABLES FROM [庫名];# 創建數據表 DROP TABLE IF EXITS [表名]; CREATE TABLE test(id INT PRIMARY KEY AUTO_INCREMENT , name VARCHAR(20) NOT NULL ,password VARCHAR(20) NOT NULL )ENGINE=InnoDB DEFAULT CHARSET=utf8;# 查看數據表結構 DESC [表名]# 查看數據表創建語句 SHOW CREATE TABLE [表名]# 添加數據列在指定的位置,默認加在最后一列 ALTER TABLE [表名] ADD COLUMN [列名] [類型] [約束] FIRST | [AFRET] [列名];# 刪除數據列 ALTER TABLE [表名] DROP COLUMN [列名];# 更改數據列屬性值 ALTER TABLE [表名] MODIFY [列名] [類型] [約束];# 修改數據表的名字 RENAME TABLE [原名] TO [新名];# 修改數據列的名字 ALTER TABLE [表名] CHANGE COLUMN [原列名] [更改列名] [類型] [約束];# 修改數據表字符編碼 ALTER TABLE [表名] CHARACTER SET [編碼];# 添加外鍵約束 ALTER TABLE [表名] ADD CONSTRAINT [外鍵名] FOREIGN KEY([外鍵列]) REFERENCES [關聯表名]([列名]);# 表的復制,僅復制表的結構 CREATE TABLE [復制表名] LIKE [被復制的表名]; # 復制表與表中的數據 # 也可以添加篩選條件,只復制部分列與數據 # 也可以用于復制表的結果,只要查詢的數據為 'false' 即可 CREATE TABLE [復制表名] SELECT * FROM [被復制表名];# 刪除數據表 DROP TABLE [表名];# 刪除主鍵、唯一、外鍵 ALTER TABLE [表名] DROP PRIMARY KEY | INDEX [名稱] | FOREIGN KEY [外鍵名];三、函數
字符函數
# 獲取參數字節數 LENGTH([參數])# 字符拼接 CONCAT ([列名1], [列名2], ...)# 大小寫轉換,UPPER 大寫,LOWER 小寫 UPPER([參數]) LOWER([參數])# 字符截取,注意 MySql 的索引是從 1 開始的 SUBSTR([參數], startIndex) SUNSTR([參數], startIndex, subCount)# 返回自串第一次出現的索引,找不到返回0 INSTR([原字符], [自串])# 格式化,默認去除首和尾的空格 TRIM('[參數]')# 指定格式化,指定去除參數的首尾字符 TRIM('[字符]' FROM '[參數]')# 左右字符填充,使用指定的字符填充原參數,直到指定的長度為止 LPAD([參數], [長度], [字符])# 字符替換 REPLACE([原字符], [被替換的字符], [替換字符])數學函數
# 四舍五入 ROUND([浮點數], [保留位數])# 向上取整 CEIL([浮點數])# 向下取整 FLOOR([浮點數])# 截取,小數點后保留幾位 TRUNCATE([浮點數], [位數])# 取余,[a % b = a - a / b * b] MOD([a], [b])日期函數
# 返回系統當前時間:日期 + 時間 NOW()# 只返回系統當前日期 CURDATE()# 只返回系統當前時間 CURTIME()# 返回系統當前月份(數字顯示),其他同理 MONTH(NOW())# 返回系統當前是星期幾(英文顯示) DAYNAME(NOW())# 日期格式轉換,可以將字符串轉換為對應的日期格式 STR_TO_DATE('3-4 2000', '%m-%d %Y') -> 2000-03-04# 日期格式轉換,將日期格式轉換成字符串 DATA_FORMAT([日期], [轉換格式])流程控制函數
# IF 條件判斷,類似于三目運算符 IF(10 > 1, 'TRUE', 'FALSE') -> TRUE# CASE 語句,相當于 switch-case 語句 CASE [判斷的列名或表達式] WHEN [常量1] THEN [自定義輸出] WHEN [常量2] THEN [自定義輸出] ELSE [自定義輸出] END;分組函數
分組函數支持和 DISTINCT 一起使用,表示去重后再計算結果。使用方式是直接在列名前面加上 DISTINCT 。
# 求和 SUM([列名])# 平均值 AVG([列名])# 最大最小值 MIN([列名])# 非空列名的行數 COUNT([列名])# 統計所有有效行數 COUNT(*)關于更多的函數請參考:https://www.w3schools.com/sql/sql_ref_mysql.asp
四、約束
# 非空約束 NOT NULL# 默認約束 DEFAULT# 唯一約束,允許為空,但只允許一個為空,可以使用多個列組合成唯一約束 UNIQUE# 主鍵約束,不允許為空,一個表中至多有一個 PRIMARY KEY# 外鍵約束 FOREIGN KEY# 通用寫法 CREATE TABLE [表名] ([列1] [類型] PRIMARY KEY [其他約束 ...],[列2] [類型] NOT NULL,[列3] [類型] UNIQUE,[列4] [類型] DEFAULT [默認值],CONSRTAINT [外鍵名] FOREIGN KEY([當前表的列名]) REFERENCES [關聯表]([關聯表中的列名]) );五、數據查詢
# 查詢數據表中的總記錄數 SELECT COUNT(*) FROM [表名];# 查詢結果去重 SELECT DISTINCT [列名] FROM [表名];# 查詢結果拼接 SELECT CONCAT([列名1], [列名2] ...) FROM [表名];# 查詢結果為空特殊處理 SELECT IFNULL ([列名], [處理]) FROM [表名]; # 模糊查詢,'%' 表示任意多個字符,包括 0 個字符,'_' 表示單個字符 SELECT * FROM [表名] WHERE [列名] LIKE '%[關鍵字]%';# 'BETWEEN' 'AND' 區間查詢,相當于 ">=" "<=" SELECT * FROM [表名] WHERE [列名] BETWEEN [范圍1] AND [范圍2];# 'IN' 關鍵字范圍查詢,相當于多個 'OR' 連接,注意類型匹配, SELECT * FROM [表名] WHERE [列名] IN ([值1], [值2]...);# 空處理, MySql 不支持運算符處理空,可以使用 'IS NULL' 和 'IS NOT NULL' SELECT * FROM [表名] WHERE [列名] IS NULL;# 查詢結果排序,'ASC' 升序,'DESC' 降序,默認是升序,支持別名、表達式函數與多字段排序 SELECT * FROM [表名] ORDER BY [列名] [排序方式];# 分組查詢,'WHERE'用于在分組前篩選, 'HAVING'用于分組后篩選, # 也可以使用表達式和函數,通常與分組函數結合使用 SELECT [列名], [函數] FROM [表名] WHERE [列名] [條件] [值] GROUP BY [列名] HAVING [列名] [條件] [值] ORDER BY [列名] [升序或降序]# 范圍等值查詢 SELECT * FROM [表名] WHERE [列名] iN([值1], [值2] ...);# 分頁查詢,注意索引是從 0 開始的,LIMIT 一般在 SQL 語句最后面 # 分頁查詢算法:index = (page - 1) * size; SELECT * FROM [表名] LIMIT [索引], [顯示的行數];MySql連接查詢與聯合查詢:https://blog.csdn.net/codejas/article/details/80227404
六、數據插入
# 選擇列名插入數據 # 第一種方式支持多行數據插入與子查詢 INSERT INTO [表名]([列名1], [列名2] ...) VALUES([值1], [值2] ...); INSERT INTO [表名] SET [列名1] = [值1], [列名22] = [值2] ...# 為所有列插入數據,值的順序要和數據表中列的順序一致 INSERT INTO [表名] VALUES([值1], [值2] ...); # 插入多行數據 INSERT INTO [表名] VALUES([值1], [值2] ...), ([值1], [值2] ...), ([值1], [值2] ...);七、數據更新
# 更新數據庫中所有的行數 UPDATE [表名] SET [列名1] = [值1], [列名2] = [值2] ...;# 按條件更新數據 UPDATE [表名] SET [列名1] = [值1], [列名2] = [值2] ... WHERE [列名] [條件] [條件值];# 多表連接更新 UPDATE [表名1] [連接類型] JOIN [表名2] ON [連接條件] SET [列名1] = [值1], ... WHERE [篩選條件];八、數據刪除
# 刪除表中所有的數據 # TRUNCATE 后不可以加 'WHERE' 篩選條件,并且不支持事務回滾 DELETE FROM [表名]; TRUNCATE TABLE [表名];# 按條件刪除 DELETE FROM [表名] WHERE [刪除條件];# 多表連接刪除 DELETE [表名1], ... FROM [表名1] [連接類型] JOIN [表名2] ON [連接條件] WHERE [篩選條件];九、視圖
# 創建試圖或修改視圖名,試圖存在修改,不存在修改 CREATE OR REPLACE VIEW [視圖名] AS [SQL語句];# 查看試圖結構 DESC [視圖名];# 使用試圖 SELECT * FROM [視圖名] WHERE [查詢條件]; # 刪除試圖 DROP VIEW [視圖名1], ...;十、變量
#查看系統全局變量或會話變量 SHOW GLOBAL|SESSION VARIABLES;# 模糊查詢匹配系統變量 SHOW GLOBAL|SESSION VARIABLES LIKE '[條件]';# 查看某個具體的系統變量值 SHOW @@GLOBAL|SESSION.[系統變量名];# 修改系統變量值 SET GLOBAL|SESSION [變量名] = [變量值];# 自定義用戶變量并初始化,只在當前的會話有效 SET @[變量名]=[變量值]; SET @[變量名]:=[變量值]; SELECT @[變量名]:=[變量值];# 查看自定義用戶變量 SELECT @[變量名];# 自定義局部變量,只在 BEGIN END 中有效,并且需要聲明在第一行 DECLARE [變量名] [類型] DEFAULT [默認值];# 設置局部變量值 SET @[變量名]=[變量值]; SET @[變量名]:=[變量值]; SELECT @[變量名]:=[變量值];# 獲取局部變量值 SELECT [變量值];十一、其他
# 查看事務的隔離級別 SELECT @@TX_ISOLATION;# 設置事務的隔離級別 SET SESSION|GLOBAL TRANSACTION ISOLACTION LEVEL [隔離級別];十二、更新
按月份查詢數據并對某一字段求和
SELECTMONTH (time_column),SUM(column) FROMtable GROUP BYMONTH (time_column)區分年份
SELECTMONTH (time_column),sum(column) FROMtable GROUP BYextract(YEAR_MONTH FROM time_column)區分年份,指定查詢幾個月份并對字段求和
SELECTSUM(column) AS 總數量MONTH (time_column) AS 月份,YEAR (time_column) AS 年份 FROMtable WHEREtime_column > DATE_SUB(CURDATE(), INTERVAL 6 MONTH) GROUP BYextract(YEAR_MONTH FROM gmt_create) ORDER BYtime_column DESC按照時間獲取每個分組最新的數據
SELECT* FROM(SELECT*FROM[表名]ORDER BY[日期字段] DESC) AS u GROUP BYu.account ORDER BYu.[日期字段]DESC總結
- 上一篇: 红旗汽车显示电子障碍是怎么一回事
- 下一篇: 汉兰达为什么保值?