MYSQL:create

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:      表中有衝突數據,刪除後重新插入
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章