我试图编写一个查询,判断MySQL中的特定表是否有特定列,如果没有,则创建它.否则什么都不做.这在任何企业级数据库中都是一个非常简单的过程,然而MySQL似乎是一个例外.

我觉得

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
           WHERE TABLE_NAME='prefix_topic' AND column_name='topic_last_update') 
BEGIN 
ALTER TABLE `prefix_topic` ADD `topic_last_update` DATETIME NOT NULL;
UPDATE `prefix_topic` SET `topic_last_update` = `topic_date_add`;
END;

它会起作用,但失败严重.有办法吗?

推荐答案

这对我很管用.

SHOW COLUMNS FROM `table` LIKE 'fieldname';

有了PHP,它会像...

$result = mysql_query("SHOW COLUMNS FROM `table` LIKE 'fieldname'");
$exists = (mysql_num_rows($result))?TRUE:FALSE;

Mysql相关问答推荐

为什么SQL会打印\\.& '而不是\.'在命令行上?

mysql查询汇总数据

try 使用TypeORM创建新表时出现SQL语法错误

SQL - Select 复合主键,条件为其中一个主键

使用触发器markdown 10%

使用复合主键更新后的MySQL触发器失败

Hibernate 不创建表'

没有 ORDER BY 的查询性能很高,有 ORDER BY 的查询速度慢得像爬行一样

如何将数据导入MySQL中的master/replica struct

是否可以使用以EXPLAIN EXTENDED ...开头的 SQL 语句修改数据?

「已解决」MySQL 连接在 vb6 上出现运行时错误 -2147467259 (80004005),但在 VBA Excel 上工作

如何优化使用多个 LEFT JOIN 和 GROUP BY 子句的慢速 MySQL 查询?

使用带有 ELSEIF 和 ELSE 的 3 列更新问题

函数 mysql_real_escape_string 的 PDO 类似功能是什么?

通过数据库级​​别本身的查询反序列化

MySQL:低基数/ Select 性列=如何索引?

如何通过一个查询批量更新 mysql 数据?

如何在 MySQL 中为用户设置默认架构

使用 mysql 处理非常大的数据

Sequelize:销毁/删除表中的所有记录