我有一个使用下面的mysql语句创建的表。
CREATE TABLE `jos_ttvideo` (
`id` int(11) NOT NULL auto_increment,
`video_id` int(11) NOT NULL DEFAULT 0,
`thumbnail` varchar(255) NOT NULL DEFAULT "",
`thumbnail_med` varchar(255) NOT NULL DEFAULT "",
`thumbnail_lrg` varchar(255) NOT NULL DEFAULT "",
`title` varchar(50) NOT NULL DEFAULT "",
`author` varchar(50) NOT NULL DEFAULT "",
`description` varchar(255) NOT NULL DEFAULT "",
`full_description` text NOT NULL DEFAULT "",
`c_date` DATETIME NOT NULL,
`plays` int(11) NOT NULL DEFAULT 0,
`likes` int(11) NOT NULL DEFAULT 0,
`width` int(4) NOT NULL DEFAULT 600,
`height` int(4) NOT NULL DEFAULT 300,
`published` tinyint(1) NOT NULL DEFAULT 0,
`checked_out` tinyint(1) NOT NULL DEFAULT 0,
`catid` int(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
);
现在我想创建一个mysql更新脚本,它将保留表中包含的所有数据并添加&更新某些列。所以一旦完成,表结构将如下所示:
CREATE TABLE IF NOT EXISTS `jos_ttvideo` (
`id` int(11) NOT NULL auto_increment,
`video_id` varchar(255) NOT NULL DEFAULT 0,
`site` varchar(20) NOT NULL DEFAULT "",
`thumbnail` varchar(255) NOT NULL DEFAULT "",
`thumbnail_med` varchar(255) NOT NULL DEFAULT "",
`thumbnail_lrg` varchar(255) NOT NULL DEFAULT "",
`title` varchar(50) NOT NULL DEFAULT "",
`author` varchar(50) NOT NULL DEFAULT "",
`description` varchar(255) NOT NULL DEFAULT "",
`full_description` text NOT NULL DEFAULT "",
`c_date` DATETIME NOT NULL,
`plays` int(11) NOT NULL DEFAULT 0,
`likes` int(11) NOT NULL DEFAULT 0,
`width` int(4) NOT NULL DEFAULT 600,
`height` int(4) NOT NULL DEFAULT 300,
`custom_dimensions` tinyint(1) NOT NULL DEFAULT 0,
`published` tinyint(1) NOT NULL DEFAULT 0,
`checked_out` tinyint(1) NOT NULL DEFAULT 0,
`catid` int(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
);
基本上我有两种方法可以考虑这样做:
最好的方法是什么?因为表结构只有一些变化,我认为选项2将是一个更容易的路径。但是,如果将来会有更多的变化,那么我认为选项1会更好。如果我选择选项1,将原始表数据复制到临时表需要什么mysql?
感谢您的帮助!
答案 0 :(得分:1)
只要您拥有/可以创建ALTER TABLE,就根本不需要选项1,因为当您使用选项2时,这正是MySQL本身所做的。
答案 1 :(得分:1)
我有不同的想法,
取决于表中的记录数量。
如果有很多记录,
逐栏改变将非常慢,
mysql将更加努力地进行数据写入并同时更新索引
选项1更清晰,
使用新结构创建表B.
从表A中执行插入选择到表B,
之后交换名称
PS:最小表写锁