プロが教える店舗&オフィスのセキュリティ対策術

・WindowsXP(SP2)IIS5.1
・PHP 5.2.5 Win32
・MySQL 5.1.22 RC Win32
・phpMyAdmin 2.11.4

会社マスター(KAISYA)に管理番号、Eメール、氏名、備考、更新日時とあります。これらのうち、
・「管理番号」に、主キー、ユニーク制約、AUTO_INCREMENTを。
・「Eメール」に、主キー、ユニーク制約を
それぞれつけるにはどのようなSQL文を発行したらいいかご教示ください。

phpMyAdminで発行した下記のSQL文ですと、

CREATE TABLE IF NOT EXISTS `KAISYA` (
`KanriNo` int unsigned AUTO_INCREMENT COMMENT '管理番号',
`Email` varchar( 80 ) NOT NULL default '' COMMENT 'Eメール',
`Namae` varchar( 40 ) default NULL COMMENT '氏名',
`Bikou` text COMMENT '備考',
`UpdateDate` timestamp NOT NULL default '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時'
) ENGINE = InnoDB DEFAULT CHARSET = utf8

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
とエラーになってしまいます。
(このSQL例文には、主キー、ユニーク制約の件は未反映です)

`KanriNo` int ....の行を削除すればSQL は正常に実行されるのですが。

A 回答 (2件)

主キー = ユニーク でもありますので、


主キー設定するのであれば、ユニークは必要ありません
また、同一table内で別々のプライマリキーを設定することはできませんので、KanriNoとEmailの組での複合キーとしなくてはなりません

クリエイト文一発で作るのであればこんな感じです

CREATE TABLE IF NOT EXISTS `kaisya` (
`KanriNo` int(10) unsigned NOT NULL AUTO_INCREMENT ,
`Email` varchar(80) NOT NULL DEFAULT '',
`Namae` varchar(40) DEFAULT NULL ,
`Bikou` text ,
`UpdateDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`KanriNo`,`Email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    • good
    • 0
この回答へのお礼

inu2さん、ご回答ありがとうございました。
ご教示いただいたCREATE文で一発解決しました。
#2でアドバイスいただいた件も大変参考になりました。
ありがとうございました。

お礼日時:2008/02/11 22:56

No1です



さっき回答した例だと

複合キー設定になっているという前提上、
KanriNo と Emailの複合キーでのユニークになりますので
質問の意図を加味すると
UNIQUEは必要ですね



PRIMARY KEY (`KanriNo`,`Email`),
UNIQUE KEY `KanriNo` (`KanriNo`),
UNIQUE KEY `Email` (`Email`)

これを付け加えてください
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!