具有复合主键的插入语句

时间:2019-05-24 08:37:35

标签: mysql sql

我有一个创建脚本,当时我已经创建了一个表,现在我正试图向其中插入数据,但是遇到了麻烦,因为我不确定如何将数据插入到复合PK中。

我尝试过分别添加两个键,但是似乎找不到语法。

CREATE TABLE airport
(  IATAAirportCodeDEP CHAR(3), 
   IATAAirportCodeARR CHAR(3) PRIMARY KEY(IATAAirportCodeDEP,IATAAirportCodeARR),
   countryCode  CHAR(4) FOREIGN KEY REFERENCES country(countryCode),
   airportName  VARCHAR(100) NOT NULL,
   latitude     DECIMAL(9,6)NOT NULL,
   longitude    DECIMAL(9,6)NOT NULL     );


 INSERT INTO airport 
(IATAAirportCodeDEP,
 IATAAirportCodeARR, 
 airportName, 
 latitude, 
 longitude, 
 countryCode)
 VALUES ('PER','Perth International Airport',-31.9403,115.9670029,'AU'),
        ('SYD','Sydney Kingsford Smith International Airport', -33.9460983, 151.177002, 'AU'),
        ('AKL','Auckland International Airport',-37.0080986, 174.7920074,'NZ'),
        ('DEL','Indhira Gandhi International Airport',28.5664997,77.1031036,    'IN'),
        ('PEK', 'Beijing Capital International Airport',40.080101,116.5849991,'CN'); 

第102层15州第141行的消息 ','附近的语法不正确。

1 个答案:

答案 0 :(得分:0)

尝试将逗号放在主键之前。一个通用的约定是将其结尾,但似乎您也可以将其放在列的中间(我不认为所有DBMS都将在列定义的中间支持完整的PRIMARY KEY定义)。

CREATE TABLE airport
(  IATAAirportCodeDEP CHAR(3), 
   IATAAirportCodeARR CHAR(3),
   countryCode  CHAR(4),
   airportName  VARCHAR(100) NOT NULL,
   latitude     DECIMAL(9,6) NOT NULL,
   longitude    DECIMAL(9,6) NOT NULL,   -- add comma here

 PRIMARY KEY(IATAAirportCodeDEP,IATAAirportCodeARR)
);

此外,您在插入值中需要两个IATA代码:

INSERT INTO airport 
(IATAAirportCodeDEP,
 IATAAirportCodeARR, 
 airportName, 
 latitude, 
 longitude, 
 countryCode)
 VALUES ('PER','TO?', 'Perth International Airport',-31.9403,115.9670029,'AU'),
        ('SYD','TO?', 'Sydney Kingsford Smith International Airport', -33.9460983, 151.177002, 'AU'),
        ('AKL','TO?', 'Auckland International Airport',-37.0080986, 174.7920074,'NZ'),
        ('DEL','TO?', 'Indhira Gandhi International Airport',28.5664997,77.1031036,    'IN'),
        ('PEK','TO?', 'Beijing Capital International Airport',40.080101,116.5849991,'CN'); 

我已输入“ TO”?作为价值。 我怀疑您的插入内容(值列表)实际上是正确的,并且表定义错误。您可能只希望将IATA作为机场表上的主键,而不是将IATA_DEP和IATA_ARR作为复合键。

“航班”表中可能有一个复合键...