主キーが ID としての unsigned big int と、YYYY-MM-DD HH-MM-SS として設定された datetime 変数の組み合わせであるこのテーブルがあります。
私は次のコメントからアイデアを得ました: MySQL: Using DATETIME as primary key
私が抱えている問題は、同じ ID で日時が異なる新しいレコードを挿入しようとすると、重複 ID の主キー制約に違反しているというエラーが表示されることです。
私の推測では、MySQL は文字列比較を行っているため、datetime データ型の YYYY-MM-DD 部分のみを比較していると思いますが、よくわかりません...それは単なる私の理論です。
主キーの一部としてdatetimeを使用したことがある人が何らかの洞察を持っていることを望んでいました.
明らかに最初のレコードが作成されていますが、同じ ID を持つ 2 番目のレコードが作成されていないため、php コードは正しいです。
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をUNIQUEであると信じているSERIALデータ型として割り当てたからだと思います... データベースがそれを行うのではなく、IDを自動インクリメントするようにphpを再実装する必要があります。
コードを再実装し、皆さんに投稿し続けます。