链接MYSQL中的表 - 我需要外键吗?

时间:2013-08-14 10:37:16

标签: mysql sql database

我有这个架构,这是我的第一个:

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'附近使用的语法:

4 个答案:

答案 0 :(得分:1)

由于您使用了错误的括号({..}而不是(..)),您的第二个表创建失败了

至于外键 - 所有解释均可在手册页(herehere)中找到。

答案 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。  希望这能帮助你解决外键问题。