varchar和auto increment togetter

时间:2013-12-01 00:32:25

标签: mysql sql

我在自己的数据库上工作,试图在我的日子里尽可能多地通过研究和谷歌的东西来学习! 我正在做一个简单的桌子,但是很少有人怀疑。 我真的很感激任何帮助!

我确实尝试使用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)       
   );

2 个答案:

答案 0 :(得分:0)

您无法使用AUTO_INCREMENT来解决此类问题。相反,您可以使用触发器。无论如何,已经为您的任务How to make MySQL table primary key auto increment with some prefix提供了解决方案。

<强>更新 关于解决外键问题。 首先,您的代码中的语法不正确FOREING必须为FOREIGN。 要创建外键本身,您需要在子表中创建适当的列和索引,正如我在您的注释中看到的那样,您只需使用FOREIGN语句而不创建相应的结构。仅此语句不会在表中创建必要的结构,因此您需要在创建外键之前自己创建该结构。例如,要创建passengerflight之间的关系,您需要调用:

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的自定义序列。通过使用线程锁定,确保只有一个客户端可以在代码中一次获得下一个序列。