首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Auto_Increment:如何组合键auto_increment (错误1075)

问Auto_Increment:如何组合键auto_increment (错误1075)
EN

Stack Overflow用户
提问于 2014-05-21 22:03:02
回答 4查看 131关注 0票数 0

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

  • 酒店
  • 房间

关系是:一家酒店包含多间客房,但一间客房属于一家特定的酒店(一对多的关系)。所以我把桌子设计成这样:

代码语言:javascript
复制
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`)时都要重置,即:

代码语言:javascript
复制
Hotel   RoomNumber
------  ----------
HotelA  1
HotelA  2
HotelA  3
HotelB  1
HotelB  2
HotelC  1

因此,我设计了这样的表Rooms:

代码语言:javascript
复制
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语句来创建表时,我会得到以下消息:

代码语言:javascript
复制
Error Code: 1075. Incorrect table definition; there can be only one auto column and it must be defined as a key

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-21 22:21:31

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

MyISAM表确实支持此特性,但这只是因为MyISAM执行表级锁定,所以它能够扫描表以获得相应酒店的最大id值。另外,MyISAM不支持回滚,因此它不太可能在序列中产生空白。

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

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

票数 0
EN

Stack Overflow用户

发布于 2014-05-21 22:10:05

使用在两个表中定义为主键的auto_increment int或大int字段,将房间表重写为(大) int引用而不是名称。房间号本身(在insert上)不能默认为自动递增,但这并不是一件坏事,因为我已经看到许多酒店的房间周期从112到200,因为在一个特定的建筑物每层只有12个房间大。

票数 0
EN

Stack Overflow用户

发布于 2014-05-21 22:34:21

房间号为什么是汽车公司?

那套房呢,房间号有空隙的酒店呢?

我个人会被room_id汽车公司的代理人诱惑,但这是另一个问题,而且总的来说是一个非常固执己见的问题。

房间号是一个自然的键,不应该自动递增.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23794624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档