我是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表包含带有主键的房间,并与HotelName和RoomNumber相结合。此时,我希望每次插入新的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我的问题是如何将组合键设置到表中,以便每次更改RoomNumber时都可以插入HotelName
发布于 2014-05-21 22:21:31
InnoDB表不支持按您描述的方式跟踪每家酒店不同最大值的自动增量。InnoDB只跟踪每个表的一个自动增量值。
MyISAM表确实支持此特性,但这只是因为MyISAM执行表级锁定,所以它能够扫描表以获得相应酒店的最大id值。另外,MyISAM不支持回滚,因此它不太可能在序列中产生空白。
但尽管如此,I recommend against using MyISAM。
简而言之:您可以创建一个复合主键,但不能使用自动增量来填充它。您必须在INSERT语句中提供特定的整数。
发布于 2014-05-21 22:10:05
使用在两个表中定义为主键的auto_increment int或大int字段,将房间表重写为(大) int引用而不是名称。房间号本身(在insert上)不能默认为自动递增,但这并不是一件坏事,因为我已经看到许多酒店的房间周期从112到200,因为在一个特定的建筑物每层只有12个房间大。
发布于 2014-05-21 22:34:21
房间号为什么是汽车公司?
那套房呢,房间号有空隙的酒店呢?
我个人会被room_id汽车公司的代理人诱惑,但这是另一个问题,而且总的来说是一个非常固执己见的问题。
房间号是一个自然的键,不应该自动递增.
https://stackoverflow.com/questions/23794624
复制相似问题