SQL错误主键不为空如何修复

问题描述 投票:0回答:1

我正在尝试将 SQL 代码插入到我的 gta v Fivem 服务器数据库中,但出现错误。

代码:

CREATE TABLE IF NOT EXISTS `gloveboxitems`
(
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `plate` varchar(255) DEFAULT NULL,
    `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
    PRIMARY KEY (`plate`),
    KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `stashitems` 
(
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `stash` varchar(255) DEFAULT NULL,
    `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
    PRIMARY KEY (`stash`),
    KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `trunkitems` 
(
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `plate` varchar(255) DEFAULT NULL,
    `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
    PRIMARY KEY (`plate`),
    KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `player_vehicles` 
(
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `license` varchar(50) DEFAULT NULL,
    `citizenid` varchar(50) DEFAULT NULL,
    `vehicle` varchar(50) DEFAULT NULL,
    `hash` varchar(50) DEFAULT NULL,
    `mods` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
    `plate` varchar(50) NOT NULL,
    `fakeplate` varchar(50) DEFAULT NULL,
    `garage` varchar(50) DEFAULT NULL,
    `fuel` int(11) DEFAULT 100,
    `engine` float DEFAULT 1000,
    `body` float DEFAULT 1000,
    `state` int(11) DEFAULT 1,
    `depotprice` int(11) NOT NULL DEFAULT 0,
    `drivingdistance` int(50) DEFAULT NULL,
    `status` text DEFAULT NULL,
    `balance` int(11) NOT NULL DEFAULT 0,
    `paymentamount` int(11) NOT NULL DEFAULT 0,
    `paymentsleft` int(11) NOT NULL DEFAULT 0,
    `financetime` int(11) NOT NULL DEFAULT 0,
    PRIMARY KEY (`id`),
    KEY `plate` (`plate`),
    KEY `citizenid` (`citizenid`),
    KEY `license` (`license`)
) ENGINE=InnoDB AUTO_INCREMENT=1;

错误:

SQL 错误 (1171):主键的所有部分都必须为 NOT NULL;如果您需要在键中使用 NULL,请使用 UNIQUE 来代替

我尝试了在谷歌上找到的所有方法,但真的不知道

database fivem
1个回答
0
投票

主键意味着该列(或列组合,如果主键中有多个列)中的值是唯一的且不为空。

让我们以

gloveboxitems
表为例(同样的问题在其他表中也重复出现。
plate
应该是主键,但它可以为空,这不会成功。您可以将其定义为不可为空:

CREATE TABLE IF NOT EXISTS `gloveboxitems`
(
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `plate` varchar(255), -- Here
    `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
    PRIMARY KEY (`plate`),
    KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

或者,如果您希望值唯一但允许

null
,则可以使用唯一约束而不是主键:

CREATE TABLE IF NOT EXISTS `gloveboxitems`
(
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `plate` varchar(255) DEFAULT NULL,
    `items` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
    UNIQUE (`plate`), -- Here!
    KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
© www.soinside.com 2019 - 2024. All rights reserved.