對於以下(簡化)mysql數據庫設置,我想將適用的GUID複製到message
表中。這可以通過一個SQL update
完成嗎?Mysql:是否有一個更新語句會按以下方式反規範化?
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`guid` varchar(13) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `user` (`id`, `guid`) VALUES
(1, 'a'),
(2, 'b'),
(3, 'c');
CREATE TABLE IF NOT EXISTS `message` (
`user` int(11) NOT NULL,
`user_guid` varchar(13) NOT NULL,
KEY `user` (`user`)
) ENGINE=InnoDB;
ALTER TABLE `message`
ADD CONSTRAINT `message_ibfk_1` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE;
INSERT INTO `message` (`user`, `user_guid`) VALUES
(3, ''),
(2, ''),
(3, '');
如果表格的大小很大,那麼這會很快旋轉。 – 2010-09-13 18:30:02
這個效果很好,我用'UPDATE消息SET user_guid =(SELECT u.guid FROM user u WHERE u.id = message.user);'。 – 2010-09-13 18:35:34
@ gms8994:您認爲JOIN更改了需要更新大量數據的事實嗎?所有數據庫都不支持UPDATE(或DELETE)JOIN;這與JonH的JOIN查詢相當。 – 2010-09-13 18:37:05