Mysql:获取错误代码1452 - 无法更新子行

时间:2018-01-11 21:33:30

标签: mysql database

正如标题所说。我检查了一些stackoverflow响应并尝试实现他们的解决方案,但仍然得到错误1452。

我抓住了bug report

并将其应用于我的数据库。

    DROP TABLE IF EXISTS Countries;
    CREATE TABLE IF NOT EXISTS Countries (
      id int(11) NOT NULL,# AUTO_INCREMENT,
      sortname varchar(3) NOT NULL,
      name varchar(150) NOT NULL,
      phonecode int(11) NOT NULL,
      PRIMARY KEY (id)
    );

    DROP Table if EXISTS States;
    CREATE TABLE IF NOT EXISTS States (
      id int(11) NOT NULL,
      name varchar(150) NOT NULL,
      countryId int(11) NOT NULL,
      PRIMARY KEY (id),
      FOREIGN KEY (countryId) REFERENCES Countries(id)
    );

    DROP TABLE IF EXISTS Cities;
    CREATE TABLE IF NOT EXISTS Cities (
      id int(11) NOT NULL,
      name varchar(150) NOT NULL,
      stateId int(11) NOT NULL,
      PRIMARY KEY (id),
      FOREIGN KEY (stateId) references States (id)
    );

我的插页:

    INSERT INTO  Countries (`id`, `sortname`, `name`, `phonecode`) VALUES 
    (1, 'AF', 'Afghanistan', 93),
    (2, 'AL', 'Albania', 355),
    (3, 'DZ', 'Algeria', 213),
    (4, 'AS', 'American Samoa', 1684),
    (5, 'AD', 'Andorra', 376),
    ...

    #TRUNCATE TABLE States;
    INSERT INTO States(`id`, `name`, `countryId`) VALUES
    (1, 'Andaman and Nicobar Islands', 101),
    (2, 'Andhra Pradesh', 101),
    (3, 'Arunachal Pradesh', 101),
    (4, 'Assam', 101),
    (5, 'Bihar', 101),
    ...

    #TRUNCATE TABLE Cities;
    INSERT INTO Cities (`id`, `name`, `stateId`) VALUES
    (1, 'Bombuflat', 1),
    (2, 'Garacharma', 1),
    (3, 'Port Blair', 1),
    (4, 'Rangat', 1),
    (5, 'Addanki', 2),
    ...
    );

我对错误的看法是,最初,创建表是自动递增的,但创建/复制数据库的人仍然会插入id,我认为这不是必需的。所以在尝试了几件事后我删除了自动增量。不幸的是,没有决心。我想的另一件事是,外键(ID)可能与父表不匹配?但是,当我做一个简单的选择语句,如

Select * from States where id = 673; # 'Quebec'

我得到了正确的答复。解决这类问题的正确方法是什么?

编辑:当然我没有外键(通过直接复制他的存储库)让它工作但我认为这不是正确的方法。我认为外键是必要的。

Edit2:在原始sql脚本中添加了外键:

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;

    CREATE TABLE IF NOT EXISTS `states` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(30) NOT NULL,
      `country_id` int(11) NOT NULL DEFAULT '1',
      PRIMARY KEY (`id`),
      FOREIGN KEY (`country_id`) REFERENCES Countries(`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4121 ;

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

这使它成功,我不明白为什么:(

0 个答案:

没有答案