0

创建表时使用快捷查询分配主键的正确方法是什么?

这是我的快捷方式的示例:

create table booking_product (
`id` int(10) not null constraint `booking_product_id` primary key auto_increment ,
`bookingId` int(10) not null,
`serviceId` int(10) not null,
`date` date not null,
`price` decimal(30,15) not null,
`qty` int(1) not null,
`currencyId` int(10) not null,
`total` decimal(30,15) not null,
`roomInclusion` text null default null,

foreign key booking_product(bookingId) references booking(id) on update cascade on delete cascade,
foreign key booking_product(serviceId) references service(id) on update cascade on delete set null,
foreign key booking_product(currencyId) references currency(id) on update cascade on delete set null
) engine = InnoDB;
  • 注意第 2 行我尝试分配主键,但是这个查询是错误的并产生错误。如果我尝试只使用id int(10) not null primary key auto_increment ,我会得到错误:Duplicate key name 'booking_product'
4

2 回答 2

3

如果使用constraint booking_product_id,则不会出现错误,Duplicate key name 'booking_product'因为 SQL 解析器在第一个错误处停止。

丢弃constraint booking_product_id和使用

foreign key bookingId_fk(bookingId) references booking(id)
    on update cascade
    on delete cascade,
foreign key serviceId_fk(serviceId) references service(id)
    on update cascade
    on delete set null,
foreign key currencyId_fk(currencyId) references currency(id)
    on update cascade
    on delete set null
于 2013-03-29T19:09:37.230 回答
1

我知道你选择了一个答案,但是当我将你的 create 语句简化为下面的代码时,我让它工作了。现在,通过 Oswald 添加的“删除约束”请求,您可能拥有您想要的一切:

create table booking_product (
id int(10) not null auto_increment,
PRIMARY KEY(id),  <<<<< this worked for me...
bookingId int(10) not null,
serviceId int(10) not null,
date date not null,
price decimal(30,15) not null,
qty int(1) not null,
currencyId int(10) not null,
total decimal(30,15) not null,
roomInclusion text null default null)

同样,我只是从您提出的分配主要问题的问题中处理问题。

希望这可以帮助。

于 2013-03-29T19:27:07.643 回答