next up previous contents
Next: 實機操作練習題 Up: KEY 及 INDEX Previous: Index 索引   Contents

Sequence 序列

  1. 序列是一組順序整數如 1,2,3,... 的集合,常使用於資料庫中。MySQL 中新增資料表 animals,包含 id,name,foot 三個欄位,其中 id 定義為 auto_increment 的主鍵,讓該列數字編號不重複,且每筆紀錄新增時自動加 1。
    [root@kvm8 ~]# mysql -s -uroot -p123qwe
    mysql> use dyw;
    mysql> create table animals(
        -> id int unsigned not null auto_increment,
        -> primary key(id),
        -> name varchar(20) not null,
        -> foot tinyint unsigned not null
        -> );
    mysql>
    
  2. 於資料表 animals 新增三筆資料,其中 id 故意設定為空值。
    mysql> insert into animals(id,name,foot)
        -> values
        -> (NULL,'dog',4),
        -> (NULL,'cat',4),
        -> (NULL,'bird',2);
    mysql>
    
  3. 查詢資料表 animals,欄位 id 並沒有因用戶設定為空值而真的為空值,而是從 1 開始編號,每筆自動增加 1。
    mysql> select * from animals;
    id	name	foot
    1	dog	4
    2	cat	4
    3	bird	2
    mysql>
    
  4. 刪除 id=3 的紀錄。
    mysql> delete from animals where id=3;
    mysql>
    
  5. 再新增一筆 chicken 紀錄。
    mysql> insert into animals(name,foot) values ('chicken',2);
    mysql>
    
  6. 查詢資料表 animals 中 chicken 紀錄的 id=4,並不是 3。
    mysql> select * from animals;
    id	name	foot
    1	dog	4
    2	cat	4
    4	chicken	2
    mysql>
    
  7. 因為刪除了 id=3 的紀錄,新增的紀錄 id=4,造成 id 不連續,如果要重新編號,必須先刪除 id 欄位,再重新產生,其編號就會重新編號。不過要特別注意的是,若此資料表與其他資料表關聯,可能會造成資料對應錯誤,要特別小心。刪除欄位 id
    mysql> alter table animals drop id;
    mysql>
    
  8. 再增加 id 欄位於資料表 animals 最前頭 (first 就是指定在第一列) 。
    mysql> alter table animals
        -> add id int unsigned not null auto_increment first,
        -> add primary key (id);
    mysql>
    
  9. 查詢資料表 animalsid 編號已從 1 重新編號。
    mysql> select * from animals;
    id	name	foot
    1	dog	4
    2	cat	4
    3	chicken	2
    mysql>
    
  10. 設定往後新增的紀錄,id 編號從 15 編起。
    mysql> ALTER TABLE animals AUTO_INCREMENT = 15;
    Query OK, 3 rows affected (3.31 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
  11. 新增一筆紀錄。
    mysql> insert into animals(name,foot) values ('bird',2);
    Query OK, 1 row affected (0.47 sec)
    
  12. 查詢資料表 animals,新增的紀錄 id 編號已從 15 開始。
    mysql> select * from animals;
    +----+---------+------+
    | id | name    | foot |
    +----+---------+------+
    |  1 | dog     |    4 |
    |  2 | cat     |    4 |
    |  3 | chicken |    2 |
    | 15 | bird    |    2 |
    +----+---------+------+
    4 rows in set (0.00 sec)
    



2018-06-19