MySQL學習筆記-操作數據表中的記錄
1.插入記錄 INSERT
INSERT [INTO] tbl_name [(col_name,...)] {VAULES|VALUE} ({expr|DEFAULT},...),(...),...
例,插入單條記錄:
mysql> USE testDatabase changed
mysql> CREATE TABLE users( -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, -> username VARCHAR(20) NOT NULL, -> password VARCHAR(32) NOT NULL, -> age TINYINT UNSIGNED NOT NULL DEFAULT 10, -> sex BOOLEAN -> );
mysql> INSERT users VALUES(NULL,'Tom','asd123',24,1);
mysql> SELECT * FROM users;+----+----------+----------+-----+------+| id | username | password | age | sex |+----+----------+----------+-----+------+| 1 | Tom | asd123 | 24 | 1 |+----+----------+----------+-----+------+
插入多條記錄:
mysql> INSERT users VALUES(DEFAULT,'John','asd123',24,1), -> (NULL,'Huang','daddd',25,1);
mysql> SELECT * FROM users;
+----+----------+----------+-----+------+| id | username | password | age | sex |+----+----------+----------+-----+------+| 1 | Tom | asd123 | 24 | 1 || 2 | John | asd123 | 24 | 1 || 3 | Huang | daddd | 25 | 1 |+----+----------+----------+-----+------+
插入數學表達式:
mysql> INSERT users VALUES(NULL,'John','asd123',3*7-5,1);
mysql> SELECT * FROM users;+----+----------+----------+-----+------+| id | username | password | age | sex |+----+----------+----------+-----+------+| 1 | Tom | asd123 | 24 | 1 || 2 | John | asd123 | 24 | 1 || 3 | Huang | daddd | 25 | 1 || 4 | John | asd123 | 16 | 1 |+----+----------+----------+-----+------+
插入md5的哈希密碼:
mysql> INSERT users VALUES(NULL,'John',md5('123'),DEFAULT,0);
mysql> SELECT * FROM users;+----+----------+----------------------------------+-----+------+| id | username | password | age | sex |+----+----------+----------------------------------+-----+------+| 1 | Tom | asd123 | 24 | 1 || 2 | John | asd123 | 24 | 1 || 3 | Huang | daddd | 25 | 1 || 4 | John | asd123 | 16 | 1 || 5 | John | 202cb962ac59075b964b07152d234b70 | 10 | 0 |+----+----------+----------------------------------+-----+------+
2.插入記錄 INSERT SET-SELECT
(與第一種方式的區別是 可以使用子查詢,不可以同時插入多條記錄)
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...
例:
mysql> INSERT users SET username='Ben',password=md5('345');
mysql> SELECT * FROM users;+----+----------------------+----------------------------------+-----+------+| id | username | password | age | sex |+----+----------------------+----------------------------------+-----+------+| 1 | Tom | asd123 | 24 | 1 || 2 | John | asd123 | 24 | 1 || 3 | Huang | daddd | 25 | 1 || 4 | John | asd123 | 16 | 1 || 5 | John | 202cb962ac59075b964b07152d234b70 | 10 | 0 || 6 | Ben | d81f9c1be2e08964bf9f24b15f0e4900 | 10 | NULL |+----+----------------------+----------------------------------+-----+------+
3.更新記錄 UPDATE
單表更新
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [,col_name2={expr2|DEFAULT}]... [WHERE where_condition]
例,將所有記錄的年齡加5:
mysql> UPDATE users SET age = age+5;
mysql> SELECT * FROM users;
+----+----------------------+----------------------------------+-----+------+| id | username | password | age | sex |+----+----------------------+----------------------------------+-----+------+| 1 | Tom | asd123 | 29 | 1 || 2 | John | asd123 | 29 | 1 || 3 | Huang | daddd | 30 | 1 || 4 | John | asd123 | 21 | 1 || 5 | John | 202cb962ac59075b964b07152d234b70 | 15 | 0 || 6 | Ben | d81f9c1be2e08964bf9f24b15f0e4900 | 15 | NULL |+----+----------------------+----------------------------------+-----+------+
將Tom的年齡加10歲:
mysql> UPDATE users SET age = age+10 WHERE id=1;
mysql> SELECT * FROM users WHERE id=1;+----+----------+----------+-----+------+| id | username | password | age | sex |+----+----------+----------+-----+------+| 1 | Tom | asd123 | 39 | 1 |+----+----------+----------+-----+------+
將id爲偶數的年齡加10歲:
mysql> UPDATE users SET age = age+10 WHERE id % 2 = 0;
mysql> select * from users;
+----+----------------------+----------------------------------+-----+------+| id | username | password | age | sex |+----+----------------------+----------------------------------+-----+------+| 1 | Tom | asd123 | 39 | 1 || 2 | John | asd123 | 39 | 1 || 3 | Huang | daddd | 30 | 1 || 4 | John | asd123 | 31 | 1 || 5 | John | 202cb962ac59075b964b07152d234b70 | 15 | 0 |+----+----------------------+----------------------------------+-----+------+
修改所有記錄的sex爲0:
mysql> UPDATE users SET sex = 0;
mysql> select * from users;
+----+----------------------+----------------------------------+-----+------+| id | username | password | age | sex |+----+----------------------+----------------------------------+-----+------+| 1 | Tom | asd123 | 39 | 0 || 2 | John | asd123 | 39 | 0 || 3 | Huang | daddd | 30 | 0 || 4 | John | asd123 | 31 | 0 || 5 | John | 202cb962ac59075b964b07152d234b70 | 15 | 0 || 7 | Ben | d81f9c1be2e08964bf9f24b15f0e4900 | 15 | 0 |+----+----------------------+----------------------------------+-----+------+
4.刪除記錄 DELETE
單表刪除 (若不添加WHERE則刪除【全部記錄】)
DELETE FROM tbl_name [WHERE where_condition]
例,刪除id=7的記錄:
mysql> DELETE FROM users WHERE id = 7;
mysql> select * from users;
+----+----------+----------------------------------+-----+------+| id | username | password | age | sex |+----+----------+----------------------------------+-----+------+| 1 | Tom | asd123 | 39 | 0 || 2 | John | asd123 | 39 | 0 || 3 | Huang | daddd | 30 | 0 || 4 | John | asd123 | 31 | 0 || 5 | John | 202cb962ac59075b964b07152d234b70 | 15 | 0 |+----+----------+----------------------------------+-----+------+
5.查找記錄 SELECT
SELECT select_expr [,select_expr...][
FROM tbl_references
[WHERE where_condition]
[GROUP BY {col_name | position} [ASC | DESC],...] [HAVING where_condition]
[ORDER BY {col_name | expo | position} [ASC | DESC],...] [LIMIT {[offset,] row_count | row_count OFFSET offset}]
]
查詢表達式(select_expr)
1. 每一個表達式表示想要的一列,必須有至少一個
2. 多個列之間以英文逗號分隔
3. 星號(*)表示所有列;tbl_name.*可以表示命名錶的所有列
4. 查詢表達式可以使用[AS]alias_name爲其賦予別名
5. 別名可用於GROUP BY,ORDER BY或HAVING子句
SELECT查詢表達式字段出現的順序將影響結果集字段出現的順序
字段的別名也會影響以後的結果集 , 在以後的PHP中有重要作用
例,只查詢users表中 id 和 username 兩列:
mysql> SELECT id,username FROM users;+----+----------+| id | username |+----+----------+| 1 | Tom || 2 | John || 3 | Huang || 4 | John || 5 | John |+----+----------+
查詢users表中 id 和 username 兩列,分別用userid,uname作爲別名:
mysql> SELECT id AS userid ,username AS uname FROM users;
+--------+-------+| userid | uname |+--------+-------+| 1 | Tom || 2 | John || 3 | Huang || 4 | John || 5 | John |+--------+-------+
6.where語句進行條件查詢
條件表達式(WHERE)
對記錄進行過濾,如果沒有指定WHERE子句,則顯示所有記錄
在WHERE表達式中,可以使用MySQL支持的函數或運算符
7.group by語句對查詢結果分組
group by
查詢結果分組
[GROUP BY {col_name | position} [ASC | DESC],...]
可以制定列的列名和列的位置。
asc生序,desc降序,多個分組中間用逗號區分。
例,查詢users表,按照性別分組:
mysql> SELECT sex FROM users GROUP BY sex;+------+| sex |+------+| 0 |+------+
8.having語句設置分組條件
分組條件(HAVING)
[HAVING where_condition]
其中,where_condition要麼是聚合函數(max,min,avg,count,sum),要麼其中的字段必須是SELECT中的一個查詢字段,否則會報錯]
例,查詢users表中sex分組,條件爲age>20(這種方法需要查詢字段也添加age字段):
mysql> SELECT sex,age FROM users GROUP BY sex having age > 20;
+------+-----+| sex | age |+------+-----+| 0 | 39 |+------+-----+
查詢users表中sex分組,條件爲id >=2 :
mysql> SELECT sex FROM users GROUP BY sex HAVING count(id) >= 2;
+------+| sex |+------+| 0 |+------+
9.order by語句對查詢結果排序
對查詢結果進行排序(ORDER BY)
[ORDER BY {col_name | expr | position} [ASC | DESC],...]
可以按照多個列排序
例,查詢users表,按年齡從小到大排列:
mysql> SELECT * FROM users ORDER BY age ASC;
+----+----------+----------------------------------+-----+------+| id | username | password | age | sex |+----+----------+----------------------------------+-----+------+| 8 | Hui | 9e1e06ec8e02f0a0074f2fcc6b26303b | 8 | 1 || 5 | John | 202cb962ac59075b964b07152d234b70 | 15 | 0 || 10 | Luyuan | 9e1e06ec8e02f0a0074f2fcc6b26303b | 21 | 1 || 9 | Dui | 9e1e06ec8e02f0a0074f2fcc6b26303b | 27 | 1 || 3 | Huang | daddd | 30 | 0 || 12 | Murouan | 9e1e06ec8e02f0a0074f2fcc6b26303b | 31 | 1 || 11 | Oduyuan | 9e1e06ec8e02f0a0074f2fcc6b26303b | 31 | 1 || 13 | Spqoan | 9e1e06ec8e02f0a0074f2fcc6b26303b | 31 | 1 || 4 | John | asd123 | 31 | 0 || 2 | John | asd123 | 39 | 0 || 1 | Tom | asd123 | 39 | 0 |+----+----------+----------------------------------+-----+------+
查詢users表,第一順序按年齡從小到大排列,第二順序按id從小到大排列:
mysql> SELECT * FROM users ORDER BY age,id ASC;+----+----------+----------------------------------+-----+------+| id | username | password | age | sex |+----+----------+----------------------------------+-----+------+| 8 | Hui | 9e1e06ec8e02f0a0074f2fcc6b26303b | 8 | 1 || 5 | John | 202cb962ac59075b964b07152d234b70 | 15 | 0 || 10 | Luyuan | 9e1e06ec8e02f0a0074f2fcc6b26303b | 21 | 1 || 9 | Dui | 9e1e06ec8e02f0a0074f2fcc6b26303b | 27 | 1 || 3 | Huang | daddd | 30 | 0 || 4 | John | asd123 | 31 | 0 || 11 | Oduyuan | 9e1e06ec8e02f0a0074f2fcc6b26303b | 31 | 1 || 12 | Murouan | 9e1e06ec8e02f0a0074f2fcc6b26303b | 31 | 1 || 13 | Spqoan | 9e1e06ec8e02f0a0074f2fcc6b26303b | 31 | 1 || 1 | Tom | asd123 | 39 | 0 || 2 | John | asd123 | 39 | 0 |+----+----------+----------------------------------+-----+------+
10.LIMIT語句限制查詢數量
LIMIT 限制查詢結果返回的數量
[LIMIT{[offset,]row_count|row_count OFFSET offset}]
SELECT * from users #返回所有的結果
SELECT * from users limit 2 #返回所有的結果集中前兩條
mysql> SELECT * FROM users LIMIT 2;+----+----------+----------+-----+------+| id | username | password | age | sex |+----+----------+----------+-----+------+| 1 | Tom | asd123 | 39 | 0 || 2 | John | asd123 | 39 | 0 |+----+----------+----------+-----+------+
SELECT * FROM users LIMIT 2,2; #要查詢結果集中第3條和第4條記錄。mysql中的記錄是從0開始的,共幾條。
mysql> SELECT * FROM users LIMIT 2,2;+----+----------+----------+-----+------+| id | username | password | age | sex |+----+----------+----------+-----+------+| 3 | Huang | daddd | 30 | 0 || 4 | John | asd123 | 31 | 0 |+----+----------+----------+-----+------+
總結
記錄操作: INSERT , UPDATE , DELETE , SELECT
1.insert的三種
insert [into] 表名 [(列名,列名)]{values|value} ({(表達式|default},())insert [into] 表名 set 列名={(表達式|default},。。insert [into] 表名 [(列名,列名)] SELECT..
2.UPDATE
(1)單表更新
UPDATE [LOW_PRIORITY][IGNORE] table_reference SET col_name1={expr1|DEFAULT},[col_name2={expr2|DEFAULT}]...[WHERE where_condition]
多表更新
3.DELETE : 刪除數據
(1)單表刪除
DELETE FROM tbl_name [WHERE where_condition}
4.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}] #限制返回數量]
SELECT
FROM 表的參照
WHERE 條件
GROUP BY 對記錄結果進行分組
HAVING 對分組條件的設定
結合內容,將查找的結果存儲在指定的數據表:
mysql> CREATE TABLE test( -> id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, -> username VARCHAR(20) NOT NULL
-> );
mysql> INSERT test(username) SELECT username FROM users WHERE age >= 25;
mysql> SELECT * FROM test;
+----+----------+| id | username |+----+----------+| 1 | Tom || 2 | John || 3 | Huang || 4 | John || 5 | Dui || 6 | Oduyuan || 7 | Murouan || 8 | Spqoan |+----+----------+