sql >> データベース >  >> RDS >> Mysql

MySQLは主キー値を交換します

    これには一時テーブルを使用しないでください。

    マニュアル から :

    mysql> SELECT * FROM temp_table, temp_table AS t2;
    ERROR 1137: Can't reopen table: 'temp_table'
    

    更新:

    うまくいかない場合は申し訳ありませんが、単純な3方向交換が機能しないのはなぜですか?

    このように:

    create table yourTable(id int auto_increment, b int, primary key(id));
    
    insert into yourTable(b) values(1), (2);
    select * from yourTable;
    
    DELIMITER $$
    create procedure pkswap(IN a int, IN b int)
    BEGIN
    select @max_id:=max(id) + 1 from yourTable;
    update yourTableset [email protected]_id where id = a;
    update yourTableset id=a where id = b;
    update yourTableset id=b where id = @max_id;
    END $$
    DELIMITER ;
    
    call pkswap(1, 2);
    
    select * from yourTable;
    


    1. MySQLdは、5.6から5.7へのbrewアップグレード後に起動しません

    2. 日付間隔で複数の列をグループ化して取得

    3. 行を分離するための更新にselect...を使用する最小限の例

    4. SETSTATISTICSIOからの誤解を招くデータに注意してください