考虑城市和州。每个城市都存在于一个州内。每个州都有一个首都。
CREATE TABLE city (
city VARCHAR(32),
state VARCHAR(32) NOT NULL,
PRIMARY KEY (city),
FOREIGN KEY (state) REFERENCES state (state)
);
CREATE TABLE state (
state VARCHAR(32),
capital_city VARCHAR(32),
PRIMARY KEY (state),
FOREIGN KEY (capital_city) REFERENCES city (city)
);
第一个问题 - 您无法创建这些表,因为外键无法引用(尚)不存在的表中的列。解决方法是先创建不带外键的,然后再添加外键。
第二个问题 - 您不能在任一表中插入行,因为每次插入都需要另一个表中预先存在的行。解决方案是设置一个
外键列为 NULL,并分两个阶段插入该数据。例如
--Create state record
INSERT INTO state (state, capital_city) VALUES ('Florida', NULL);
--Create various city records
INSERT INTO city (city, state) VALUES ('Miami', 'Florida');
INSERT INTO city (city, state) VALUES ('Tallahassee', 'Florida');
INSERT INTO city (city, state) VALUES ('Orlando', 'Florida');
--Set one of the cities as the capital
UPDATE state SET capital_city = 'Tallahassee' WHERE state = 'Florida';