代码之家  ›  专栏  ›  技术社区  ›  learner

使用外键约束在多个表中输入数据

  •  1
  • learner  · 技术社区  · 8 年前

    我有以下数据:

    Array
    (
        [teacher_street] => Okhla
        [teacher_city] => Delhi
        [teacher_state] => National Capital Territory of Delhi
        [teacher_pin] => 110025
    )
    

    我需要将上述数据插入一个名为address的表中:

    CREATE TABLE `address` (
      `address_id` int(11) NOT NULL,
      `address_street` varchar(255) NOT NULL,
      `city_id` int(11) NOT NULL,
      `state_id` int(11) NOT NULL,
      `address_pin` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    现在,如果城市和州不存在,我需要首先在城市表和州表中插入城市和州。如果它们存在,我需要获取它们对应的主键:

    CREATE TABLE `city` (
      `city_id` int(11) NOT NULL,
      `city_name` varchar(100) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    CREATE TABLE `state` (
      `state_id` int(11) NOT NULL,
      `state_name` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    之后,我需要获得相应的主键,并需要将其放入第一个表中。我怎样才能一蹴而就呢?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Bill Karwin    8 年前

    您的city和state表似乎没有AUTO\u INCREMENT主键。在插入这些表时,必须指定值。

    如果是这样,那么您的应用程序代码具有刚刚插入的值,您可以在插入地址表时使用它。

    如果您确实使用AUTO\u INCREMENT主键,则必须查询 LAST_INSERT_ID() 在插入城市和州表后获取id,并在插入地址表时使用这些id。或者,如果您不想这样做,请在插入到地址之前通过搜索城市名称或州名称来查询id。