【问题标题】:The forgein key has the value NULL外键的值为 NULL
【发布时间】:2023-03-10 15:56:01
【问题描述】:

我正在尝试设计我的数据库表以从routes 表中获取route,这取决于骑手的位置,并且时间必须达到当前时间。当我在所有表中插入一些数据然后routesarrivalestimes 表中的stop_id 是NULL 时,我遇到了问题?数据库设计有问题吗?

一站有多条路线。一条路线有很多站。一站有很多到达时间。

感谢您的帮助。

  CREATE TABLE IF NOT EXISTS stops
    (stop_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
     name varchar(30) NOT NULL, 
     lat double(10,6) NOT NULL, 
     longi double(10,6)NOT NULL) 

  INSERT INTO stops(name,  lat, longi) values
      ('ABC', '63.838039', '18.700440' ),
      ('DEF', '63.840642', '18.701246' ),             
      ('HIG', '63.868863', '18.665438' )

   CREATE TABLE IF NOT EXISTS arrivaltimes(arrivaltimes_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
      weekday VARCHAR(20) NOT NULL,
      arrivaltime time NOT NULL,
      stop_id INT, FOREIGN KEY fk_stop_id(stop_id) REFERENCES stops(stop_id) )

   INSERT INTO arrivaltimes(weekday, arrivaltime) values
       ('mon-fri', '05:30' ),
       ('mon-fri', '06:07' )

  CREATE TABLE IF NOT EXISTS routes
    (routes_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
     route INT(11) NOT NULL, 
     stop_id INT, FOREIGN KEY fk_stop_id(stop_id) REFERENCES stops(stop_id) )

  INSERT INTO routes(route) values
     ('1'),
     ('9')

【问题讨论】:

  • 请去掉stt.execute()的包装,直接显示SQL代码。这将比您现在拥有的更具可读性。
  • 您必须在最后一条sql语句中显式插入外键的值以及其他属性,例如路由。

标签: mysql sql jdbc


【解决方案1】:

请注意:FOREIGN KEY REFERENCES 不会自行插入任何内容。

  • 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

  • FOREIGN KEY 约束防止无效数据插入外键列,因为它必须是它指向的表中包含的值之一。

结果中显示的内容是正确的。在将记录插入路线和到达时间表时,您没有为 stop_id 传递任何值。

更改插入语句应该可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2011-08-06
    • 2014-06-13
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多