前端要我在測試環(huán)境的數據表里增加幾條數據,好吧,不就是寫 SQL 語句咩扫俺。
不過基于上次出現的問題彤枢,因為生產環(huán)境與測試環(huán)境的數據的增長 ID 還是有不同的狰晚,
注:主和子數據的 code 有某種關聯
比如一條子數據的 parent_id 要關聯某個主數據的自動增長 id,而 666 是主數據的 ID 缴啡,最簡單粗暴的方法就是提前知道主數據的 id ,但感覺不是很睿智壁晒。
INSERT INTO `tableA`
( `name`, `code`, `type`, `parent_id`, `url`)
VALUES
('測試', 'Q-Z', 0,666, '/xxx/fff ');
于是我寫了一條動態(tài)獲取 parent_id 的語句。
1)用這條簡單的 SQL 語句我可以知道它的 ID
select id from tableA where code ='Q'
于是我猜想這樣應該可以吧业栅?
2)
INSERT INTO tableA ( `name`, `code`, `type`, `parent_id`, `url`)
VALUES
('測試', 'Q-Z', 0, (select id from tableA where code ='Q') , '/xxx/fff ');
不行秒咐,報了錯誤
You can't specify target table 'basic_data' for update in FROM clause
翻譯:不能在 FROM 子句中指定用于更新的目標表 "basic_data"
大概意思就是 mysql 把查詢子句當做一個臨時表谬晕,不在當做一個實體表
3)修改后
INSERT INTO tableA ( `name`, `code`, `type`, `parent_id`, `url`)
VALUES
('測試', 'Q-Z', 0, (select id from (select * from tableA ) as s where code ='Q') , '/xxx/fff ');