mysql - 创建非破坏性 mysql 查询,能够创建表或更新缺少字段的表

标签 mysql database-design

我已经从 phpMyAdmin 导出了一个数据库(仅结构),我想将其用作脚本的基础,该脚本可以更新同一数据库结构的先前版本并添加列和表(如果它们不存在)。

例如,如果 CREATE TABLE 语句如下所示:

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(52) NOT NULL,
  `password` varchar(40) NOT NULL,
  `dev` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21;

如何调整此设置,以便如果表中的字段不存在,即使数据库中已存在该表,也会创建该字段。

此脚本的目的是允许更新现有数据库,添加可能丢失的列,但不应删除任何表或字段。

最佳答案

根据this ,似乎完成此操作的最简单方法是创建一个临时表(我不一定指的是 TEMPORARY 类型,只是使用时间较短且有限;尽管在大多数情况下,这里 TEMPORARY 类型可能是一个合理的选择),将数据从旧表复制到临时表,使用更新后的结构创建新表,然后从临时表中恢复所有内容。最后,您的脚本可能会将旧表重命名为备份,或者完全删除它和临时表。

关于mysql - 创建非破坏性 mysql 查询,能够创建表或更新缺少字段的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22517863/

相关文章:

sql - 管理数据库中不断增长的大型表的好方法是什么?

约会门户的Mysql表和索引设计

php - (穷人的)产品推荐执行

MYSql:get ROWS 哪一个比较好? (Where IN ()) 或 foreach

mysql - 查找用户在网站上花费的总时间。

mysql - 具有多态关联的数据方案

mysql - 我们可以使用 Skip()、Take() 和 OrderBy() 来控制 LINQ 表达式顺序吗

MySQL:如何将表A的数据复制到新的不存在的表B?

database-design - 用于制作用户支持票系统的数据库模型

database-design - 在 PostgreSQL 中实现 Type-2 缓慢变化维度