官网
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE][INTO] tbl_name[PARTITION (partition_name [, partition_name] ...)][(col_name [, col_name] ...)]{ {VALUES | VALUE} (value_list) [, (value_list)] ...|VALUES row_constructor_list}[AS row_alias[(col_alias [, col_alias] ...)]][ON DUPLICATE KEY UPDATE assignment_list]INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE][INTO] tbl_name[PARTITION (partition_name [, partition_name] ...)][AS row_alias[(col_alias [, col_alias] ...)]]SET assignment_list[ON DUPLICATE KEY UPDATE assignment_list]INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE][INTO] tbl_name[PARTITION (partition_name [, partition_name] ...)][(col_name [, col_name] ...)][AS row_alias[(col_alias [, col_alias] ...)]]{SELECT ... | TABLE table_name}[ON DUPLICATE KEY UPDATE assignment_list]value:{expr | DEFAULT}value_list:value [, value] ...row_constructor_list:ROW(value_list)[, ROW(value_list)][, ...]assignment:col_name = [row_alias.]valueassignment_list:assignment [, assignment] ...
小试牛刀——简单语句
-- 例子表CREATE TABLE `test_tab` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(64) DEFAULT NULL,`gender` varchar(2) DEFAULT NULL,`salary` double DEFAULT NULL,`birthday` datetime DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- 例子语句INSERT INTO test_tab (id,NAME,gender,salary,birthday)VALUES(1,'小辉','男',1200,'2021-01-21 10:09:01'),(2,'小辉','男',1010,'2021-01-21 10:09:01') AS new ON DUPLICATE KEY UPDATE salary = new.salary,NAME = new. NAME,gender = new.gender;
小结
- insert into 语句可以实现 saveOrUpdate 功能。
- insert into 可以使用 set 语句。 ```sql INSERT INTO t1 SET a=1,b=2,c=3 AS new ON DUPLICATE KEY UPDATE c = new.a+new.b;
INSERT INTO t1 SET a=1,b=2,c=3 AS new(m,n,p) ON DUPLICATE KEY UPDATE c = m+n; ```
- insert into 返回的影响行数,可以不等于插入的条数;(原因未探😂)。
- insert into 没有 where 子句。
