CRUD : Create, Retrieve,Update,Delete
1. Create
語法:
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
案例:
-- 創建一張學生表
CREATE TABLE students (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
sn INT NOT NULL UNIQUE COMMENT '學號',
name VARCHAR(20) NOT NULL,
qq VARCHAR(20)
);
1.1 單行數據 + 全列插入
-- 插入兩條記錄,value_list 數量必須和定義表的列的數量及順序一致
INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
Query OK, 1 row affected (0.02 sec)
INSERT INTO students VALUES (101, 10001, '孫悟空', '11111');
Query OK, 1 row affected (0.02 sec)
-- 查看插入結果
SELECT * FROM students;
+-----+-------+-----------+-------+
| id | sn | name | qq |
+-----+-------+-----------+-------+
| 100 | 10000 | 唐三藏 | NULL |
| 101 | 10001 | 孫悟空 | 11111 |
+-----+-------+-----------+-------+
2 rows in set (0.00 sec)
1.2 多行數據 + 指定列插入
-- 插入兩條記錄,value_list 數量必須和指定列數量及順序一致
INSERT INTO students (id, sn, name) VALUES
(102, 20001, '曹孟德'),
(103, 20002, '孫仲謀');
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
-- 查看插入結果
SELECT * FROM students;
+-----+-------+-----------+-------+
| id | sn | name | qq |
+-----+-------+-----------+-------+
| 100 | 10000 | 唐三藏 | NULL |
| 101 | 10001 | 孫悟空 | 11111 |
| 102 | 20001 | 曹孟德 | NULL |
| 103 | 20002 | 孫仲謀 | NULL |
+-----+-------+-----------+-------+
4 rows in set (0.00 sec)
1.3 插入否則更新
由於 主鍵 或者 唯一鍵 對應的值已經存在而導致插入失敗
-- 主鍵衝突
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大師');
ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'
-- 唯一鍵衝突
INSERT INTO students (sn, name) VALUES (20001, '曹阿瞞');
ERROR 1062 (23000): Duplicate entry '20001' for key 'sn'
可以選擇性的進行同步更新操作 語法:
INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大師')
ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大師';
Query OK, 2 rows affected (0.47 sec)
-- 0 row affected: 表中有衝突數據,但衝突數據的值和 update 的值相等
-- 1 row affected: 表中沒有衝突數據,數據被插入
-- 2 row affected: 表中有衝突數據,並且數據已經被更新
-- 通過 MySQL 函數獲取受到影響的數據行數
SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
| 2 |
+-------------+
1 row in set (0.00 sec)
1.4 替換
-- 主鍵 或者 唯一鍵 沒有衝突,則直接插入;
-- 主鍵 或者 唯一鍵 如果衝突,則刪除後再插入
REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞞');
Query OK, 2 rows affected (0.00 sec)
-- 1 row affected: 表中沒有衝突數據,數據被插入
-- 2 row affected: 表中有衝突數據,刪除後重新插入