1

I have this schema, it's one of my first:

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
}

First of all could you tell me how I can link my location table to a country table so that it is also required (i.e you can't have a location without a country).

Further to this, could anyone tell me why SQL fiddle might be giving me this error on my schema:

Schema Creation Failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE country' at line 12:

4

4 回答 4

1

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

至于外键 - 所有解释都可以在手册页(这里这里)中找到。

于 2013-08-14T10:40:56.377 回答
0

您应该在创建表时使用'('而不是'{'。现在,如何连接两个表。根本不需要外键来连接两个表。有一个字段'id'是在两个表中都相同,您可以使用此字段来连接两个表。通过使用以下查询:

SELECT l.administrative_area_level_1,c.name 
FROM country c,location l
WHERE l.id=c.id

上面的查询将分别显示 location 和 country 表中的 Administrative_area_level_1 和 name 字段,其中 id 列的值将相同。但是您应该注意,位置中的 id 列应该代表与该国家/地区的 id 字段相同的记录。否则它会显示错误的数据。基本上需要外键来确保表中没有歧义,例如,如果有一个 id 列并且与该 id 对应,则另一个表中有另一列。如果在第二个表中存在 id 而不是在第一个表中,则那里可能存在歧义。因此,如果我们将 id 放在引用第二个表的外键下,那么如果第一个表中有 id 更新,那么它也会在第二个表中更新。所以你不能在第二列中创建自己的 id。

于 2013-08-14T11:57:10.870 回答
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
  );

删除花括号并在语句后添加分号(;)

于 2013-08-14T10:43:32.040 回答
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
)
于 2013-08-14T10:44:29.833 回答