mysql資料庫表操作-表的主鍵索引和普通索引

来源:http://www.cnblogs.com/renyongbin/archive/2017/12/22/8084684.html
-Advertisement-
Play Games

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


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

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

    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`)  提示:訪問數據量很大的時候,不適合建立普通索引,會影響用戶訪問,儘量選擇業務低估時建立索引


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習目標: -使用子查詢操縱數據 -展示多表插入特性 -使用多表插入 -無條件INSERT -旋轉INSERT -有條件 ALL INSERT -有條件 FIRST INSERT -合併表行 -跟蹤數據生命周期內的改變 使用子查詢操縱數據 -從另外一個表複製數據 -從內聯視圖取回數據 -基於另外一個 ...
  • 有一個表名為tb,欄位段名為name,數據類型nchar(20)。1、假設欄位數據為空,則不管改為什麼欄位類型,可以直接執行:alter table tb modify (name nvarchar2(20));2、假設欄位有數據,則改為nvarchar2(20)可以直接執行:alter table ...
  • Select高級應用,Information_schema說明 ...
  • 最近在獲取數據時,發現程式讀取的欄位中含有\r\n字元,檢查資料庫表中的數據,發現是varchar字元串中包含了換行符。導入數據導致了這一情況出現。 回車換行 不同系統的行結尾符號並不同,如下: linux/unix下的行結尾符號是\n windows中的行結尾符號是\r\n Mac系統下的行結尾符 ...
  • oralce寫法: select WM_CONCAT(A.title) as citys from tmpcity A sql server寫法: select stuff((select ','+A.title from tmpCity A FOR xml PATH('')), 1, 1, '') ...
  • ...
  • 今天遇到這樣一個語句: select * from interface a inner join hosts b on a.hostid=b.hostid inner join items c on c.hostid=a.hostid where a.hostid=10084 and c.key_ ...
  • 一、創建用戶:以root用戶登錄到資料庫進行用戶創建 命令: 例如: note: username——將要創建的用戶名; host——指定該用戶在哪個主機上可以登錄,"localhost"指該用戶只能在本地登錄,不能在另外一臺機器上遠程登錄,如果想遠程登錄,將"localhost"改為"%",表示在 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...