1からのカウントにリセット列の値

エイドリアンポップ:

私は自動インクリメントである列値を更新する必要があります。例えば ​​:

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回更新されます。あなたは十分なログ・スペースを持っていることを確認してください!

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=347735&siteId=1