如果表已存在,可以选择在MySQL中添加列和/或创建表吗?

时间:2011-12-16 16:46:48

标签: php mysql

我正在尝试运行一个脚本来自动升级某些db表,但是某些系统根本不存在该表。如何在MySQL中最好地编写这样的东西:

  1. 我有一个包含两列的现有表,地址 city 。我想添加列版本或者为没有该表的系统创建一个新表,所以:

  2. 创建表'hello'( 地址文本NOT NULL,
    city tinytext NOT NULL, version tinytext NOT NULL, )

  3. 但是,IF'hello'存在但没有列版本,保留表但添加新列?

  4. 在“版本”列中,为所有保留的数据添加值“old”,但为我将填充数据库的所有新条目添加“new”。

  5. Futureproof,所以我可以随时添加列,在升级不同版本的软件时检查迭代?

  6. 编辑:实际升级脚本上的一些PHP代码会有所帮助;想象一下,我有一个“激活”功能应该检查表,创建它或以其他方式修改它......

3 个答案:

答案 0 :(得分:1)

如果您不能或不想使用CREATE TABLE IF NOT EXISTS tablename,请回答您关于如何检查表是否存在的评论:

<?php

$db_name    = 'mydb';
$table_name = 'table';

mysql_connect("localhost", "mysql_user", "mysql_password");
$result = mysql_list_tables($db_name);
$num_rows = mysql_num_rows($result);

for ($i = 0; $i < $num_rows; $i++) {
  if (mysql_tablename($result, $i) == $table_name) {
    // the specified table exists, do what you need to
    break;
  }
}

?>

答案 1 :(得分:1)

检查表格是否存在:http://forums.mysql.com/read.php?101,112346,112672#msg-112672

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';

检查表中是否存在行: Check if a row exists, otherwise insert

我不确定未来的证据是什么意思?这些是非常通用的SQL查询,所以它应该是非常便携的。唯一的区别是表检查是特定于mysql但是将其更改为另一个数据库应该不是什么大问题。

答案 2 :(得分:0)

在PHP脚本中使用SQL中的ALTER表。

参考:http://www.w3schools.com/sql/sql_alter.asp

最佳,