php - 如果表不存在则创建表,否则修改表

标签 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!

最佳答案

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

$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

我忍不住要提一下这段代码的味道真的很糟糕。我不建议对您的逻辑进行严格修改的唯一情况是,如果这仅与自动安装/升级过程相关。

关于php - 如果表不存在则创建表,否则修改表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16980708/

相关文章:

带有 curl 的 php 解析器 xml

Java MySQL 在删除行时更新行

MySQL MyISAM - 无法向表中添加新列

c# - 使用 Migrator.NET 从客户端进行 DB2 REORG TABLE

php - Predis 与 laravel 5.5 "No connections available in the pool in Aggregate/RedisCluster.php:337 "

php - 将 cURL 命令行转换为 PHP

php - 是否可以将查询作为数组进行,其中检查多个表是否有所需值?

MySql 根据员工 'expense' 组中的值对 'expense type' 表中的不同类型的费用求和

插入 SQL 语句所需的 PHP 变量

hive - Hive Alter表更改列名