2016-08-23 10 views
2

以下は私のテーブルスキーマです。自動インクリメントのためにMYSQLテーブルを作成できません

CREATE TABLE `tbl_certificate` 
(
`certificate_id` int(11) NOT NULL AUTO_INCREMENT,  
`certificate_number` varchar(150) NOT NULL,  
`vin_no_id` varchar(50) NOT NULL,  
`product_id` int(11) NOT NULL,  
`duration_id` int(11) NOT NULL,  
`clientId` varchar(30) NOT NULL,  
`first_name` varchar(50) NOT NULL,  
`last_name` varchar(50) NOT NULL,  
`state` varchar(256) NOT NULL,  
`city` varchar(256) NOT NULL,  
`mobile` varchar(30) NOT NULL,  
`alternate_contact_number` varchar(30) NOT NULL,  
`land_line` varchar(256) NOT NULL,  
`address` varchar(300) NOT NULL,  
`email_id` varchar(50) NOT NULL,  
`registration_no` varchar(20) NOT NULL,  
`make_id` varchar(255) NOT NULL,  
`model_id` varchar(100) NOT NULL,  
`vehical_sale_date` date NOT NULL,  
`vehical_delivery_date` date NOT NULL,  
`engine_number` varchar(30) NOT NULL,  
`fuel` varchar(20) NOT NULL,  
`odometer_reading` varchar(30) NOT NULL,  
`color` varchar(32) NOT NULL,  
`variant` varchar(16) NOT NULL,  
`refered_by` int(11) NOT NULL,  
`user_id` varchar(30) NOT NULL,  
`created_date` date NOT NULL,  
`complete_status` varchar(30) NOT NULL,  
`price_amt` varchar(20) NOT NULL,  
`servicetax_amt` varchar(20) NOT NULL,  
`total_amt` varchar(20) NOT NULL,  
`quotationNumber` bigint(20) NOT NULL,  
`programstart` date NOT NULL,  
`programend` date NOT NULL,  
`uploaded_certificate` int(11) NOT NULL COMMENT '0-No,1-Yes',  
`certificate_create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,  
`savedCertificateDate` datetime NOT NULL,  
`purchaseCertificateDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
`transaction_no` varchar(256) NOT NULL,  
`expired` int(11) NOT NULL DEFAULT '0' 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

誤ったテーブル定義のようなエラーをスローします。自動列が1つしかなく、キーとして定義する必要があります。

問題が発生していません。自動増分フィールド名は「certificate_id」です。

助けてください。

答えて

1

AUTO_INCREMENTのDDLには、PRIMARY KEYという制約を含める必要があります。

CREATE TABLE `tbl_certificate` 
(
    `certificate_id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    ... 
) 

明らかに、AUTO_INCREMENTは、基本的にインデックス付きキーの属性です。スキーマ内のインデックスとして属性を定義しません。したがって、列はAUTO_INCREMENT属性のないインデックス付きキーになることがありますが、インデックスが設定されていない場合はAUTO_INCREMENT属性を持つことはできません。詳細は、MySQL documentationを参照してください。

+0

ありがとうございました。しかし、mysqlのAUTO_INCREMENT自身のプライマリキーはそれではありませんか? – Pratik

+0

自動インクリメント列にはインデックスを付ける必要がありますが、必ずしもPKの一部である必要はありません(通常はpkまたはpkの一部です)。 – Shadow

+0

@Pratik no、そうではありません。私が上記のコメントと私の答えで述べたように、自動インクリメントフィールドにはインデックスを付ける必要があります。 – Shadow

0

この場合、エラーメッセージは非常に明確です。自動インクリメント列にはインデックスを付ける必要があります。テーブル定義のcertificate_idフィールドはインデックスの一部ではありません。

+0

私はそれを得ていない、あなたは私に参照を与えることができます。 – Pratik

+0

どのような参照ですか? – Shadow

+0

@Shadow私はPratikが、あなたが話している自動インクリメント事業に関するいくつかの情報へのリンクまたは参照を求めていると思います。参考までに、私はこの回答につきまして、低品質Posts-binを見直しました。おそらく答えの短い長さのためです。 –

関連する問題