如果想在唯一索引重复的时候进行覆盖的话可以用 replace into `news` select ...
INSERT INTO `news`(id,item1,item2,item3) SELECT null,item1,item2,item3
INSERT INTO `news`(item1,item2,item3) SELECT item1,item2,item3 FROM `news`
能这样写吗?至少mysql是不允许的INSERT INTO ... SELECT语句满足下列条件: 查询不能包含一个ORDER BY子句。 INSERT语句的目的表不能出现在SELECT查询部分的FROM子句,因为这在ANSI SQL中被禁止让从你正在插入的表中SELECT。(问题是SELECT将可能发现在同一个运行期间内先前被插入的记录。当使用子选择子句时,情况能很容易混淆) AUTO_INCREMENT列象往常一样工作。
>>能这样写吗?至少mysql是不允许的 奇怪的,我试了,可以的。
不行,只能一一对应字段更新。Insert into 表(字段1,字段2,字段3...) Select 字段1,字段2,字段3... From 表 UNION ALL Select 字段1,字段2,字段3... From 表 ......如果不是 自动增长 的标识,主键是可以插入的,前提是满足主键约束。
replace into `news` select ...
INSERT INTO `news`(item1,item2,item3) SELECT item1,item2,item3 FROM `news`
查询不能包含一个ORDER BY子句。
INSERT语句的目的表不能出现在SELECT查询部分的FROM子句,因为这在ANSI SQL中被禁止让从你正在插入的表中SELECT。(问题是SELECT将可能发现在同一个运行期间内先前被插入的记录。当使用子选择子句时,情况能很容易混淆)
AUTO_INCREMENT列象往常一样工作。
奇怪的,我试了,可以的。
>>INSERT语句的目的表不能出现在SELECT查询部分的FROM子句,因为这在ANSI SQL中被禁止让从你正在插入的表中SELECT。
这句话怎么理解?
含有唯一索引字段确实是不能SELECT *,我试过的。