MySQL 記錄基本操做

插入記錄 INSERT

語法1:
INSERT [INTO] 表名 [(列名1,列名2,...)] VALUES(列值1,列值2,...),(...),...;
  • 對於自動編號的字段,插入NULLDEFAULT,系統將自動依次遞增編號;
  • 對於有默認約束的字段,能夠插入「DEFAULT」表示使用默認值;
  • 列值可傳入數值、表達式或函數,如密碼能夠用md5()函數進行加密(如md5('123'));
  • 可同時插入多條記錄,多條記錄括號間用逗號「,」隔開
語法2:
INSERT [INTO] 表名 SET 列名1=列值1, 列名2=列值2,...;
  • 這種方法一次只能插入一條記錄;
  • 列值中有自動編號、默認值或Boolean類型都可以不賦值(使用子查詢)
語法3:
INSERT [INTO] 表名(列名1,...) SELECT 列名1,... FROM 表名 [GROUP BY/HAVING/ORDER BY/LIMIT...]; 
 
--示例
INSERT test SELECT username FROM users WHERE age >=30; 
--上面會有字段不匹配提示,改成
INSERT test(username) SELECT username FROM users WHERE age >=30;
  • 通常用於將其餘表的數據插入到指定表,注意字段對應

單表更新 UPDATE

UPDATE 表名 SET 列名1=列值1 [,列名2=列值2, ...] [WHERE 條件];
--(如條件爲 列名=列值 修改某一字段的值)
  • 省略條件則更新全部記錄該列的值

單表刪除 DELETE

DELETE FROM 表名 [WHERE 條件];
  • 省略條件則默認刪除該表全部記錄(僅刪除全部記錄,不刪除數據表);
  • 刪除一個自動編號的中間字段如id=100後,新插入字段時,id爲已有的最大號數+1,如最後一條id=123,插入記錄的id=124.

查詢表達式 SELECT

SELECT select_expr [,select expr2...] --只查找某一個函數或表達式 
[ 
FROM table_references --查詢表名 
[WHERE where_conditon] --查詢條件 
[GROUP BY {col_name|position} [ASC|DESC],...] --按某個字段進行分組,相同的只顯示第一個 
[HAVING where_conditon] --分組時,給出顯示條件 
[ORDER BY {col_name|expr|position} [ASC|DESC],...] --排序 
[LIMIT {[offset,]row_count | row_count OFFSET offset}] --限制返回數量 
]
  • 查詢表達式可使用[As]alias_name爲其賦予別名
  • 別名可用於GROUP BYORDRE BYHAVING子句
  • 使用tbl_name.col_name來表示列記錄,這在多表查詢時能夠區別同名的列

條件表達式 WHERE

WHERE 關鍵字後根據sql

  • 條件>、<、=、>=、<=、!=、<>、IS NOT NULL
  • 邏輯and,or
  • 結合方式left join、right join
  • 模式匹配IN、NOT IN、like、not like、regexp

等各類MySQL函數和表達式,從表集合中篩選記錄。函數

查詢結果分組 GROUP BY

GROUP BY 只能顯示每組第一條,因此通常用來統計每組的條數,某個值的和等等,要顯示所有數據的話最好用 ORDER BY加密

[GROUP BY {col_name|position} [ASC|DESC],...]
  • ASC:升序,默認
  • DESC:降序
  • position:SELECT語句中列的序號
  • 若是存在相同的值(例如age可能有多個相同的值),只會保留一個。但使用ORDER BY就不會省略。

示例:
SELECT sex FROM users GROUP BY sex;
對users中的sex按sex進行分組 code

SELECT * FROM users GROUP BY 1;
這裏查詢全部字段,1表示SELECT語句中第一個出現的字段,即位置。 建議GROUP BY後寫列名稱,不寫位置,由於位置容易數錯.regexp

指定分組條件 HAVING

[HAVING 聚合函數()] 
[HAVING where_condition]

用在GROUP BY後面追加條件,HAVING後面能夠跟聚合函數(如count()max()等等),或者跟判斷式.
注意where_condition中的字段必須出如今前面SELECT中,不然缺乏字段無法進行篩選.
示例:
SELECT sex FROM users GROUP BY 1 HAVING age > 35;
有錯,應該改成:
SELECT sex, age FROM users GROUP BY 1 HAVING age > 35;排序

SELECT sex FROM users GROUP BY 1 HAVING count(id) >= 2;
這條指令按照sex分組,分紅了兩組sex=0和sex=NULL,條件id個數大於2的留下顯示,顯然sex=0個數有8>2故留下,而sex=NULL個數爲1,不知足條件,故不顯示。若是條件改爲count(id)>=1,則會顯示sex爲0和NULL兩個分組。
聚合函數永遠只有一個返回結果.md5

查詢結果排序 ORDER BY

ORDER BY { col_name | expr | position } [ASC|DESC],...

對查詢結果進行排序,默認是升序
能夠同時按多條字段進行排序,規則是先按前面的字段排,在基礎上再按後面字段排。it

--對一個字段排序
SELECT * FROM users ORDER BY id DESC; 
--先按照age排序,若是age有重複的,重複的字段裏按id排序
SELECT * FROM users ORDER BY age,id DESC;

限制結果數量 LIMIT

LIMIT {[offset,]row_count | row_count OFFSET offset}

限制查詢結果返回的行數io

-- 從第一條開始(第一個爲0),返回兩條
SELECT * FROM users LIMIT 2; 
--從第三條開始(第一個爲0),返回三條
SELECT * FROM users LIMIT 2,3 ;
相關文章
相關標籤/搜索