0.CRUD
Create(创建), Retrieve(读取),Update(更新),Delete(删除)
1.Create
1.基础语法:
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)
);
2.单行数据+全列插入
插入两条记录,value_list数量必须和定义表的列的数量及顺序一致 注意,这里在插入的时候,也可以不用指定id(当然,那时候就需要明确插入数据到那些列了),那么MYSQL会使用默认的值进行自增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)
3.多行数据 + 指定列插入
插入两条记录,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)
4.插入否则更新
由于主键或者唯一键对应的值已经存在而导致插入失败 # 主键冲突
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'
可以选择性的进行同步更新操作,语法:
ON DUPLICATE KEY当发生重复key的时候 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 |
+-------------+
5.替换
主键 或者 唯一键 没有冲突,则直接插入 主键 或者 唯一键 如果冲突,则删除后再插入REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');
Query OK, 2 rows affected (0.00 sec)
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,删除后重新插入