gpt4 book ai didi

php - mysql 服务器不接受 id 和 datetime 作为新记录

转载 作者:行者123 更新时间:2023-11-30 23:14:51 25 4
gpt4 key购买 nike

我有这个表,其中主键是一个无符号大整数作为 ID 的组合,然后是一个设置为 YYYY-MM-DD HH-MM-SS 的日期时间变量

我从以下评论中得到了这个想法: MySQL: Using DATETIME as primary key

我遇到的问题是,当我尝试插入具有相同 ID 但日期时间不同的新记录时,我收到一条错误消息,指出违反了重复 ID 的主键约束。

我的猜测是 MySQL 只比较日期时间数据类型的 YYYY-MM-DD 部分,因为它正在进行字符串比较,但我不确定...这只是我的理论。

我希望将日期时间用作主键的一部分的人会有所了解。

PHP 代码是正确的,因为显然正在创建第一条记录,但没有创建具有相同 ID 的第二条记录。

我试图不显示我的 SQL 代码,但它在这里

    CREATE TABLE userPosts(
postID SERIAL NOT NULL,
username varchar(21) NOT NULL,
time datetime NOT NULL,
text varchar(500),
type varchar(1) NOT NULL CHECK(type='t' OR type='f' OR type='u' OR type='b' OR type='c'),
-- visits integer NOT NULL DEFAULT 0,

CONSTRAINT FK_users_userPosts FOREIGN KEY(username) REFERENCES users(username) ON DELETE CASCADE,
CONSTRAINT PK_userPosts_username_postID_time PRIMARY KEY(postID,time)
);

我正在使用层次结构模型,其中该表将被描述为 ISA 表。

哇,我认为这是因为我将 ID 分配为我认为是唯一的 SERIAL 数据类型...我将不得不重新实现我的 php 来自动递增 ID,而不是数据库这样做。

我将重新实现我的代码并及时通知大家。

最佳答案

不,MySql 使用整个 datetime 列作为键的一部分,假设您已正确设置它。

因此,很可能您没有正确设置它。建议您发布您的表格规范(或您使用的 create table 命令),以便我们可以告诉您哪里出错了。

此外,您应该展示如何插入数据,因为这也可能是一个问题(例如,如果因为您的 insert 错误而忽略了时间部分)。


既然您已经显示 create table 命令,至少一个问题在于使用serial 数据类型。这是一个别名:

BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE

so 本身被认为是唯一的,无论它是否是主键的一部分。

这意味着任何行都不能具有相同的 postID 值,即使它具有不同的 time 值也是如此。如果您没有明确设置该列或者将其设置为 0 或 null(因为自动递增将在此时启动),那将不是问题,但如果您尝试这样做,它会咬住您设置一个已经存在的显式值。

如果您想明确设置它并允许在该列上重复,则应将其更改为类似 BIGINT UNSIGNED NOT NULL 的内容。然后主键约束将处理组合 postIDtime` 列中的重复项。

关于php - mysql 服务器不接受 id 和 datetime 作为新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18395241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com