2016-10-18 265 views
3

我想显示从另一个表中提取的外键值。外键显示空值

代码第一个表: ,我已经采用的代码第二表

CREATE TABLE trip (
    tripID INT(10) PRIMARY KEY, 
    startTime TIME, 
    endTime  TIME, 
    tripDate DATE, 
    price  VARCHAR(5), 
    databaseID INT(10), 
    FOREIGN KEY (databaseID) 
     REFERENCES databasestorage(databaseID) 
); 

代码:

CREATE TABLE databasestorage (
    databaseID INT(10) PRIMARY KEY,      
    location  VARCHAR(40) 
); 

插入值到这两个表,在trip表之后, databaseID仍显示为null,而其他所有列都是正确的。我如何使databaseID在我的trip表中显示databasestorage表中的值databaseID

+0

@JaydipJ我插入'databasestorage'表第一和'旅行'表第二个 –

+0

添加插入脚本以及 –

+0

INSERT INTO databasestorage(databaseID,location) \t VALUES('1021','Caulfield')'第一个表, 'INSERT INTO trip(tripID,startTime,endTime,tripDate,price) \t VALUES('101','20:20:00','20:40:00','2016-10-22','$ 5.25 ')'第二个 –

回答

1

您需要传递databasestorage表的主键,同时将数据插入到trip表中吗?

INSERT INTO databasestorage(databaseID, location) VALUES('1021', 'Caulfield') 

对于行程表,你需要明确的通行证在行程表databaseID列中的值,外键不会自动插入

             ---------v 
INSERT INTO trip(tripID, startTime, endTime, tripDate, price,databaseID) 
VALUES('101', '20:20:00', '20:40:00', '2016-10-22', '$5.25','1021') 
                 -----^ 
+0

你说得对,它不再显示为'null',我们是否必须自己手动更新外键? –

+0

是的,没错 –

0

试试这个;)

添加auto_increment表定义:

对于第一:

CREATE TABLE databasestorage (
    databaseID INT(10) PRIMARY KEY auto_increment, 
    location  VARCHAR(40) 
); 

对于第二:

CREATE TABLE trip (
    tripID INT(10) PRIMARY KEY auto_increment, 
    startTime TIME, 
    endTime  TIME, 
    tripDate DATE, 
    price  VARCHAR(5), 
    databaseID INT(10), 
    FOREIGN KEY (databaseID) 
     REFERENCES databasestorage(databaseID) 
); 

加成(插入查询)

INSERT INTO trip(tripID, startTime, endTime, tripDate, price) VALUES('101', '20:20:00', '20:40:00', '2016-10-22', '$5.25'); 

在此查询无需通过价值tripID它是一个auto_increment领域,我认为你是路过databaseIDtripID。因此,插入后你得到了databasestorage.databaseID值应在trip.databaseID

所以最终的查询传递将是:

INSERT INTO trip(startTime, endTime, tripDate, price, databaseID) VALUES('20:20:00', '20:40:00', '2016-10-22', '$5.25', 101); 

而作为trip.databaseIDINT场无需加引号('');

+0

我试图运行第一个代码,但它返回错误代码:1005,无法创建表's345。旅行'(errno:150) –

+0

@DarioOngsono更改表格创建顺序;第一主键字段表然后使用主键作为外键的表; – itzmukeshy7

+0

我刚刚尝试过它,它在表创建方面工作,但是在我首先输入'databasestorage'表和第二个'trip'表后,它仍然显示为null。 –