MySQL是一種常見的數(shù)據(jù)庫(kù)管理系統(tǒng),它可以輕松地在不同的語言中應(yīng)用。其中很常見的一種任務(wù)是對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行迭代,并將其插入到另一個(gè)表中,這時(shí)候就需要使用到MySQL foreach insert。下面我們來看看這種操作的具體實(shí)現(xiàn)。
DELIMITER $$ CREATE PROCEDURE `insert_data`() BEGIN DECLARE var_id INT DEFAULT 0; DECLARE var_name VARCHAR(50) DEFAULT ''; DECLARE var_age INT DEFAULT 0; DECLARE c CURSOR FOR SELECT id, name, age FROM old_table; /*循環(huán)遍歷*/ OPEN c; read_loop: LOOP FETCH c INTO var_id, var_name, var_age; IF done THEN LEAVE read_loop; END IF; /*數(shù)據(jù)插入*/ INSERT INTO new_table (id, name, age) VALUES (var_id, var_name, var_age); END LOOP; CLOSE c; END $$ DELIMITER ; /*執(zhí)行存儲(chǔ)過程*/ CALL insert_data ();
上述代碼中,我們創(chuàng)建了一個(gè)存儲(chǔ)過程insert_data(),其中聲明了三個(gè)變量var_id、var_name和var_age來保存舊表中的數(shù)據(jù)。然后定義了一個(gè)游標(biāo)c來遍歷老表中的數(shù)據(jù),通過循環(huán)遍歷將舊數(shù)據(jù)插入到新表中。最后通過調(diào)用存儲(chǔ)過程來執(zhí)行。
需要注意的是,在以上的例子中,游標(biāo)是按順序讀取數(shù)據(jù)的,而且會(huì)導(dǎo)致鎖定整張表,因此不適合大量數(shù)據(jù)的插入。如果需要進(jìn)行大量的數(shù)據(jù)插入,建議使用其他方法。