我有一个带有表(邮件)的MySQL数据库,表中有ID、Content、Date和Title列。我想知道是否有一个选项来检查表是否存在,如果存在,则更改该表,例如,如果我想添加一列。我找到的唯一可能的解决方案是这样的:
$sql=mysql_query(
"SELECT something FROM Mail");
if (!$sql){
mysql_query("ALTER TABLE Mail ADD Test VARCHAR(150) DEFAULT NULL");
}ELSE{
mysql_query("CREATE TABLE if not exists `Mail` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Content` longtext,
`Datum` varchar(15) DEFAULT NULL,
`Titel` varchar(150) DEFAULT NULL,
`Test` varchar(150) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ");
}所以我想知道是否有一种更简单的方法来做这件事,甚至是在一个查询中(可能没有)?如果有人知道更好/更简单的方法,那就太好了!
我知道Mysql_已经过时了,但我很快就会转到PDO了!
发布于 2013-06-07 17:37:15
尝试更改不存在的表会引发错误。这就足够了:
$res = mysql_query('ALTER TABLE Mail...');
if (!res) {
mysql_query('CREATE TABLE Mail...');
}或者你可以使用更多的黑客语言:
mysql_query('CREATE TABLE Mail IF NOT EXISTS...'); // does nothing if table already exists
mysql_query('ALTER TABLE Mail ADD Test...'); // does nothing if the column already exists我忍不住要提一下,这段代码真的很难闻。我不建议严重修改您的逻辑的唯一情况是,如果这只与自动安装/升级过程相关。
发布于 2013-06-07 17:36:46
对此有一个糟糕的技巧,效果很好。
创建脚本that
CREATE TABLE IF NOT EXISTS ... stuff
忽略生成的error,忽略ALTER TABLE ... stuff
通过做file_put_contents(__FILE__,'');来自杀
在第一次运行时,它将执行必须执行的操作,在以后的运行中,您将包含一个空文件。即使是并发的第一次运行也不会有问题,因为IF NOT EXISTS条件只有一次是真的,ALTER TABLE就会失败。
这提供了一条从没有表或表的错误版本到所需版本的丑陋但有效的路径。
https://stackoverflow.com/questions/16980708
复制相似问题