如果不存在其他alter table,则创建表表

时间:2013-06-07 09:28:40

标签: php mysql alter-table create-table

我有一个带有表(邮件)的MySQL数据库,其中包含以下列:ID,内容,日期和标题。我想知道是否有一个选项来检查表是否存在,如果有,那么改变表格,例如,如果我想添加一个列。我找到的唯一可能的解决方案是这样的:

$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`)
) ");

}

所以我想知道是否有更简单的方法可以做到这一点,甚至可能在1个查询中(可能不是)?如果有人知道更好/更简单的方法,那就太棒了!

我知道Mysql_已被弃用但我很快就会切换到PDO!

2 个答案:

答案 0 :(得分:2)

尝试更改不存在的表将引发错误。这就足够了:

$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

我不能不提这个代码闻起来很糟糕。唯一不推荐对您的逻辑进行严格修改的情况是,这只与自动安装/升级过程有关。

答案 1 :(得分:0)

对此有一种不正常的黑客行为,效果很好

  • 创建一个脚本,
    • 执行CREATE TABLE IF NOT EXISTS ...内容
    • ALTER TABLE ...内容忽略导致错误
    • 通过file_put_contents(__FILE__,'');
    • 自杀
  • 包含它

首次运行时,它将执行必须执行的操作,在以后的运行中,您将包含一个空文件。即使是并发的第一次运行也没有问题,因为IF NOT EXISTS的结果只有一次是真的,而ALTER TABLE只会失败。

这提供了一个丑陋但工作路径,从无表或错误的表版本到所需的版本。