数据库索引就象书的目录一样,如果在字段上建立了索引,那么以索引列为查询条件时可以加快查询数据的速度。查询数据库,按主键查询是最快的,每个表只能有一个主键列,但是可以有多个普通索引列,主键列要求列的所有内容必须唯一,而普通索引列不要求内容必须唯一。主键就类似我们在学校学习时的学好一样,班级里是唯一的,整个表的每一条记录的主键值在表内都是唯一的,用来唯一标识一条记录

  创建表的时候同时为表创建主键索引和普通索引:例子如下    

    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`)  提示:访问数据量很大的时候,不适合建立普通索引,会影响用户访问,尽量选择业务低估时建立索引。

mysql数据库表操作-表的主键索引和普通索引的更多相关文章

  1. 第八章| 1. MySQL数据库|库操作|表操作

    1.初识数据库 我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个 专门的处理软件,这就是mysql等数据库管理软件的 ...

  2. mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)

    通常来说对于mysql数据库插入数据获取主键的方法是采用selectKey的方式,特别是当你持久层使用mybatis框架的时候. 本文除此之外介绍其它两种获取主键的方式. 为了方便描述我们先建一张my ...

  3. MySQL数据库使某个不是主键的字段唯一

    在使用MySQL数据的过程中有时候我们须要某个不是主键的字段不反复.这个时候就要用到SQL的UNIQUE约束了. 以下摘抄自w3school里的一段介绍: UNIQUE 约束唯一标识数据库表中的每条记 ...

  4. Spring boot jpa 设定MySQL数据库的自增ID主键值

    内容简介 本文主要介绍在使用jpa向数据库添加数据时,如果表中主键为自增ID,对应实体类的设定方法. 实现步骤 只需要在自增主键上添加@GeneratedValue注解就可以实现自增,如下图: 关键代 ...

  5. mysql数据库表的自增主键号不规律,重新排列

    mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...

  6. Mysql数据库表的自增主键ID号乱了,需要重新排列。

    Mysql数据库表的自增主键ID号乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键:ALTER TABLE `table_name` DROP `id`; 2, ...

  7. MySQL数据表中有自增长主键时如何插入数据

    原文链接:https://blog.csdn.net/RuobaiMEN/article/details/79794199 MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值 ...

  8. mysql获取表列信息、主键信息

    /** * 获取物理表中已存在的列信息 * @param tbName 表名 * @return results 查询结果 */ fun getExistColumnInfo(tbName:Strin ...

  9. 向MySql数据库导入excel表数据

    最近要开发一个小的答题系统,如果题目人工录入那确实很麻烦.所以想到是不是可以从用一些现有数据格式的文件导入数据.在网上查了一下,看到有关于将excel的数据导入到mysql的方法.所以将题库数据整理成 ...

随机推荐

  1. 排序函数 sort() 和 高阶函数sorted()

    · sorted():该函数第一个参数iterable为任意可以迭代的对象,key是用于比较的关键字,reverse表示排序结果是否反转. · L.sort():该函数的三个参数和 sorted() ...

  2. sql的转义字符单引号

    在SQL中,我们都知道单引号 ' 表示字符串的开始和结束符号,如: select * from students where name = '小明'; 但如果字符串里面有单引号时,应该怎么查询呢? 这 ...

  3. Docker - 参考信息

    初见 从 0 开始了解 Docker 可能是把Docker的概念讲的最清楚的一篇文章 Docker新手指南 8 个基本的 Docker 容器管理命令 Docker 核心技术与实现原理 在线教程 Doc ...

  4. Go语言下的线程模型

    阅读Go并发编程对go语言线程模型的笔记,解释的非常到,好记性不如烂笔头,忘记的时候回来翻一番,在此做下笔记. Go语言的线程实现模型,又3个必知的核心元素,他们支撑起了这个线程实现模型的主要框架: ...

  5. Linux编程 13 (系统环境变量位置, 环境变量持久化)

    一.系统环境变量位置 在上章中,知道了如何修改系统环境变量,如PATH变量,以及创建自己的全局环境变量和局部环境变量.这篇学习怎么让环境变量的作用持久化.在此之前,先了解下系统环境变量文件会在哪些位置 ...

  6. sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后)

    一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU,  内存,锁等,不管从哪个维度去解决,都能达到调优的效 ...

  7. 数据量你造吗-JAVA分页

    原创地址:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks 学习的心态第一,解行要相应.其实<弟子规>在“余力 ...

  8. JwtBearer认证

    ASP.NET Core 认证与授权[4]:JwtBearer认证   在现代Web应用程序中,通常会使用Web, WebApp, NativeApp等多种呈现方式,而后端也由以前的Razor渲染HT ...

  9. Core2.0知识整理

    概述 Commond-Line ASP.NET结构文件 Startup 配置文件 中间件和依赖注入 依赖注入原理 框架自带的依赖注入(IServiceCollection) 依赖注入生命周期 依赖注入 ...

  10. 前端测试框架Jest系列教程 -- Mock Functions(模拟器)

    写在前面: 在写单元测试的时候有一个最重要的步骤就是Mock,我们通常会根据接口来Mock接口的实现,比如你要测试某个class中的某个方法,而这个方法又依赖了外部的一些接口的实现,从单元测试的角度来 ...