【发布时间】:2014-05-21 22:03:02
【问题描述】:
我是 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
我的问题是如何为表格设置组合键,以便每次更改HotelName 时都可以插入RoomNumber?
【问题讨论】:
-
将 Roomnumber 设为 primary_key 并在 (hotelname,roomnumber) 上使用唯一键
-
您的存储引擎必须是MyISAM,请查看stackoverflow.com/questions/23597482/…