プライマリーキー(primary key)の設定されたカラム内のインデックスデータ番号の重複を禁止する機能を勉強しました。 free52
Saturday,July,6,2013
前回(auto_increment)は勝手にインデックスが付きました
mysql> create table sadachika_books.sadachi_autotest(sada_id int auto_increment, sada_name varchar(10), *カラム名sada_id INT型 auto_increment(関数みたいなもんでしょX+1), カラム名sada_name VARCHAR型
-> index(sada_id));
少し前ですが、ENUM型のカラムを持つテーブル、これもインデックスが付いていました。
mysql> create table test4(col ENUM('one','two','three','four','five','red','blue','yellow','sadachika','ten','eleven','twelve','定近','twenty nine'));
今回勉強したのは、プライマリーキー(primary key)の設定されたカラム内のインデックスデータ番号の重複を禁止する機能です。
ユニークインデックスも同時に設定されと説明にあります?
よくかわからないですが、これのことかな?
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_gakunen = 1;
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_kumi = 'c';
一番下に補足しました。
○プライマリーキーの設定を施したデーブルを作成する。
お手本CREATE TABLE db_name.tbl_name
(col_name1 data_type1 NOT NULL PRIMARY KEY, col_name2 data_type2, ...);
mysql> create table pritest(id int not null primary key, name varchar(10));
mysql> create table sadachika_books.sadachi_pritest(sada_id int not null primary key, sada_name varchar(10));
↑データベース名 ↑テーブル名
*↑カラム名sada_in INT型(おそらく数字のみ入力可能) not null(データ無し入力をさせない)を設定し primary keyの設定を施しデータの重複入力を避ける
*↑カラム名sada_name VARCHAR型(おそらく文字入力の型なんでしょうね)
○テーブルの構造を見る
mysql> show columns from sadachika_books.sadachi_pritest; *columns(新聞など印刷物の)縦の段; 欄.
Field Type Null Key Default Extra
sada_id int(11) NO PRI NULL *Key項目がPRI *忘れるのでメモ前回はExtra項目がauto_increment(インデックスの自動挿入)設定にてKey項目がMULだった カラム名sada_num INT型(おそらく数字のみ入力可能)
sada_name varchar(10) YES NULL *カラム名sada_name VARCHAR型
○○この項目初めてさわるかも。
インデックスを確認。
mysql> show index from sadachika_books.sadachi_pritest\G
**************** 1.row **********************
Table: sadachika_pritest
Non_unique: 0
Key_name:PRIMARY
Seq_in_index:1
Column_name:sada_id
Collation:A
Cardinality:0
Sub_part:NULL
Packed:NULL
NULL:
Index_Type:BTREE
Comment:
Index_comment:
○データ入力
お手本mysql> insert into autotest(name) values('扇風機');
お手本mysql> insert into autotest(id, name) values(1, '扇風機');
mysql> insert into sadachika_books.sadachi_pritest(sada_id) values('abc'); *ERROR INT型の文字入力をテストします。
mysql> insert into sadachika_books.sadachi_pritest(sada_name) values('abc'); *ERROR
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(1, 2013);
Query OK, 1 row affected (0.02 sec)
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values('abc', 1); *ERROR
mysql> insert into sadachika_books.sadachi_pritest() values();
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(2, 広島); *ERROR *シングルクォーテイション無しERROR
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(2, '広島'); *シングルクォーテイションでくくる
Query OK, 1 row affected (0.02 sec)
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(3, '広島'); *シングルクォーテイションでくくる
Query OK, 1 row affected (0.02 sec)
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(3, '広島'); *ERROR
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(3, '大阪'); *ERRORそりゃそうだよな、同じ3番にデータを入力できるわけ無いよな これがプライマリキーなの?
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(NULL, '大阪'); *ERROR NULLも格納できない
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(4, '大阪');
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(5, 0705);
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(3, 2013年7月5日); *ERROR
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(11, '2013年7月5日');
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(6, '2013年7月5日');
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(7, '広島');
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(8, '福山');
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(21, '定近'); *21番から先に入力してみる
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(22, '充始');
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(23, 'NULL'); *シングルで囲めば文字か?入力が許可された
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(24, NULL); *sada_nameカラムにはNULLの入力が許可されている
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(9, 'さだちか'); *23番目から小さい数字に戻りました
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(10, 'さだちか');
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(25, ''); *入力が許可された
mysql> insert into sadachika_books.sadachi_pritest(sada_id, sada_name) values(26, 'サダチカ');
○テーブルの中身の表示
mysql> select * from sadachika_books.sadachi_pritest;
sada_id sada_name
1 2013
2 広島
3 広島
4 大阪
5 705
6 2013年7月5日
7 広島
8 福山
9 さだちか
10 さだひか
11 2013年7月5日
21 定近
22 定近
23 NULL *シングルで'NULL'を囲めば文字か?入力が許可された
24 NULL *sada_nameカラムにはNULLの入力が許可されている
25 *空白values(25, '')がシングル囲めば入力可能に
26 サダチカ
○2項目のプライマリーキーを設定したテーブルを作る。
お手本CREATE TABLE db_name.tbl_name
(col_name1 data_type1 NOT NULL, col_name2 data_type2, ...,
PRIMARY KEY(index_col_name1, index_col_name2, ...));
mysql> create table pritest2(
-> gakunen int not null, kumi varchar(10) not null, name varchar(20),
-> primary key(gakunen, kumi));
mysql> create table sadachika_books.sadachi_pritest2(
-> sada_gakunen int not null, sada_kumi varchar(10) not null, sada_name varchar(20),
-> primary key(sada_gakunen, sada_kumi));
○テーブルの構造を見る
mysql> show columns from sadachika_books.sadachi_pritest2; *columns(新聞など印刷物の)縦の段; 欄.
Field Type Null Key Default Extra
sada_gakunen int(11) NO PRI NULL *Key項目がPRI カラム名sada_gakunen INT型(おそらく数字のみ入力可能)
sada_kumi varchar(10) NO PRI NULL *Key項目がPRI カラム名sada_kumi VARCHAR型 文字によるインデックスを作成するんだな、INT型が数字だけしか使用できないから
sada_name varchar(10) YES NULL
○データ入力
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values('a', 'a', 'a'); *ERROR カラム名sada_gakunen INT型に文字データが入力できるかテストした
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(1, 'a', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(1, 'A', '定近');*ERROR
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(1, 'b', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(1, 'B', '定近');*ERROR
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(1, 'C', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(1, 'c', '定近');*ERROR
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(2, 'a', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(2, 'b', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(2, 'c', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(3, 'a', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(3, 'b', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(3, 'c', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(4, 'a', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(4, 'b', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(4, 'c', '定近');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(2, 'b', '坂本'); *ERROR
insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(2, 'd', '坂本');
insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(3, 'A', '坂本'); *ERROR
insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(18, 'A', '坂本');
insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(18, 'a', '坂本'); *ERROR
○テーブルの中身の表示
mysql> select * from sadachika_books.sadachi_pritest2;
sada_gakunen sada_kumi sada_name
1 a 定近
1 b 定近
1 C 定近 *カラム名sada_kumi VARCHAR型 大文字小文字の区別がない。大文字Cで登録済みだから小文字cは使用できなかった。
2 a 定近
2 b 定近
2 c 定近
2 d 坂本 *a〜cまで登録済などでa〜cでの入力が出来ない。しかたなくdで入力した
3 a 定近
3 b 定近
3 c 定近
4 a 定近
4 b 定近
4 c 定近
18 A 坂本
○対象のカラムの値を削除する
delete from sadachika_books.sadachi_pritest2 where (sada_gakunen, sada_kumi, sada_name) = (18, 'A', '坂本');
delete from sadachika_books.sadachi_pritest2 where (sada_gakunen, sada_kumi, sada_name) = (3, 'a', '定近');
delete from sadachika_books.sadachi_pritest2 where (sada_gakunen, sada_kumi, sada_name) = (3, 'b', '定近');
delete from sadachika_books.sadachi_pritest2 where (sada_gakunen, sada_kumi, sada_name) = (3, 'c', '定近');
○テーブルの中身の表示
mysql> select * from sadachika_books.sadachi_pritest2;
sada_gakunen sada_kumi sada_name
1 a 定近
1 b 定近
1 C 定近 *カラム名sada_kumi VARCHAR型 大文字小文字の区別がない。大文字Cで登録済みだから小文字cは使用できなかった。
2 a 定近
2 b 定近
2 c 定近
2 d 坂本 *a〜cまで登録済などでa〜cでの入力が出来ない。しかたなくdで入力した
*削除された
4 a 定近
4 b 定近
4 c 定近
*削除された
○データ入力
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(3, 'A', 'ひらやま');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(3, 'B', 'ひらやま');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(3, 'C', 'ひらやま');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(18, 'a', '坂本');
mysql> insert into sadachika_books.sadachi_pritest2(sada_gakunen, sada_kumi, sada_name) values(3, 'a', '定近'); *ERROR
○テーブルの中身の表示
mysql> select * from sadachika_books.sadachi_pritest2;
sada_gakunen sada_kumi sada_name
1 a 定近
1 b 定近
1 C 定近 *カラム名sada_kumi VARCHAR型 大文字小文字の区別がない。大文字Cで登録済みだから小文字cは使用できなかった。
2 a 定近
2 b 定近
2 c 定近
2 d 坂本 *a〜cまで登録済などでa〜cでの入力が出来ない。しかたなくdで入力した
3 A ひらやま *増えた
3 B ひらやま *増えた
3 C ひらやま *増えた
4 a 定近
4 b 定近
4 c 定近
18 a 坂本 *増えた
○○この項目初めてさわるかも。
インデックスを確認。
mysql> show index from sadachika_books.sadachi_pritest2\G
**************** 1.row **********************
Table: sadachika_pritest2
Non_unique: 0
Key_name:PRIMARY
Seq_in_index:1
Column_name:sada_gakunen *カラム名
Collation:A
Cardinality:14 *たぶん14項目の入力だな
Sub_part:NULL
Packed:NULL
NULL:
Index_Type:BTREE
Comment:
Index_comment:
**************** 2.row **********************
Table: sadachika_pritest2
Non_unique: 0
Key_name:PRIMARY
Seq_in_index:2
Column_name:sada_kumi *カラム名
Collation:A
Cardinality:14 *たぶん14項目の入力だな
Sub_part:NULL
Packed:NULL
NULL:
Index_Type:BTREE
Comment:
Index_comment:
ユニークインデックスってこのことでしょうか?
○テーブルの中身を検索?
mysql> SELECT * FROM test4 WHERE col = 'one';
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_gakunen = 1;
sada_gakunen sada_kumi sada_name
1 a 定近
1 b 定近
1 c 定近
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_gakunen = 2;
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_gakunen = 3;
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_gakunen = 4;
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_kumi = 'a';
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_kumi = 'b';
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_kumi = 'c';
sada_gakunen sada_kumi sada_name
1 C 定近
2 c 定近
2 C ひらやま
4 c 定近
mysql> SELECT * FROM sadachika_books.sadachi_pritest2 WHERE sada_kumi = 'd';
○テーブルの中身の検索?
mysql> select concat('(',col,')')from test4 where col=14;
mysql> select concat('(',sada_gakunen,')')from sadachika_books.sadachi_pritest2 where sada_gakunen = 1;
mysql> select concat('(',sada_kumi,')')from sadachika_books.sadachi_pritest2 where sada_kumi = 'c';
concat('(',sada_kumi,')
(C)
(c)
(C)
(c)
mysql> select concat('(',sada_name,')')from sadachika_books.sadachi_pritest2 where sada_name = 'ひらやま';
* 参考にしたサイトは→ こちら です。
これは赤色の文字例です。
これは青色の文字例です。