• ベストアンサー
  • 暇なときにでも

【初歩】 主キー&ユニーク&AUTO_INCREMENTをつけたフィールドを作りたい

・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 は正常に実行されるのですが。

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数2
  • 閲覧数4367
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • inu2
  • ベストアンサー率33% (1229/3720)

主キー = ユニーク でもありますので、 主キー設定するのであれば、ユニークは必要ありません また、同一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 ;

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

その他の回答 (1)

  • 回答No.2
  • inu2
  • ベストアンサー率33% (1229/3720)

No1です さっき回答した例だと 複合キー設定になっているという前提上、 KanriNo と Emailの複合キーでのユニークになりますので 質問の意図を加味すると UNIQUEは必要ですね ~ PRIMARY KEY (`KanriNo`,`Email`), UNIQUE KEY `KanriNo` (`KanriNo`), UNIQUE KEY `Email` (`Email`) ~ これを付け加えてください

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • SQLite(3.2.2)でauto_increment

    今、SQLiteを利用してつまづいています。 バージョンは3.2.2です。(Linux) MySQL、PostgreSQLの知識はあります。 プライマリーキー(id)にシリアルを作成しようと思い、http://cl.pocari.org/2006-02-12-1.html を参考にしながらテーブルを作りました。 CREATE TABLE bbs ( id INTEGER UNSIGNED NOT NULL PRIMARY KEY, name VARCHAR(255) NOT NULL, message TEXT NOT NULL, last_update TIMESTAMP NOT NULL ); このbbsテーブルに対し、 INSERT INTO bbs (name,message,last_update) VALUES ('name','message','2008-04-03 12:11:00'); というクエリを発行すると 「SQL error: bbs.id may not be NULL」 とういエラーが返ってきます。 確かに、bbsテーブルのidカラムは「NOT NULL」制約があるのでエラーが正しいとは思うのですが、参考URLのauto_incrementの作成方法には、auto_incrementにしたいカラムをPRIMARY KEYでやればできる、のような事が書いてあったので、よく分かりません。 バージョンの問題なのか、クエリに誤りがあるのか分かる方おられましたら解答お願いします。 また、auto_incrementなカラムの作成方法も一緒に教えていただけたら幸いです。 宜しくお願いします。

  • phpMyAdminでPRIMARY KEY AUTO_INCREMENT

    phpMyAdminの操作画面上でPRIMARY KEY AUTO_INCREMENTを設定する方法を教えてください。 SQLを使えばできるのですが、phpMyAdmin上ではAUTO_INCREMENTという項目が見当たりません。 かんたんな内容ですが、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • auto_incrementを任意の数字から開始するには

    次のようなテーブルで入力するとidが1~始まりますが、 これを1000~開始する方法が分かりません、ご教授お願いします。 CREATE TABLE addressbook ( id smallint(4) UNSIGNED NOT NULL auto_increment, name1 varchar(20) default NULL, birthday date default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=sjis;

    • ベストアンサー
    • MySQL
  • ODBC経由でMySQL5.0に auto_increment属性などを付加したテーブルを作成したい

    ODBC経由でMySQL5.0に auto_increment属性など付加した以下のテーブルを作成したいのですがODBCのSQL文はどう書けばよいのでしょうか? DROP TABLE IF EXISTS test; CREATE TABLE IF NOT EXISTS test ( a1 int(11) NOT NULL auto_increment, b1 enum('public','group','private') NOT NULL default 'public', c1 date NOT NULL default '0000-00-00', d1 mediumtext NOT NULL, PRIMARY KEY (`a1`) ) TYPE=MyISAM AUTO_INCREMENT=1 ; よろしくお願いします。

  • 主キーやオートインクリメントの事教えて!!!

    はじめまして。私は今ショッピングサイトを作ろうとしているものです。 データベース、Mysqlのプロフェッショナルに質問したいことがあります。 今作ろうとしているショッピングサイトでは顧客登録機能を付けようと思っています。顧客の主キーはメールアドレスにしようと思っているのですがいいんでしょうか? もちろん登録するときにメールアドレスが重複していないかのチェックはかけるので重複することはないと思いますがどうなんでしょう? またメールアドレスは顧客変更で変更される場合もあります。ですから主キーが変わるということになります。(変更時にもプログラムで重複チェックをかけるので重複はしないですが) それか別にオートインクリメントなどを主キーにするほうがいいでしょうか? 例 オートインクリメント メールアドレス 名前 住所 etc・・・ これなら主キーは一意にできますが知り合いから聞いた話ではオートインクリメントはあまり主キーなどに使わないほうがいいと聞きました。 皆さんならどんな感じのテーブルを作成しますか?

    • ベストアンサー
    • MySQL
  • SQL文を入力したらエラー

     phpMyAdminでSQLに  以下の文を入力しました。  CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default ' ' , org varchar(50) not null default ' ', addr varchar(80) not null default' ', tel varchar(20) default ' ', mail varchar(40) default ' ', course varchar(30) default ' ', nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;  以上SQLに入力した文ですが!  以下のエラーが出て先に進みません。   エラー 実行した SQL: CREATE DATABASE xmas; → (http://dev.mysql.com/doc/refman/5.5/en/create-database.htmlにリンクされている) MySQL のメッセージ: ドキュメント #1007 - Can't create database 'xmas'; database exists サーバ "127.0.0.1" 上でクエリを実行する: CREATE DATABASE xmas; USE xmas; CREATE TABLE xmastran ( book_id int not null auto_increment, name varchar(30) not null default ' ' , org varchar(50) not null default ' ', addr varchar(80) not null default' ', tel varchar(20) default ' ', mail varchar(40) default ' ', course varchar(30) default ' ', nums integer default 0, PRIMARY KEY (book_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;   以上ですが、何が原因で進めないか原因を追及中です。  最近SQLを始めたので、全く見当がつきません。 皆様よろしくお願いします。  

    • ベストアンサー
    • MySQL
  • DBでAUTO_INCREMENTのフィールドの最新の数値を知るには

    PHP+MySQLで開発しています。 自らがDBテーブルに書き込んだレコードの、AUTO_INCREMENT指定してある項目に設定された数値を取得したいのですが、どのようにすればいいのでしょうか。 DB指定 CREATE TABLE test( no INT NOT NULL AUTO_INCREMENT, comment TEXT, PRIMARY KEY(no) ); PHP書き込み $sql = "INSERT INTO test(comment)VALUES('いろは')"; $results = mysql_query($sql,$dbid); このとき、テーブルtestのフィールドnoに設定された数値を知るために、 今はわざわざSQL select MAX(no) from test を発行しています。 これですと、確実性に欠けますし、冗長な気がします。 他に何か効率的な方法があるような気がしますので、 質問いたしました。 よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 投稿サイトをサクッと作りたい

    http://webeg.info/php-course/step3-030/のログイン画面をログインして、投稿サイトを作りたいのですが、 ログイン情報はどこで定義してなんというものになっているのでしょうか? 空にして もログインできません。 投稿部分だけが欲しいのですが、ログインしないと作れないようです。 もちろんもっと簡単に投稿サイトが作れる情報があればそれでも構いません。 CREATE TABLE `users` ( `user_id` int(11) NOT NULL COMMENT '通しID', `user_loginid` varchar(20) NOT NULL COMMENT 'ログインID', `user_password` varchar(100) NOT NULL COMMENT 'パスワード', `user_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時', `user_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '作成日時' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理画面ユーザー'; ALTER TABLE `users` ADD PRIMARY KEY (`user_id`); ALTER TABLE `users` MODIFY `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '通しID', AUTO_INCREMENT=1; アカウントの追加 を実行しただけなのでPW、IDは空と考えてよいでしょうか? パスワードの所には長さ100とコメントパスワードとしか記載がないのですがdbではどこにpwを入れるのですか? この場合は空と考えるべきでしょうか? 投稿サイトをサクッと作りたいだけなのですが、もっと簡単に作る方法はないのでしょうか?

    • ベストアンサー
    • MySQL
  • NOTNULL制約について

    MYSQL ver4.0.20a 下記のようにNOTNULL制約を付けてテーブルを作成するのですが、 デフォルト値が勝手に設定されてしまいます。 CREATE TABLE TEST_01 ( NO int(8) NOT NULL auto_increment, STATUS int(1) NOT NULL, TOUROKUBI date NOT NULL, MEMO varchar(200) NOT NULL, PRIMARY KEY (NO) INT型だと 0 varchar型だと '' date型だと 0000-00-00 インサートの時に値がNULLの場合、SQLエラーを返してほしいのですが、 デフォルト値が設定されている為、登録されてしまいます。 本当はNOTNULL制約で、DBにチェックを任せたいのですが・・・ どなたかご存知の方、教えてください。 お願いします。

    • ベストアンサー
    • MySQL
  • varchar型を主キーに…

    現在サーブレット/JSPを利用してDBにユーザアカウントを登録、削除、更新、一覧をできるようするシステムを作成しています。 テーブルを create table loginuser ( userId char(16) not null default '', passwd char(16) not null default '', name varchar(50) not null default '', accessFlg int(1) not null default '0', primary key(userId)); で作成しました。 IDが数字の時はDBに登録ができるのですがIDに文字を入力するとDBに登録されません。 主キーをvarchar型で使用するのは不可能なのでしょうか? ご返答をよろしくお願いします。