我有这个架构,这是我的第一个:
CREATE TABLE location (
id INT AUTO_INCREMENT PRIMARY KEY,
locality VARCHAR(20),
administrative_area_level_1 VARCHAR(20),
administrative_area_level_2 VARCHAR(20),
administrative_area_level_3 VARCHAR(20),
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17),
updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
CREATE TABLE country {
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
iso VARCHAR(20),
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17),
updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
}
首先,您能告诉我如何将我的位置表链接到国家/地区表,以便它也是必需的(即,您没有国家/地区的位置)。
除此之外,谁能告诉我为什么SQL小提琴可能会在我的架构上给我这个错误:
架构创建失败:您的SQL语法出错;校验 与您的MySQL服务器版本对应的手册 在第12行的'CREATE TABLE country'附近使用的语法:
答案 0 :(得分:1)
答案 1 :(得分:0)
您的代码应如下所示:
CREATE TABLE location (
id INT AUTO_INCREMENT PRIMARY KEY,
locality VARCHAR(20),
administrative_area_level_1 VARCHAR(20),
administrative_area_level_2 VARCHAR(20),
administrative_area_level_3 VARCHAR(20),
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17),
updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE country (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
iso VARCHAR(20),
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17),
updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
删除花括号并在语句
后添加分号(;)答案 2 :(得分:0)
SQL fiddle issue can be solve with following query
CREATE TABLE country (
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20),
iso VARCHAR(20),
loc VARCHAR (17) NOT NULL,
rad VARCHAR (17),
updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
答案 3 :(得分:0)
你应该在创建表时使用'('而不是'{'。 现在,如何加入这两个表。 根本不需要外键来加入这两个表。 在两个表中都有一个字段'id'相同,您可以使用此字段来连接这两个表。 通过使用以下查询:
SELECT l.administrative_area_level_1,c.name
FROM country c,location l
WHERE l.id=c.id
上面的查询将分别显示来自位置和国家/地区表的administrative_area_level_1和name字段,其中id列的值将相同。 但是您应该注意,该位置的id列应该与该国家/地区的id字段表示相同的记录。 否则会显示错误的数据。 基本上需要外键才能确保表格中没有歧义 例如,如果有一个id列并且对应于该id,则在另一个表中有另一列。 如果第二个表中存在一个id,而第一个表中没有id,则可能存在歧义。 因此,如果我们将id放在引用第二个表的外键下,那么如果第一个表中有一个id更新,那么它也会在第二个表中更新。所以你不能在第二列中创建自己的id。 希望这能帮助你解决外键问题。