最近,我一直在尝试使用数据库来推进我的网站功能。我不断看到创建表的不同方法;其中一个似乎是通过代码创建你的表。
示例:
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代码中,那么每次运行该脚本时都不会尝试反复创建同一个表吗?或者只有在表格尚不存在时才会起作用吗?
答案 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
语句,如果它以某种方式检测到该表丢失。 (例如,如果SELECT
或INSERT
失败。)
提供一个单独的脚本,用于设置数据库,该数据库只安装一次,由安装使用数据库的人员运行。相同的脚本也可以执行其他一次性任务,例如插入样本数据和生成随机令牌。
(如果再次运行,它可能会检查是否存在必要的表,并在必要时尝试修复或升级它们。)
¹可以使用其他服务器端脚本语言。