我正在尝试运行一个脚本来自动升级某些db表,但是某些系统根本不存在该表。如何在MySQL中最好地编写这样的东西:
我有一个包含两列的现有表,地址和 city 。我想添加列版本或者为没有该表的系统创建一个新表,所以:
创建表'hello'(
地址文本NOT NULL,
city tinytext NOT NULL,
version tinytext NOT NULL,
)
但是,IF'hello'存在但没有列版本,保留表但添加新列?
在“版本”列中,为所有保留的数据添加值“old”,但为我将填充数据库的所有新条目添加“new”。
Futureproof,所以我可以随时添加列,在升级不同版本的软件时检查迭代?
编辑:实际升级脚本上的一些PHP代码会有所帮助;想象一下,我有一个“激活”功能应该检查表,创建它或以其他方式修改它......
答案 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)