前言:
有一張表,表里有N多字段。其中有兩個需要注意的字段,那就是ID(整型)、和訂單Number(varchar),這兩個是唯一值,不能重復。ID是自增主鍵。
現在有這樣一需求:
因項目需要測試數據,每條有效 數據記錄 需要 復制3條相同的 數據記錄(除了ID和訂單Number)。
且一條記錄N多字段,只有ID和訂單Number不同。
這樣,就會產生很多機械、無用動作。
尋常人的做法,是一個一個字段去復制,最后只改ID和訂單Number。費時費力。
但作為一個程序員,這樣去做,明顯很“笨拙”。更重要的原因是,時間不允許。
接下來,就是如何去做,
達到:復制一條數據,改變ID和訂單Number,且【盡量少做機械、無用動作】
0x001
insert into testzzy (age) select age from testzzy where id = 2;
UPDATE testzzy set id = (2*10000+0) , number = "我是每次要修改的數據" WHERE id = (SELECT LAST_INSERT_ID())
注: LAST_INSERT_ID() 僅適用于 insert 語句 插入的記錄。手動插入的數據無效。(已測試)
介紹一下上面兩條SQL語句意義(因項目中字段N多,為了解說,這里只取幾個)
第一條:去插入到testzzy表中一條字段為age的數據,這條數據是從testzzy表中查出ID為2的數據。
簡單來說,就是從同一張表中,取出一條ID為2的數據,再插入進去。(注:ID為自增主鍵,插入時無需指定)
第二條:更新testzzy 表中 id =20000 , number = "我是每次要修改的數據" ,更新的id是 最后一次插入的ID。
簡單來說,就是將剛剛復制出來的數據,id改為原來ID的10000倍,且+上復制下標。(這樣就能保證復制出來的數據有可追溯性)
number按需求去改就行了。
兩條SQL語句一起執行,這樣,機械動作大大減少。
但,還沒達到想要的效果。
(這樣做,雖然可以復制出想要的數據,但每條記錄字段N多,需要每次拉動MySql連接工具的滾動條,修改完后再去改多少倍)
0x002:
最好的效果就是去寫個程序,讓程序來做這些? 機械動作。
如圖:
這樣,每次只需輸入要復制記錄數據的ID,要修改字段的數據內容,最后點復制,就大功告成了。
看一下效果圖:
0x003:
眼尖的程序員發現了,底部那個按鈕是做什么的?
自增主鍵有這樣一個特性,當你的ID從某個值調到更高的值時,再去增加數據,那么ID將以這個【更高的ID值為基礎】去增長
舉個例子:現在我們的ID為20,手動插入ID為100的一條記錄。此時再去增加一條數據,ID會從101去自增。并不會從21去自增。
那么底部這個按鈕就是為了解決這個問題。(前提是須將測試的廢棄數據刪掉,否則無效)
SELECT id from testzzy ORDER BY id DESC LIMIT 0,1;
alter table testzzy auto_increment = 上條語句查出來的值;
0x004:
這樣就解決了問題,個人能力有限,歡迎有更簡潔方法的前輩指教!
完結。