我正在Yii中编写CDbMigration来创建一个带有现有表的外键的新表。这很容易。我还想把旧表中的每个条目都复制到新表中,然后将其id,缩略图和myfunction(标题)复制到旧表中。
迁移前的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命令可以执行迁移所需的操作。或者这是我应该在脚本中单独复制数据的东西(即不是我应该使用迁移的内容)?
答案 0 :(得分:1)
一般来说,您可以使用INSERT...SELECT
将数据复制到另一个表格;既然你要求SQL命令,这可能就是你要找的东西:
INSERT INTO new_table (old_id, transformed_title, thumbnail)
SELECT id, MYFUNCTION(title), thumbnail FROM old_table
但是,myfunction
需要是MySql提供的函数,否则此查询(或纯SQL中的任何其他方法)将永远无法工作。