我正在 Yii 中编写 CDbMigration 来创建一个带有现有表外键的新表。那很容易。我还想获取旧表中的每个条目,并将其 id、缩略图和 myfunction(title) 复制到新表,然后再将缩略图放入旧表中。
迁移前的old_table应该看起来像(被截断)
CREATE TABLE IF NOT EXISTS `old_table` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`thumbnail` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
之后我将拥有一个 new_table 和没有 thumbnail
的旧表
CREATE TABLE IF NOT EXISTS `new_table` (
`old_id` int(11) unsigned NOT NULL, -- foreign key to old_table
`transformed_title` varchar(255) NOT NULL,
`thumbnail` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
此外,myfunction 是一个转换字符串的函数。
现在我开始明白,在迁移中使用 CActiveRecord 是不好的做法,但我的 SQL 技能还不够敏锐,无法知道是否有 SQL 命令来执行我想要的迁移操作。或者我应该在脚本中单独复制数据(即不是我应该使用迁移的目的)?
最佳答案
一般来说,您可以使用INSERT...SELECT
将数据复制到另一个表。 ;既然您要求 SQL 命令,这可能就是您正在寻找的:
INSERT INTO new_table (old_id, transformed_title, thumbnail)
SELECT id, MYFUNCTION(title), thumbnail FROM old_table
但是,myfunction
必须是 MySql 提供的函数,否则此查询(或纯 SQL 中的任何其他方法)将永远无法工作。
关于mysql - Yii DbMigration 将数据移动到其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798951/