mysqlテーブル構造の変更、制約(二)

5898 ワード

知識のポイント:
  • 表構造操作
  • 非空拘束
  • 一意制約
  • プライマリ・キー制約
  • 自己成長
  • デフォルト制約
  • 表構造操作(alter table)
    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)
  • プライマリ・キーの役割:1つのデータを一意に識別でき、各テーブルに1つのプライマリ・キー
  • しかありません.
  • プライマリ・キーのプロパティ:空でない一意で、テーブルにプライマリ・キーがない場合、最初に現れる空でない一意のフィールドはプライマリ・キー
  • である.
    プライマリ・キーはレコードの一意性を保証し、各データを一意に識別し、プライマリ・キーは自動的に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;
    ~~~