簡體   English   中英

MySQL中的遷移腳本

[英]Migration script in MySQL

我想將數據從一個表遷移到另一個表。

我出於自己的目的編寫了一個簡單的PHP腳本,但是我想通過MySql腳本使用用戶定義的變量來做到這一點:

PHP腳本如下所示:

    //MIGRATION
$sql = "SELECT position FROM ts_user_config WHERE position != '' AND position NOT REGEXP '^-?[0-9]+$' GROUP BY TRIM(position) ORDER BY position";
$positions = db_loadColumn( $sql );

foreach ($positions as $key => $pos) {
    $sql = "SELECT id FROM user_positions where UPPER(position) = UPPER('$pos')";
    $posId = db_loadResult($sql);

    if ($posId == null) {
        $sql = "INSERT INTO user_positions (position, `desc`) VALUES ('$pos', '$pos')";
        db_exec($sql);
        $posId = db_insert_id();
    }

    $sql = "UPDATE ts_user_config SET position='$posId' WHERE TRIM(position)='$pos'";
    db_exec($sql);
}
//---------

有人這么友好,然后將此PHP指令重寫為MySQL腳本嗎? 我嘗試這樣做,但是我的mySQL知識非常低,無法做到這一點。

如果沒有太多的努力,請幫助我。

先感謝您。

我已經做了 !!!!!! :)這是我的mySQL腳本,我不知道它是否完美,但是可以滿足我的需要。 請告訴我我是否可以在這里做得更好。 再次感謝 :)

drop procedure if exists PositionMigration;
delimiter '//'
CREATE PROCEDURE PositionMigration()
    BEGIN
        BLOCK1: BEGIN
            DECLARE done INT DEFAULT FALSE;
            DECLARE pos VARCHAR(100);
            DECLARE posId1 INT;
            DECLARE posId2 INT;
            DECLARE sql1 CURSOR FOR SELECT position FROM ts_user_config WHERE position != '' AND position NOT REGEXP '^-?[0-9]+$' GROUP BY TRIM(position) ORDER BY position;
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
            OPEN sql1;

            read_loop: LOOP
                FETCH sql1 INTO pos;
                IF done THEN
                    LEAVE read_loop;
                END IF;

                BLOCK2: BEGIN
                    DECLARE posNotFound INT DEFAULT FALSE;
                    DECLARE sql2 CURSOR FOR SELECT id FROM user_positions where UPPER(position) = UPPER(pos);
                    DECLARE CONTINUE HANDLER FOR NOT FOUND SET posNotFound = TRUE; 
                    OPEN sql2;
                    FETCH sql2 INTO posId1;

                    IF posNotFound THEN
                        INSERT INTO user_positions (position, \`desc\`) VALUES (pos, pos);

                        BLOCK3: BEGIN
                            DECLARE sql3 CURSOR FOR SELECT LAST_INSERT_ID();
                            OPEN sql3;
                            FETCH sql3 INTO posId2;
                            UPDATE ts_user_config SET position=posId2 WHERE TRIM(position)=pos;
                            CLOSE sql3;
                        END BLOCK3;
                    ELSE
                        UPDATE ts_user_config SET position=posId1 WHERE TRIM(position)=pos;
                    END IF;
                    CLOSE sql2;
                END BLOCK2;
            END LOOP;
            CLOSE sql1;
        END BLOCK1;
END;
//
delimiter ';'
call PositionMigration();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM