精华内容
下载资源
问答
  • MySQL——在创建数据表时创建索引

    万次阅读 2018-05-15 18:53:58
     建立数据表时创建索引 在创建数据表时创建索引的基本语法结构: CREATE TABLE table_name( 属性名 数据类型[约束条件], …… 属性名 数据类型 [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY ...

         在创建数据表时创建索引的基本语法结构:

        CREATE  TABLE  table_name(
        属性名  数据类型[约束条件],
        ……
        属性名  数据类型
        [UNIQUE  |  FULLTEXT   |   SPATIAL  ]   INDEX  |  KEY
        [  别名 ]  (  属性名1   [(  长度  )]   [  ASC  |  DESC  )
        );

        属性值的含义如下:

    a.  UNIQUE: 可选参数,表示索引为唯一索引。
    b.  FULLTEXT:  可选参数,表示索引为全文索引。
    c.  SPATIAL:  可选参数,表示索引为空间索引。
    d.  INDEX  和 KEY 参数用于指定字段为索引的,用户在选择时,只需要选择其中的一种即可。
    e.  "别名" : 为可选参数,其作用是给创建的索引取新名称。
    d.   属性名1:  指索引对应的字段名称,该字段必须被预先定义。
    f.   长度:  可选参数,其指索引的长度,必须是字符串类型才可以使用。
    g.  ASC/DESC: 可选参数,ASC 表示升序排列,DESC 表示降序排列。


    1.  普通索引创建

        创建普通索引,即不添加  UNIQUE、FULLTEXT 等任何参数。

        【例】创建表名为 score 的数据表,并在该表的 id 字段上建立索引,SQL 语句如下:

    mysql> CREATE table score(
        -> id  int(11)  AUTO_INCREMENT  primary  key  not  null,
        -> name  varchar(50)  not null,
        -> math  int(5)  not null,
        -> English  int (5)  not null,
        -> Chinese  int (5) not  null,
        -> index(id)
        -> );

    2.  创建唯一索引

        创建唯一索引时,使用  UNIQUE  参数进行约束。

        【例】创建表名为 address  的数据表,并在该表的 id 字段上建立唯一索引,SQL 语句如下:

    mysql> CREATE  table address(
        -> id  int(11)  auto_increment  primary  key  not  null,
        -> name  varchar(50),
        -> address  varchar(200),
        -> UNIQUE  INDEX  address(id  ASC)
        -> );

    3.  创建全文索引

        全文索引只能作用在  CHAR、VARCHAR、TEXT、类型的字段上。创建全文索引需要使用  FULLTEXT  参数进行约束

        【例】创建表名为 cards  的数据表,并在该表的 name 字段上建立全文索引,SQL 语句如下:

    mysql> create  table cards(
        -> id int(11)  auto_increment  primary key  not  null,
        -> name  varchar(50),
        -> number  bigint(11),
        -> info  varchar(50),
        -> FULLTEXT  KEY  cards_number(name)
        -> );

    4.  创建单列索引

        创建单列索引,即在数据表的单个字段上创建索引。创建该类型索引不需要引入约束参数,用户在建立时只需要指定单列字段名,即可创建单列索引。

        【例】创建名称为  telephone  的数据表,并指定在  tel  字段上建立名称为  tel_num  的单列索引,SQL  语句如下:

    mysql> create  table  telephone(
        -> id  int(11)  primary key auto_increment  not  null,
        -> name  varchar(50)  not  null,
        -> tel  varchar(50)  not null,
        -> index  tel_num(tel(20))
        -> );

    5.  创建多列索引

        创建多列索引即指定表的多个字段即可实现。

        【例】创建名称为  information  的数据表,并指定  name  和  sex  为  多列索引,SQL  语句如下:

    mysql> create table  information(
        -> inf_id  int(11)  auto_increment  primary  key  not  null,
        -> name  varchar(50)  not  null,
        -> sex  varchar(5)  not null,
        -> birthday  varchar(50)  not  null,
        -> index  info(name,sex)
        -> );
         需要注意的是,在多列索引中,只有查询条件中使用了这些字段中的第一个字段(即上面示例中的  name 字段),索引才会被使用。
        触发多列索引的条件是用户必须使用索引的第一字段,如果没有用到第一字段,则索引不起任何作用,用户想要优化查询速度,可以应用该类索引形式。


    6.  创建空间索引

        创建空间索引时,需要设置  SPATIAL 参数。同样,必须说明的是,只有  MyISAM 类型表支持该类型索引。而且,索引字段必须有非空约束。

        【例】创建一个名称为 list 的数据表,并创建一个名为  listinfo 的空间索引,SQL语句如下:

    mysql> create  table  list(
        -> id  int(11)  primary  key  auto_increment  not null,
        -> goods  geometry  not  null,
        -> SPATIAL  INDEX  listinfo(goods)
        -> )engine=MyISAM;
        goods  字段上已经建立名称为  listinfo 的空间索引,其中  goods  字段必须不能为空,且数据类型是  GEOMETRY,该类型是空间数据类型。空间类型不能用其他类型代替,否则在生成空间素引时会产生错误且不能正常创建该类型索引。


        空间类型除了上述示例中提到的 GEOMETRY 类型外,还包括如  POINT、LINESTRING、POLYGON  等类型,这些空间教据类型在平常的操作中很少被用到。



    【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版

    展开全文
  • 例如,user中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,我们可以给user表添加两个字段的联合唯一索引: alter table user add unique index(user_id,user_name); 这样当向...

    例如,user表中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,我们可以给user表添加两个字段的联合唯一索引:
    alter table user add unique index(user_id,user_name);


    这样当向表中添加相同记录的时候,会返回1062的添加失败信息。
    但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会告诉你已经有重复的记录了,建立索引失败,这时候,我们可以用下面的操作:

    alter ignore table user add unique index(user_id,user_name);

     

    它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化。

     

    然而在执行了 alter ignore table tableA add unique index idx_col1_u (col1) 后,还是报了以下错误:

     #1062 - Duplicate entry '111' for key 'col1'.

    不是会自动丢弃重复数据么?世界观被颠覆了。查了下资料原来是alter ignore的语法不支持innodb。

    得知alter ignore的实现完全取决于存储引擎的内部实现,而不是server端强制的,具体描述如下:

    For ALTER TABLE with the IGNORE keyword, IGNORE is now part of the
    information provided to the storage engine. It is up to the storage
    engine whether to use this when choosing between the in-place or copy
    algorithm for altering the table. For InnoDB index operations, IGNORE 
    is not used if the index is unique, so the copy algorithm is used

     详见:http://bugs.mysql.com/bug.php?id=40344

    当然解决这个问题的tricky的方法还是有的。具体如下:

    1、

    ALTER TABLE tableA ENGINE MyISAM;
    ALTER IGNORE TABLE tableA ADD UNIQUE INDEX idx_col1_u (col1)
    ALTER TABLE table ENGINE InnoDB;

    2、

    可以不用改成MyISAM,而直接使用set old_alter_table = 1; 的方法。具体做法如下:

    set session old_alter_table = 1;

    ALTER IGNORE TABLE tableA ADD UNIQUE INDEX idx_col1_u (col1) 

    展开全文
  • 遇到如题的这么一个场景:需要MySQL的一张innodb引擎的(tableA)上添加一个唯一索引(idx_col1_u)。但是中已经有大量重复数据,对于每个key(col1),有的重复2行,有的重复N行。 此时,做数据的手工清理,或者...

    遇到如题的这么一个场景:需要在MySQL的一张innodb引擎的表(tableA)上添加一个唯一索引(idx_col1_u)。但是表中已经有大量重复数据,对于每个key(col1),有的重复2行,有的重复N行。

    此时,做数据的手工清理,或者SQL处理无疑是非常耗时的。

     

    1. Alter ignore table come to help

    印象中MySQL有一个独有的 alter ignore add unique index的语法。

    语法如下:

    ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name

     

    行为类似于insert ignore,即遇到冲突的unique数据则直接抛弃而不报错。对于加唯一索引的情况来说就是建一张空表,然后加上唯一索引,将老数据用insert ignore语法插入到新表中,遇到冲突则抛弃数据。

    文档中对于alter ignore的注释:详见:http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

    IGNORE is a MySQL extension to standard SQL. It controls how ALTER TABLE works if there are duplicates on unique keys in the new table or if warnings occur when strict mode is enabled. If IGNORE is not specified, the copy is aborted and rolled back if duplicate-key errors occur. If IGNORE is specified, only the first row is used of rows with duplicates on a unique key. The other conflicting rows are deleted. Incorrect values are truncated to the closest matching acceptable value.

     

    2.    #1062 - Duplicate entry

     然而在执行了 alter ignore table tableA add unique index idx_col1_u (col1) 后,还是报了以下错误:

     #1062 - Duplicate entry '111' for key 'col1'.

    不是会自动丢弃重复数据么?世界观被颠覆了。查了下资料原来是alter ignore的语法不支持innodb。

    得知alter ignore的实现完全取决于存储引擎的内部实现,而不是server端强制的,具体描述如下:

    For ALTER TABLE with the IGNORE keyword, IGNORE is now part of the information provided to the storage engine. It is up to the storage engine whether to use this when choosing between the in-place or copy algorithm for altering the table. For InnoDB index operations, IGNORE is not used if the index is unique, so the copy algorithm is used

     详见:http://bugs.mysql.com/bug.php?id=40344

     

    3. 解决方案

    当然解决这个问题的tricky的方法还是有的,也比较直白粗暴。具体如下:

    ALTER TABLE tableA ENGINE MyISAM;
    ALTER IGNORE TABLE tableA ADD UNIQUE INDEX idx_col1_u (col1)
    ALTER TABLE table ENGINE InnoDB;

     

    updated in 2013-09-26:

    @jyzhou 分享提到,可以不用改成MyISAM,而直接使用set old_alter_table = 1; 的方法。具体做法如下:

    set old_alter_table = 1;

    ALTER IGNORE TABLE tableA ADD UNIQUE INDEX idx_col1_u (col1) 

    具体原理:http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_old_alter_table


    展开全文
  • 目录 为表格创建索引 ...创建唯一索引的字段值不能有相同的数据,否则保存不成功;主键id默认就是唯一索引 创建组合索引 选择自己需要的字段 创建全文索引 MySQL>6默认使用innodb,要把存.

    目录

     

    为表格创建索引

    以下是创建简单的普通单列索引

    以下是创建唯一索引

    创建组合索引

    创建全文索引

    创建控件索引

    删除索引


    为表格创建索引

    选择表格,右键、设计

    点击索引,输入索引名,选择要添加索引的字段,索引类型、索引数据结构

    以下是创建简单的普通单列索引

    以下是创建唯一索引

    创建唯一索引的字段值不能有相同的数据,否则保存不成功;主键id默认就是唯一索引

    创建组合索引

    选择自己需要的字段

    创建全文索引

    MySQL>6默认使用innodb,要把存储引擎改为MYISAM,才能刚创建全文索引,并且全文索引适合在大量数据、比较长的字符串上创建

    第一步:修改表格默认存储引擎为MyISAM

    ALTER table exam ENGINE = MyISAM;

    第二步:创建全文索引

    创建控件索引

    控件索引必须在MyISAM类型表中创建,且字段必须是非空

    第一步:修改引擎为MyISAM

    第二步:字段类型为GEOMETRY

    第三步:创建索引(这里我通过sql跑的)

    alter table exam ADD SPATIAL INDEX spatidx(dd);

    通过navacat查看索引类型是normal

    删除索引

    选中需要删除的索引,点击删除

     

     

    展开全文
  • MySQL创建数据库和创建数据表

    万次阅读 多人点赞 2019-10-20 23:44:40
    MySQL 创建数据库和创建数据表 MySQL 是最常用的数据库,数据库操作中,基本都是增删改查操作,简称CRUD。 这之前,需要先安装好 MySQL ,然后创建好数据库、数据、操作用户。 一、数据库操作语言 数据库...
  • 1.2、根据sequelize的官方文档,如果创建唯一索引的话, docs.sequelizejs.com/class/lib/q… 根据上图只需在在queryIterface.addIndex()的第三个参数加上{unique:true}即可。如下图 2、sequelize...
  • 创建时不是联合索引,而是唯一索引(player_id),更改为联合索引 CREATE TABLE `willow_player` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `player_id` bigint(16) NOT NULL DEFAULT '0' unique, `award_type...
  • mysql中unique创建唯一索引

    万次阅读 2018-06-24 21:30:19
    很多情况下我们都会要求某些字段不可重复,如用户名、手机号等,我们可以MySQL数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一...本人也目前也是小白一个,网上查得有人建表这样添加唯一索引...
  • MySQL百万级数据添加索引

    千次阅读 2019-01-07 19:52:14
    背景 公司某产品基础数据表,各模块依赖这张表,该表数据量四百万,导致某功能打开页面半... 创建与原结构保持一致,上执行alter语句添加索引; 将表数据导入创建的新; 修改新建的表名为原表名。 ...
  • MySQL之添加联合唯一索引

    万次阅读 多人点赞 2018-03-26 15:38:50
    一、联合唯一索引 项目中需要用到联合唯一索引: 例如:有以下需求:每个人每一天... bb字段的值也可以重复,但是一条记录(aa,bb)组合值不允许重复),需要给 t_aa 表添加多个字段的联合唯一索引: alter table t_...
  • DB2中,添加unique关键词可以创建表索引列的唯一索引。 ( CREATE UNIQUE INDEX indname ON tabname(colname) ) 那么唯一索引与一般索引有何区别呢?我们来从下面两个方面来看。 一.数据加载性能 为什么说...
  • 创建索引原则及SQL添加索引

    万次阅读 2018-08-14 10:40:07
    检查自己的sql语句,为那些频繁where子句中出现的字段建立索引。  3.尝试建立复合索引来进一步提高系统性能。修改复合索引将消耗更长时间,同时,复合索引也占磁盘空间。  4.对于小型的,建立索引可能会影响...
  • MongoDB 提供了多样性的索引支持,索引信息被保存system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样。其实可以这样说说,索引是凌驾于数据存储系统之上的另一层系统,所以...
  • 千万级别数据表创建索引

    万次阅读 2017-09-25 12:52:10
    业务背景最近一个开发维护的公众号管理系统用户(user_info)数据已经达到15,000k了,而此时有一个业务场景需要将公众号的用户信息重新同步一次,且后台原有过针对单个公众号的用户同步,但是已经非常难以使用,...
  • 使用 SQL Server 创建唯一索引

    千次阅读 2020-07-01 15:43:01
    “对象资源管理器”中,展开包含您要创建唯一索引的数据库。 展开“”文件夹。 右键单击你要创建唯一索引,然后选择“设计” 。 设计器” 菜单上,选择“索引/键” 。 ...
  • oracle创建唯一索引

    万次阅读 2019-02-13 09:01:24
    1、作为一个好习惯,不要把索引和表格的数据放在同一个空间。一般索引单独建一个空间。 2、建立索引切记加online这个参数,尤其是操作。这个参数加上以后,除了create过程中index 保持online状态,Or...
  • mysql 给表添加一个联合唯一索引

    千次阅读 2016-09-01 00:46:58
    项目中需要用到联合唯一索引...例如:user中有userID,userName两个字段,如果不希望有2条一模一样的记录,需要给user表添加多个字段的联合唯一索引: alter table user add nuique index(user_id,user_name); 例如:
  • 创建Primary key主键和Unique唯一索引

    千次阅读 2016-10-28 11:54:59
    MySQL中,我们进行数据存储,为了避免插入重复数据,常常通过给数据表添加主键或者索引的方法来解决,插入过程中,如果遇到重复数据就会提示“uplicate entry 'D550-49' for key 'cv_series'”的错误,防止...
  • 1,索引的概念 是数据库对象,实现数据库的快速查询 使用索引的原因:实现数据库的快速查询,提高查询速度 2,索引的分类 1,普通索引 ... 最基本的索引,对字段数据的类型和值没有任何限制,... 唯一索引...
  • 今天正在吃饭,一个朋友提出了一个他面试中遇到的问题,MySQL允许在唯一索引字段中添加多个NULL值。 这个问题对于我一个非专业DBA来说,也没特地去验证过,所以正好借此机会验证一下,做个记录: 测试环境: ...
  • MYSQL为表添加索引

    千次阅读 2019-06-20 09:27:18
    特别是当数据量特别大的时候,查询设计多个表时,使用索引往往能够使查询速冻加快成千上万倍。 例如:有三个为索引t1、t2、t3,分别只包含列c1、c2、c3,每个分别含有1000行数据组成,指为1~1000的数值,查...
  • MySql 给表添加一个联合唯一索引

    万次阅读 2013-11-21 18:24:11
    例如,user中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,需要给user表添加两个字段的联合唯一索引: alter table user add unique index(user_id,user_name); 这样当...
  • MySQL创建表的时候创建索引

    万次阅读 2017-06-17 20:20:00
    要想使用索引提高数据表的访问速度,首先,需要创建一个索引创建索引的方式,有三种。创建表的时候,创建索引这种方式最简单、方便,语法格式 CREATE TABLE 表名(字段名 数据类型[完整性约束条件], 字段名 ...
  • mysql 添加索引 mysql 如何创建索引

    万次阅读 2020-05-14 16:33:01
    1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD ...2.添加UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE (`column`) 3.添加INDEX(普通索引) mysql>ALTER TABLE ...
  • oracle 创建唯一索引

    万次阅读 2015-12-21 17:07:42
    我们可以在创建表时或者创建好后通过修改的方式来创建oracle中的unique约束。 下面是一些创建unique约束的例子: create table unique_test (id number, fname varchar2(20), lname varchar2(20), a
  • mongodb创建唯一索引

    千次阅读 2020-03-27 16:43:14
    粗略的记录一下: 以下是给scheduleTaskName和isActive两个字段加唯一索引 db.scheduleTask.createIndex({scheduleTaskName: 1, isActive: 1},{unique: true}); db.scheduleTask.getIndexes() # 查询结果 [ { "v" : ...
  • 唯一索引和非唯一索引

    千次阅读 2016-11-13 00:09:47
     从Oracle索引的特征上,我们可以简单的把索引分为Unique...通常,我们建表创建唯一约束或者主键约束,再或者建表以后给表添加唯一、主键约束,Oracle会自动主键、唯一约束的字段上创建唯一索引,并且索
  • MongoDB 唯一索引

    万次阅读 2016-12-22 17:02:58
    MongoDB支持的索引种类很多,诸如单键索引,复合索引,多键索引,TTL索引,文本索引,空间地理索引等。...缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引。本文主要描述唯一索引的用法。
  • mysql一个可以创建多个唯一索引

    千次阅读 2018-09-06 11:44:00
    如果能确定某个数据列将只包含彼此各不相同的值,为这个数据创建索引的时候就应该用关键字UNIQUE把它定义为一个 唯一索引 。 转载于:https://my.oschina.net/zjllovecode/blog/1973479

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 201,943
精华内容 80,777
关键字:

在创建数据表时添加唯一索引