mysqlテーブル構造の変更、制約(二)
5898 ワード
知識のポイント:表構造操作 非空拘束 一意制約 プライマリ・キー制約 自己成長 デフォルト制約 表構造操作(alter table)
こうそくじょうけん
制約のタイプ:
デフォルト
空でない
ユニーク
自己成長
プライマリキー
外部キー
キーワード:
default
not null
unique key
auto_increment
primary key
foreign
デフォルトコンストレイント(default)
初期値を設定し、レコードを挿入するときに、フィールドに明示的に値を割り当てていない場合は、自動的にデフォルト値が付与されます.
defaultの削除
第2の方法
defaultを追加
空でない制約
NULLフィールドの値は空であってもよい.NOT NULLフィールドの値は空にできません.
注意:mysqlでは、空の文字'はnullに等しくありません.
空でない制約を追加(NULL値なしでこのフィールドが必要)
空以外の拘束を解除
ユニークコンストレイント(unique key)
フィールド内の値の一意のunique keyを確認します.
プライマリ・キー制約(primary key)プライマリ・キーの役割:1つのデータを一意に識別でき、各テーブルに1つのプライマリ・キー しかありません.プライマリ・キーのプロパティ:空でない一意で、テーブルにプライマリ・キーがない場合、最初に現れる空でない一意のフィールドはプライマリ・キー である.
プライマリ・キーはレコードの一意性を保証し、各データを一意に識別し、プライマリ・キーは自動的にNOT NULLであり、各データ・テーブルには1つのプライマリ・キーしか存在しない.NOT NULL+UNIQUE KEY--一意で空ではない.UNIQUE KEYがまたNOT NULLの場合、PRIMARY KEYプライマリ・キーとして扱われます.テーブルにプライマリ・キーが1つもない場合、最初に現れた非空で唯一の列はプライマリ・キーとみなされます.
自己成長auto_increment
create table tb1(
id int,
name char(4)
);
#
alter table `tb1` rename `tb2` # tb1 tb2
# ( )change
alter table `tb1` change `age` `sex` char(4); # age sex;
# modify ( )
alter table tb1 modify `age` varchar(20); # age varchar(20)
#
alter table tb1 modify age char(4) # age char ;
# ,
alter table tb1 add age int first; # ;
alter table tb1 add age int after id;# id age;
#
alter table `tb1`
add `aa` int,
add `bb` int,
add `cc` int;
#
alter table tb1 drop age ; # ;
#
alter table `tb1`
drop `bb`,
drop `cc`;
#
ALTER TABLE test MODIFY name1 int first|after name2;
こうそくじょうけん
制約のタイプ:
デフォルト
空でない
ユニーク
自己成長
プライマリキー
外部キー
キーワード:
default
not null
unique key
auto_increment
primary key
foreign
デフォルトコンストレイント(default)
初期値を設定し、レコードを挿入するときに、フィールドに明示的に値を割り当てていない場合は、自動的にデフォルト値が付与されます.
# :
mysql> create table tb6(
-> id int primary key auto_increment,
-> name varchar(20) not null,
-> age int not null default 18
-> );
mysql> desc tb6;
mysql> insert into tb6(name) values(' '),(' '),(' ');
mysql> select * from tb6;
defaultの削除
mysql> alter table tb6
-> modify age int [not null]; -- , modify , ;
mysql> desc tb6;
第2の方法
mysql> alter table tb6
-> alter age drop default; ---- default, ;
defaultを追加
mysql> alter table tb6
-> modify age int default 20;
mysql> desc tb6;
#(2)
mysql> alter table tb6
-> alter age set default 21;
空でない制約
NULLフィールドの値は空であってもよい.NOT NULLフィールドの値は空にできません.
create table tb1(
id int,
name varchar(20) not null # ,insert , ,
);
insert into tb1 (id) value(1); # ,name ,
insert into tb1 (id, name) value(1, ''); # , null
注意:mysqlでは、空の文字'はnullに等しくありません.
空でない制約を追加(NULL値なしでこのフィールドが必要)
mysql> alter table tb1
-> modify id int not null;-- , ,modify ;
空以外の拘束を解除
mysql> alter table tb1
-> modify id int ;
ユニークコンストレイント(unique key)
フィールド内の値の一意のunique keyを確認します.
:
mysql> create table tb2(
-> id int not null unique key,-- , ;
-> name varchar(20) not null
-> );
mysql> insert into tb2 value(1,' ');
mysql> insert into tb2 value(1,' '); # ,
#
mysql> ALTER TABLE `tb2`
-> ADD unique key(`name`)
-> ;
#
mysql> desc tb2;
mysql> alter table tb2
-> drop key name;
#
mysql> alter table tb2
-> add aa int,
-> add bb int;
mysql> alter table tb2
-> add unique key (aa,bb);
mysql> insert into tb2 value(4,' ',1,2);
mysql> insert into tb2 value(5,' ',1,2);
ERROR 1062 (23000): Duplicate entry '1-2' for key 'aa'-- ,
# (show create table tb2;)
mysql> show create table student2; ---- ;
| student2 | CREATE TABLE `student2` (
`id` int(11) NOT NULL,
`name` varchar(20) NOT NULL,
`aa` int(11) DEFAULT NULL,
`bb` int(11) DEFAULT NULL,
UNIQUE KEY `id` (`id`),
UNIQUE KEY `aa` (`aa`,`bb`) -- aa, ;
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
mysql> alter table student2
-> drop key aa;
プライマリ・キー制約(primary key)
プライマリ・キーはレコードの一意性を保証し、各データを一意に識別し、プライマリ・キーは自動的にNOT NULLであり、各データ・テーブルには1つのプライマリ・キーしか存在しない.NOT NULL+UNIQUE KEY--一意で空ではない.UNIQUE KEYがまたNOT NULLの場合、PRIMARY KEYプライマリ・キーとして扱われます.テーブルにプライマリ・キーが1つもない場合、最初に現れた非空で唯一の列はプライマリ・キーとみなされます.
# , , , 。 。
mysql> create table tb3(
-> id int primary key,
-> name varchar(20) not null
-> );
mysql> desc tb3;
mysql> insert into tb3 value(1,' ');
Query OK, 1 row affected (0.27 sec)
mysql> insert into tb3 value(1,' ');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
#
mysql> alter table tb3
-> drop primary key; # ,
mysql> desc tb3;
#
mysql> alter table tb3
-> add primary key(id);
#
mysql> create table tb4(
-> id_a int ,
-> id_b int,
-> content varchar(20),
-> primary key(id_a,id_b)
-> );
mysql> desc tb4;
#
mysql> alter table tb4
-> drop primary key;-- , , ;
#
mysql> alter table tb4
-> add primary key(id_a,id_b);
自己成長auto_increment
:
mysql> create table tb5(
-> id int primary key auto_increment,
-> name varchar(20)
-> )auto_increment =100; # , 1
mysql> desc tb5;
mysql> insert into tb5(name) values(' '),(' ');
mysql> select * from tb5;
#auto_increment ,
insert into tb5(id,name) values(110,' ');
mysql> select * from tb5;
#
insert into tb5(id,name) values(108,' ');
insert into tb5(name) values(' ');-- ;
mysql> select * from tb5;
#
mysql> alter table tb5
-> modify id int;
# auto_increment
mysql> alter table tb5
-> modify id int auto_increment;
~~~