在1-1关系中,为什么我的插入在两个表中插入两个记录?

时间:2017-02-23 16:01:41

标签: php mysql sql

当我INSERT表中与另一个人有1-1关系的记录时,我遇到了麻烦。

首先,生成表的SQL代码:

DROP TABLE IF EXISTS Facebook_Info;
DROP TABLE IF EXISTS Conversations;

CREATE TABLE IF NOT EXISTS Conversations(
c_id        INT AUTO_INCREMENT NOT NULL,
c_start     TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
channel     ENUM('desktop', 'facebook'),

u_name      VARCHAR(20) DEFAULT NULL,
u_email     VARCHAR(50) DEFAULT NULL,
PRIMARY KEY(c_id)
);

CREATE TABLE IF NOT EXISTS Facebook_Info (
c_id        INT AUTO_INCREMENT NOT NULL,

f_id        INT(12) NOT NULL,
PRIMARY KEY(c_id),
FOREIGN KEY(c_id) REFERENCES Conversations(c_id)
);

我向你保证这段代码有效:我测试了它。我希望这是在Conversations和Facebook_Info之间提供1-1关系的最佳方式。

无论如何,现在我可以向你介绍我的噩梦:我试图通过PHP(程序风格)在对话中插入新记录。

public function create_new_id_conv($channel = 1) {
    $w_ch = '';
    if ($channel == 2) {
        $w_ch = 'facebook';
    } else {
        $w_ch = 'desktop';
    }
    $query  = "INSERT INTO Conversations (c_id, c_start, channel) VALUES (NULL, CURRENT_TIMESTAMP,'$w_ch')";
    $conn   = mysqli_connect("localhost", Wrapper::DB_AGENT, Wrapper::DB_PSW, Wrapper::DB_NAME);
    $res    = mysqli_query($conn, $query);
    $id_conv= mysqli_insert_id($conn);
    mysqli_free_result($res);
    return $id_conv;
}

Wrapper :: *变量都设置得很好,实际上,INSERT操作完成了,但不仅仅是一个!在我调用此函数后,我遇到了这种情况:

这是对话表的内容:

This is the content of Conversations table

这里有Facebook_Info的内容:

And here's the content of Facebook_Info

发生了什么?

1 个答案:

答案 0 :(得分:0)

我搜索并搜索了......

然后我开始思考我到达的地方: 2147483647 。这个数字代表什么?那是什么?好像很多! 如果我的脚本和我的查询是正确的但错误是我的表格的骨架怎么办?

我必须注册一个14位整数,这对于INT type来说太大了。

因此使用BIGINT存储f_id字段使得所有正确且有效!

希望我的错误有助于某人!