エイドリアンポップ:
私は自動インクリメントである列値を更新する必要があります。例えば :
id | value |
---------------
1 | abc |
2 | def |
16 | sdfs |
361 | dsffs |
私はそれを転送する必要があります
id | value |
---------------
1 | abc |
2 | def |
3 | sdfs |
4 | dsffs |
そのテーブルのすべての値のカウントのために。また、このテーブルの上に3つの外部キー列のためにそこにあることを屋敷に必要なid
ことは、これらの表のいずれかの上のこの値を持つレコードがありませんにもかかわらず、重複エラーで失敗し、私は、更新列の値に、このクエリを使用しようとしているとき
set @row_number = 0;
UPDATE
cms_page AS page,
(
SELECT
(@row_number := @row_number + 1) AS id,
page_id
FROM
cms_page
ORDER BY page_id
) AS new_id
SET
page.page_id = new_id.id
ゴードン・リノフ:
私は強くあなたがこれをしないことをお勧めします。しかし、1つの簡単な方法は、2回の更新を使用しています。おそらくIDSは、数字、決して否定しています。そう:
update cms_page
set page_id = - page_id;
set @row_number = 0;
update cms_page
set page_id = (@row_number := @row_number + 1)
order by page_id desc; -- remember, it is now negative
あなたがカスケードしている場合はupdate
、テーブルを参照するため、これには本当に仕事のために必要である- -制約が、その後すべてが2回更新されます。あなたは十分なログ・スペースを持っていることを確認してください!