这个脚本在每次运行时都不会创建相同的表格吗?

时间:2015-04-28 22:43:51

标签: mysql

最近,我一直在尝试使用数据库来推进我的网站功能。我不断看到创建表的不同方法;其中一个似乎是通过代码创建你的表。

示例:

CREATE TABLE `phone` (
    `id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
    `country` DECIMAL(5,0) UNSIGNED NOT NULL,
    `area` DECIMAL(5,0) UNSIGNED NOT NULL,
    `number` DECIMAL(8,0) UNSIGNED NOT NULL,
    `extension` DECIMAL(5,0) UNSIGNED DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

我对此感到困惑。如果这是在您的PHP代码中,那么每次运行该脚本时都不会尝试反复创建同一个表吗?或者只有在表格尚不存在时才会起作用吗?

2 个答案:

答案 0 :(得分:1)

这是SQL,特别是MySQL而不是PHP。

因此,有关行类型的信息,请阅读MySQL手册。这是有据可查的。 https://dev.mysql.com/doc/refman/5.5/en/create-database.html

并且有一种方法可以创建该表IF NOT EXISTS。但通常情况下,您不会尝试从代码中自动创建表格。我建议为您的数据库设计获取IDE。 Sun提供免费MySQL GUI Tools / Workbench

然后做一些关于SQL的初学者教程。很多很多人都在那里。

我通常不会对一个问题进行投票然后回答它...也许jsut关闭这个并再读一些?

答案 1 :(得分:0)

是的,每次都会尝试创建表格;并且,当表已经存在时,它将失败。

解决这个问题的三种方法:

  • 添加IF NOT EXISTS修饰符:CREATE TABLE IF NOT EXISTS phone (...)

    当表已存在时,这将使MySQL默默地跳过该语句。

  • 更改周围的PHP¹代码,以便它只运行CREATE TABLE语句,如果它以某种方式检测到该表丢失。 (例如,如果SELECTINSERT失败。)

  • 提供一个单独的脚本,用于设置数据库,该数据库只安装一次,由安装使用数据库的人员运行。相同的脚本也可以执行其他一次性任务,例如插入样本数据和生成随机令牌。

    (如果再次运行,它可能会检查是否存在必要的表,并在必要时尝试修复或升级它们。)

¹可以使用其他服务器端脚本语言。