我在自己的数据库上工作,试图在我的日子里尽可能多地通过研究和谷歌的东西来学习! 我正在做一个简单的桌子,但是很少有人怀疑。 我真的很感激任何帮助!
我确实尝试使用VARCHAR
代替INT
从表单中获取reservation_code
,但我无法在其上使用AUTO_INCREMET
。我收到错误!预订代码应如下所示:123AB
。我该怎么办?
CREATE TABLE flight
(
reservation_code VARCHAR(5) NOT NULL AUTO_INCREMENT,
flying_from VARCHAR(20) NOT NULL,
flying_to VARCHAR(20) NOT NULL,
PRIMARY KEY (reservation_code)
);
CREATE TABLE passenger
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
last_name VARCHAR(20) NOT NULL,
sex VARCHAR(1) NOT NULL,
PRIMARY KEY (id),
FOREING KEY (reservation_code) REFERENCES flight(reservation_code),
FOREING KEY (flight_date) REFERENCES flight_detail(flight_date),
FOREING KEY (bank_card) REFERENCES passenger_details(bank_card)
);
CREATE TABLE passenger_details
(
bank_card INT NOT NULL AUTO_INCREMENT,
email VARCHAR(20) NOT NULL,
mobile INT NOT NULL,
PRIMARY KEY (bank_card)
);
CREATE TABLE flight_detail
(
flight_date DATE NOT NULL AUTO_INCREMENT,
PRIMARY KEY (flight_date)
);
答案 0 :(得分:0)
您无法使用AUTO_INCREMENT来解决此类问题。相反,您可以使用触发器。无论如何,已经为您的任务How to make MySQL table primary key auto increment with some prefix提供了解决方案。
<强>更新强>
关于解决外键问题。
首先,您的代码中的语法不正确FOREING
必须为FOREIGN
。
要创建外键本身,您需要在子表中创建适当的列和索引,正如我在您的注释中看到的那样,您只需使用FOREIGN
语句而不创建相应的结构。仅此语句不会在表中创建必要的结构,因此您需要在创建外键之前自己创建该结构。例如,要创建passenger
和flight
之间的关系,您需要调用:
CREATE TABLE flight(
reservation_code VARCHAR(10),
PRIMARY KEY (reservation_code)
);
CREATE TABLE passenger (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
last_name VARCHAR(20) NOT NULL,
sex VARCHAR(1) NOT NULL,
reservation_code VARCHAR(10),
PRIMARY KEY (id),
INDEX (reservation_code),
FOREIGN KEY (reservation_code)
REFERENCES flight(reservation_code)
);
在此处查看http://sqlfiddle.com/#!2/34ead
另请阅读有关MySQL here
中的外键的更多信息答案 1 :(得分:0)
创建一个表来存储类型为Char或varchar的自定义序列。通过使用线程锁定,确保只有一个客户端可以在代码中一次获得下一个序列。