gpt4 book ai didi

mysql - 自动增量: how to auto_increment a combined-key (ERROR 1075)

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

我是 mySQL 开发的新手,我正在尝试设置一个简单的酒店预订数据库。数据库的一部分是下面的表格列表:

  • 酒店
  • 房间

关系是:一个酒店包含多个房间,但一个房间属于一个特定的酒店(一对多关系)。所以我设计了这样的表格:

CREATE TABLE Hotels (
HotelName CHAR(50) NOT NULL UNIQUE,
HotelEmail CHAR(200) NOT NULL,
Category CHAR(1) NOT NULL,
Street CHAR(200),
StreetNumber CHAR(5),
PostalCodhotelse CHAR(10),
City CHAR(20),
Country CHAR(30),
Phone CHAR(10),
PRIMARY KEY (HotelName)
);

Rooms 表包含带有表主键与 HotelNameRoomNumber 组合的房间。此时,我希望每次插入新的 HotelName 时,都会重置 auto_increment (RoomNumber`),即:

Hotel   RoomNumber
------ ----------
HotelA 1
HotelA 2
HotelA 3
HotelB 1
HotelB 2
HotelC 1

所以我设计了Rooms表,如下所示:

CREATE TABLE Rooms (
HotelName CHAR(200) NOT NULL,
RoomNumber int auto_increment,
RoomType CHAR(30),
NumOfBeds INT Unsigned,
Description TEXT,
PRIMARY KEY (HotelName, RoomNumber),
FOREIGN KEY (HotelName)
References hotels (HotelName)
ON UPDATE cascade
);

但是,当我尝试执行最后一条 SQL 语句来创建表时,我收到消息:

Error Code: 1075. Incorrect table definition; there can be only one auto column and it must be defined as a key

我的问题是如何将组合键设置到表中,以便每次更改 HotelName 时都可以插入 RoomNumber

最佳答案

InnoDB 表不支持自动增量,以您描述的方式跟踪每个酒店的不同最大值。 InnoDB 每个表仅跟踪一个自动增量值。

MyISAM 表确实支持此功能,但这仅起作用,因为 MyISAM 执行表级锁定,因此它能够扫描表以查找相应酒店的最大 id 值。另外MyISAM不支持回滚,因此不太可能在序列中产生间隙。

但尽管如此,I recommend against using MyISAM .

简而言之:您可以创建复合主键,但不能使用自动增量来填充它。您必须在 INSERT 语句中给出特定的整数。

关于mysql - 自动增量: how to auto_increment a combined-key (ERROR 1075),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794624/

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