mysql數據庫表操作-表的主鍵索引和普通索引


  數據庫索引就象書的目錄一樣,如果在字段上建立了索引,那么以索引列為查詢條件時可以加快查詢數據的速度。查詢數據庫,按主鍵查詢是最快的,每個表只能有一個主鍵列,但是可以有多個普通索引列,主鍵列要求列的所有內容必須唯一,而普通索引列不要求內容必須唯一。主鍵就類似我們在學校學習時的學好一樣,班級里是唯一的,整個表的每一條記錄的主鍵值在表內都是唯一的,用來唯一標識一條記錄

  創建表的時候同時為表創建主鍵索引和普通索引:例子如下    

    mysql> create table student( id int(4) not null auto_increment, name char(20) not null, age tinyint(2) not null default'0', dept varchar(16) default null, primary key(id), key     index_name(name) );
    Query OK, 0 rows affected (0.00 sec)

    注意

      primary key(id)  <-主鍵

      KEY index_name(name) <-name字段普通索引

      只有int類型且為primary key才可以使用auto_increment

 

   查看student表的表結構:

    

    mysql> show create table student\G;
    *************************** 1. row ***************************
    Table: student
    Create Table: CREATE TABLE `student` (
    `id` int(4) NOT NULL AUTO_INCREMENT,
    `name` char(20) NOT NULL,
    `age` tinyint(2) NOT NULL DEFAULT '0',
    `dept` varchar(16) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `index_name` (`name`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)

    ERROR:
    No query specified

  刪除表的主鍵:

    alter table student1 drop primary key;

    注意:如果一個表中的primary key設置了AUTO_INCREMENT(自動增加)的話,就刪不掉

  修改student2表的id列為自增主鍵列:例子  

    修改前:  

    mysql> desc student2;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id | int(4) | NO | | NULL | |
    | name | char(20) | NO | MUL | NULL | |
    | age | tinyint(2) | NO | | 0 | |
    | dept | varchar(16) | YES | | NULL | |
    +-------+-------------+------+-----+---------+-------+
    4 rows in set (0.00 sec)

    修改后:    

      mysql> alter table student2 change id id int primary key auto_increment;
      Query OK, 0 rows affected (0.08 sec)
      Records: 0 Duplicates: 0 Warnings: 0

      mysql> desc student2;
      +-------+-------------+------+-----+---------+----------------+
      | Field | Type | Null | Key | Default | Extra |
      +-------+-------------+------+-----+---------+----------------+
      | id | int(11) | NO | PRI | NULL | auto_increment |
      | name | char(20) | NO | MUL | NULL | |
      | age | tinyint(2) | NO | | 0 | |
      | dept | varchar(16) | YES | | NULL | |
      +-------+-------------+------+-----+---------+----------------+
      4 rows in set (0.00 sec)

  為student2表的刪除name列普通索引:例子

    刪除前:      

      mysql> desc student2;
      +-------+-------------+------+-----+---------+----------------+
      | Field | Type | Null | Key | Default | Extra |
      +-------+-------------+------+-----+---------+----------------+
      | id | int(11) | NO | PRI | NULL | auto_increment |
      | name | char(20) | NO | MUL | NULL | |
      | age | tinyint(2) | NO | | 0 | |
      | dept | varchar(16) | YES | | NULL | |
      +-------+-------------+------+-----+---------+----------------+
      4 rows in set (0.00 sec)

    刪除后:

      mysql> alter table student2 drop index index_name;
      Query OK, 0 rows affected (2.08 sec)
      Records: 0 Duplicates: 0 Warnings: 0

      mysql> desc student2;
      +-------+-------------+------+-----+---------+----------------+
      | Field | Type | Null | Key | Default | Extra |
      +-------+-------------+------+-----+---------+----------------+
      | id | int(11) | NO | PRI | NULL | auto_increment |
      | name | char(20) | NO | | NULL | |
      | age | tinyint(2) | NO | | 0 | |
      | dept | varchar(16) | YES | | NULL | |
      +-------+-------------+------+-----+---------+----------------+
      4 rows in set (0.00 sec)

    為student2表的name列增加普通索引,索引的名字叫作index_name:例子      

      mysql> alter table student2 add index index_name(name);
      Query OK, 0 rows affected (0.01 sec)
      Records: 0 Duplicates: 0 Warnings: 0

      mysql> show create table student2\G;
      *************************** 1. row ***************************
      Table: student2
      Create Table: CREATE TABLE `student2` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` char(20) NOT NULL,
      `age` tinyint(2) NOT NULL DEFAULT '0',
      `dept` varchar(16) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `index_name` (`name`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8
      1 row in set (0.00 sec)

      ERROR:
      No query specified   

    注意: KEY `index_name` (`name`)  提示:訪問數據量很大的時候,不適合建立普通索引,會影響用戶訪問,盡量選擇業務低估時建立索引


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM