• 締切済み

mySQLでのテーブル作成についての質問

テーブル内の列で Field || Type || Null || Key || Default || Extra ID | int(6) | YES | UNI | NULL | auto_increment と言うテーブルを作成するにはどう記述したら良いのでしょうか? auto_incrementを指定した場合はフィールドにNULLを許可する事は出来ないのでしょうか?

  • MySQL
  • 回答数4
  • ありがとう数1

みんなの回答

回答No.4

MySQLのバージョンは、何でしょうか? 「create table」及び「create index」の内容を、提示できませんか? 「show create table 表名」で、「create table」の内容を表示できます。 矛盾する定義をしていて、MySQL側に定義とは異なる解釈をされているように感じられます。 auto_incrementを指定した列に、nullを格納すると、自動的に+1する仕様になっています。 auto_incrementは、primary key指定が必須だと思っていましたが、unique指定でもOKのようです。ただし、この場合、not nullが自動的に仮定されます。 >実際に表から検索する場合はPRIの方で検索したいのです。下の図だとnameになります #1さんへの回答では、nameという列は存在していませんが? select ~ from ~ where name like 'abc%' のように、インデクスを利用できる条件指定をすればいいだけです。

回答No.3

#2回答者です。 「こういうようにしたい」という目的は、何なのでしょうか? まったく意味のないことだと思いますが?

tamanele
質問者

補足

このIDのフィールドは自動的に1→2→3となっていって、実際に表から検索する場合はPRIの方で検索したいのです。下の図だとnameになります。

回答No.2

auto_incrementを指定する列は、primary keyでなければならない ↓ primary keyの列は、自動的にnot nullとして扱われる

tamanele
質問者

補足

と言う事は物理的に無理って事ですよね?

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

CREATE TABLE `hogehoge` ( `id` INT( 6 ) DEFAULT NULL AUTO_INCREMENT , UNIQUE ( `id` ) ); これで行けませんでしょうか?

tamanele
質問者

補足

エラーが出てしまって無理でした。 現在作成したいテーブルはshow columnsで見た場合下記なのですが、NULLに何も表示しないと言う事は出来るのでしょうか? どうやっても出来ないので困ってます。 +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | f1 | int(5) | | UNI | NULL | auto_increment | | f2 | varchar(15) | | PRI | | | | f3 | varchar(10) | | MUL | | | | f4 | varchar(10) | | MUL | | | | f5 | varchar(10) | | MUL | | | | f6 | varchar(10) | | MUL | | | | f7 | varchar(10) | | MUL | | | | f8 | char(1) | | | 0 | | | f9 | varchar(40) | | MUL | | | | f0 | text | | | | | +-------+-------------+------+-----+---------+----------------+

関連するQ&A

  • 先ほども質問していたのですがテーブル作成についてです。

    もう少し細かく書こうと思い再度質問させて頂きます。 テーブル作成時のkeyの部分に(PRIやUNIが入る部分)MULを入れるにはどうしたら良いのか?と言う質問です。 +------------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------+------+-----+---------+-------+ | shiawase | int(7) | | *** | 0 | | | geitsuchan | int(5) | YES | *** | NULL | | | comicbeam | int(11) | | *** | 0 | | +------------+---------+------+-----+---------+-------+ 上記の図の***の部分にMULと表示させたいのですがどうすれば言いのでしょうか?PRIやUNIは設定する事が出来ました。

    • ベストアンサー
    • MySQL
  • 「Duplicate entry '1' for key 'PRIMARY'」というエラー。

    mysql> show fields from do; +-----------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | parent_id | int(11) | YES | | 0 | | | data_time | bigint(20) | YES | | NULL | | | text | text | YES | | NULL | | +-----------+------------+------+-----+---------+----------------+ というテーブルに、 insert into do values (1,1,1,'kkk'); などと、SQL文を実行すると、 Duplicate entry '1' for key 'PRIMARY' というエラーが出ます。 これはどういう意味のエラーなのでしょうか?

    • ベストアンサー
    • MySQL
  • テーブル結合した際、3行で返ってくるべき結果を一行で返す方法

    結合した2つのテーブルから県名と市町村名を取り出すため、下記のSQL文を書いてるのですが、結果が三行になって返ってきます。 当然の結果なのですが、これを一行にして返すことは可能でしょうか? ご存じの方いらっしゃいましたらお力添え頂ければと思います。 宜しくお願い致します。 SELECT pref.pref_name,city.city_name from pref left join city on pref.id = city.pref_id where pref.id = '1' 現状の結果 東京 港区 東京 葛飾区 東京 世田谷区 理想の結果 東京 港区,葛飾区,世田谷区 prefテーブル(都道府県) +-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | pref_name | varchar(255) | YES | | NULL | | +-------------+--------------+------+-----+---------+----------------+ cityテーブル(市町村) +---------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | pref_id | int(11) | YES | | NULL | | | city_name | varchar(255) | YES | | NULL | | +---------------+--------------+------+-----+---------+----------------+ +----+--------------+ | id | pref_name | +----+--------------+ | 1 | 東京都 | | 2 | 千葉県 | | 3 | 埼玉県 | +----+--------------+ +----+---------------+--------------+ | id | prefecture_id | city_name | +----+---------------+--------------+ | 1 | 1 | 港区 | | 2 | 1 | 葛飾区 | | 3 | 1 | 世田谷区 | | 4 | 2 | 船橋市 | | 5 | 2 | 我孫子市 | | 6 | 3 | 草加市 | | 7 | 3 | 和光市 | +----+---------------+--------------+

    • ベストアンサー
    • MySQL
  • テーブル作成時のNULLの列について。

    現在練習でDBを作成中なのですが、 +------------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------+------+-----+---------+-------+ | shiawase | int(7) | *** | | 0 | | | geitsuchan | int(5) | *** | | NULL | | | comicbeam | int(11) | *** | | 0 | | +------------+---------+------+-----+---------+-------+ 上記の図の***の位置(NULLの列)に何も表示させないと言う事は出来るのでしょうか?知り合いに試しに作ってみれば?といわれて渡されたテーブルのサンプルの表にNULLの列には何も表示されていませんでした。 ですが自分でテーブルを作成するとかならず***の部分にはYESかNOが入ってしまいます。 Verの違いとかなんでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLのテーブル設計で迷っています(桁数)

    MySQLのテーブル設計で迷っています。 クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか? int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。 型 バイト 最小値 最大値 TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807 CREATE TABLE `user` ( `no` int(8) unsigned NOT NULL auto_increment, `id` varchar(24) NOT NULL default '', `email` varchar(255) NOT NULL default '', `reg_date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`no`) ) TYPE=MyISAM;

    • ベストアンサー
    • 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 insert文に関するエラーについて

    ○質問の主旨 MySQLのデータベースにテーブルを作ってinsert文で データを追加しようとするとシンタックスエラーが出ます。 SQL文が間違っているのかと思いGoogle検索や本で調べたりしましたが、 なぜ文法エラーが発生するのか分かりません。 エラーと対処方法をご存知の方がいらっしゃいましたらご教示願います。 ○質問の補足 // usersテーブル create table users ( id int not null auto_increment primary key, created datetime not null, modified datetime not null, username varchar(255), password varchar(40) ); desc users; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | created | datetime | NO | | NULL | | | modified | datetime | NO | | NULL | | | username | varchar(255) | YES | | NULL | | | password | varchar(40) | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ insert into users (created, modified, username, password) values (now(), now(), 'test1', 'test1'), (now(), now(), 'test2', 'test2') ); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 3

    • ベストアンサー
    • MySQL
  • テーブルに空文字を入力させない方法

    MYSQLで下記のようなテーブルがあります。codeが主キーになっています。 +---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | day | varchar(255) | YES | | NULL | | | time_mm | varchar(255) | YES | | NULL | | | time_ss | varchar(255) | YES | | NULL | | | id | varchar(255) | YES | | NULL | | | code | varchar(255) | NO | PRI | NULL | | | stock | varchar(255) | YES | | NULL | | +---------+--------------+------+-----+---------+-------+ selectでデータを引っ張ってくると下記のようになります。 +------+---------+---------+-------+------+-------+ | day | time_mm | time_ss | id | code | stock | +------+---------+---------+-------+------+-------+ | NULL | NULL | NULL | dd | | NULL | | 1111 | 2222 | 3333 | 4444 | 1234 | 6666 | | 11 | 22 | 33 | 44 | 4649 | 66 | | 111 | 222 | 333 | 444 | 5963 | 666 | | NULL | NULL | fdfd | fdfd | fd | NULL | +------+---------+---------+-------+------+-------+ codeの一番上が空文字列になっているので、テーブルにデータが入っていると思うのですが、空文字も入力不可にさせたいです。 どのようにすれば実現させることができるでしょうか?

  • usersテーブルの構成カラムについて

    MySQLバージョン4.1.16を使用しています。 このジャンルでお願いします。 よく全ての基本となるusersテーブル(IDとパスワードを入れるユーザの基本テーブル) があると思うのですが、それを構成するカラムはどのような感じにするのが良いのでしょうか? 自分は、 CREATE TABLE `users` ( `user_id` varchar(16), `password` varchar(255) default NULL, `col1` varchar(255) NOT NULL, `col2` varchar(255) NOT NULL, PRIMARY KEY (`user_id`), ) ENGINE=InnoDB; このように代替キー(連番)を使わずにuser_idを主キー(unique)にして構成します。 理由としては、uniqueな列があるなら、わざわざ連番を割り当てる必要もないし、 他のテーブルがuser_idを外部キーとして持った時に、その表の外部キーの列が 数字であるよりも見やすいかなと思ったからです。 ただ一般的に出まわっているPHPフレームワークなどのテーブル構成ではusersテーブルというか ほとんどのテーブルに連番を使っている例があります。 次のusersテーブルは、PHPフレームワークのCakePHPで使われるusersテーブルの構成の例で、 連番を使用しています。 CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `username` varchar(255) collate utf8_unicode_ci default NULL, `password` varchar(255) collate utf8_unicode_ci default NULL, `group_id` int(11) NOT NULL, `disabled` tinyint(1) NOT NULL, `created` datetime default NULL, `modified` datetime default NULL, PRIMARY KEY (`id`), KEY `group_id` (`group_id`), KEY `disabled` (`disabled`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 使用状況によって、どちらが良い悪いというのは変わるのでしょうけど 基本的にusersテーブルというのはどのような構成にすべきなのでしょうか? ちなみに自分は連番は○○_seqというカラム名にしてます(ただこれも 一般的には○○idを連番にしてるケースが多いので、どうすべきか迷っています・・・)

    • ベストアンサー
    • MySQL
  • SHOW FIELDSについて

    1.以下テーブルを作成しました  CREATE TABLE n_tables (  i integer NOT NULL); 2.作成したテーブルの構造について  SHOW FIELDS FROM number_tables;    <結果>   Field|Type  |Null |Key|Default|Extra  =============================  | i   | int(11) | NO |    | NULL|      | 質問:  1で、NOTNULLで i列を作成したのですが、Show fields を確認したときに  なぜ、DEFAULT列は NULLになっているのでしょうか。  NULL列がYES(NULL格納可能)で、DEFAULT値がNULLなら、DEFAULT列が  NULLなら納得できるのですが。  そういう仕様なのでしょうか。  MySQL Verは、5.1.33です。

    • ベストアンサー
    • MySQL