【问题标题】:MySQL: Foreign Key is always 0MySQL:外键始终为 0
【发布时间】:2014-08-08 17:25:05
【问题描述】:

我正在尝试在 MySQL 中创建两个表,并通过用户 ID (uid) 和后 ID (pid) 将它们链接在一起。 users 表有一个自动递增的主键 uid,posts 表有一个主键 pid。帖子表的外键是帖子表的 uid。由于某种原因,posts 表的 uid 列总是 0,而它应该指向 users 表的 uid 值。

CREATE TABLE users
(
    uid int NOT NULL AUTO_INCREMENT,
    email varchar(100) NOT NULL,
    username varchar(100) NOT NULL,
    dob varchar(10) NOT NULL,
    password varchar(100) NOT NULL,
    PRIMARY KEY (uid)
);

  CREATE TABLE posts
(
    pid int NOT NULL AUTO_INCREMENT,
    uid int NOT NULL,
    username varchar(100) NOT NULL,
    date date NOT NULL,
    title varchar(225) NOT NULL,
    content mediumtext NOT NULL,
    PRIMARY KEY(pid),
    FOREIGN KEY(uid) REFERENCES users(uid)
);

两个表的输出为:

    mysql> select *from users;
+-----+----------------+-------------+------------+----------+
| uid | email          | username    | dob        | password |
+-----+----------------+-------------+------------+----------+
|   1 | test@test.com  | Test User1  | 11/11/1111 | passwor1 |
|   2 | test2@test.com | Test User2  | 22/22/2222 | passwor2 |
|   3 | test3@test.com | Test User 3 | 33/33/3333 | passwor3 |
+-----+----------------+-------------+------------+----------+
3 rows in set (0.00 sec)

mysql> select *from posts;
+-----+-----+-------------+------------+----------------+--------------------------------------------------+
| pid | uid | username    | date       | title          | content                                          |
+-----+-----+-------------+------------+----------------+--------------------------------------------------+
|   1 |   0 | Test User 3 | 2014-08-08 | Test Post      | TEST
|   2 |   0 | Test User 3 | 2014-08-08 | Test Post 2    | Test post please ignore  
|   3 |   0 | Test User 3 | 2014-08-08 | TEST AGAIn     | Test test test test test
+-----+-----+-------------+------------+----------------+--------------------------------------------------+
3 rows in set (0.00 sec)

根据上面的数据,uid 列应该是“3”,这是在 users 表中定义的测试用户 3 的 uid。相反,uid 列始终为 0。

有什么想法吗?

谢谢。

【问题讨论】:

  • 你能分享一下你用来用这些行填充表格的插入语句吗?
  • 外键值不会被神奇地填充,但必须在INSERT 语句中输入。它旨在确保参照完整性。 IE。您不能为不存在的客户生成订单。您应该查看INSERT 脚本,或者在此处也提供该脚本。
  • 您是否真的在创建新帖子记录时将 uid 值插入帖子中?这不会因为您创建了外键而神奇地发生。
  • 您很困惑,因为您在其上创建了 FK,所以 post 表中的 uid 会自动填写。不,您必须相应地插入数据。这里没有自动业务。
  • 是的,就是这样。我想我完全误解了外键的实际功能。我会修改我的插入语句。谢谢!

标签: mysql sql


【解决方案1】:

您的 INSERT 语句必须包含您的外键。

如果帖子与用户 1 有关系,您的插入语句将如下所示:

INSERT INTO posts (uid, username, date, title, content) VALUES(1,'test','2014-08-01','title','content');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2023-03-10
    • 2014-01-09
    • 1970-01-01
    相关资源
    最近更新 更多