要在MySQL表中復制一行,網上一搜有很多結果,大概類似這樣:
insert into 表1 select * from 表1 where id =1;
或者是這樣
insert into 表1(字段2,字段3) select 字段2,字段3 from 表1 where id=1;
對於沒有設置主鍵的表,像上面兩種方式進行行復制插入是可行的,但是如果表設置了主鍵的話,上面兩種復制語句都是不可行的。第一種是因為主鍵不能重復,第二種是因為主鍵不能為空的。
對於第一種會出現這種錯誤:ERROR 1062 (23000): Duplicate entry 'xxx' for key 'PRIMARY'
對於第二種會出現這種錯誤:ERROR 1364 (HY000): Field 'yyy' doesn't have a default value
在有主鍵的表中如何完全復制一行呢?
復制的語句還是使用類似上面的子查詢插入,但是我們需要修改主鍵的值以避免主鍵沖突,語法如下:
INSERT INTO my_table (`id`, `title`, `author`) SELECT 2 AS `id`, `title`, `author` FROM my_table WHERE `id` = 1;
說明一下:
這里 id 字段是主鍵,然后從同一表中復制一行,但是主鍵字段id不能為空,也不能重復,因此通過使用 as 用一個指定值來替換覆蓋子select查出來的id字段的值,然后把這一行復制插入。