精华内容
下载资源
问答
  • 在创建数据表时添加唯一索引
    千次阅读
    2021-12-28 16:03:40

    因为mysql 5.7已经将alter ignore talbe语法去掉了。这在MySQL 5.6.25中工作正常,但在5.7.9中给出了语法错误,所以不能这样操作了,下面是我的操作思路。

    ALTER IGNORE TABLE `table_name`
    ADD UNIQUE `some_id` (`some_id`);

    1、按照已有表的结构创建一张新表

    create table dfs_img_file_index_new like dfs_img_file_index;

    2、查看新创建的表中是否有索引,把没用索引drop掉。

    show index on dfs_img_file_index_new;

    3、在新表中添加唯一索引

    alter table dfs_img_file_index_new add unique uk_dfs_img_file (element, type, data_time);

    4、将现在录入数据的表更名

    alter table dfs_img_file_index rename dfs_img_file_index_old;

    5、将新创建的表更名

    alter table dfs_img_file_index_new rename dfs_img_file_index;

    6、最后将旧表数据导入到新表

    insert into dfs_img_file_index (file_name, element, type, path, virtual_path, data_time) select file_name, element, type, path, virtual_path, data_time from dfs_img_file_index_oldx_old group by element,type,data_time,path,file_name, virtual_path;

    更多相关内容
  • MySQL提供了多种单列或多列上创建索引的方法:一种是在创建表时制定索引列;另一种是使用ALTER TABLE 语句已存在的创建索引,或者使用CREATE_INDEX 已存在的创建索引。 1. 创建表时创建【普通】...

    MySQL提供了多种在单列或多列上创建索引的方法:一种是在创建表时指定索引列;另一种是使用ALTER TABLE 语句在已存在的表上创建索引,或者使用CREATE INDEX 在已存在的表上创建索引。

    1. 在 创建表时创建【普通】索引

    语法格式为:

    CREATE TABLE Y1 (
     COLUMN_NAME  DATA_TYPE  SCHEME,
      [UNIQUE | FULLTEXT | SPATIAL]  [INDEX | KEY ]  INDEX_NAME([LENGTH],.....)   [ASC | DESC]
    )
    

    UNIQUE | FULLTEXT | SPATIAL 这三个是可选项,UNIQUE 为唯一索引,FULLTEXT 为全文索引,SPATIAL 为空间索引,其中FULLTEXT 和SPATIAL InnoDB 存储引擎不支持,MyISAM存储引擎支持;INDEX 和 KEY 为同义词,创建索引时使用它们中任何一个都可以,INDEX_NAME 为索引名称,可选参数,如果不指定,缺省(默认值)为COLUMN_NAME ,LENGTH 为可选参数,可以指定索引的长度,需注意的是,只有字符串类型的列才能指定索引长度,ASC 或 DESC 指定升序或者降序的索引值存储。

    使用INDEX 创建 SQL:

    ```sql
    CREATE TABLE Y1 (
     ID INT (10) AUTO_INCREMENT NOT NULL,
     NAME VARCHAR (20) NOT NULL,
     SEX INT (1) NOT NULL DEFAULT 0,
     INDEX IDX (ID)
    )
    --创建普通索引
    
    CREATE TABLE T4 (
     ID INT NOT NULL,
     NAME CHAR(30) NOT NULL,
     AGE INT NOT NULL,
     INFO VARCHAR(255),
     FULLTEXT INDEX FULLTEXTIDX(INFO)
    ) ENGINE=MyISAM
    -- FullText 全文索引,需指定存储引擎为MyISAM,MySQL默认存储引擎为InnoDB
    
    CREATE TABLE T5 (
     G GEOMETRY NOT NULL,
     SPATIAL INDEX SPATINDEX (G)
    ) ENGINE = MYISAM
    -- SPATIAL 创建空间索引,需指定存储引擎为MyISAM,MySQL默认存储引擎为InnoDB
    
    -- 创建唯一索引
    CREATE TABLE Y3(
     ID INT NOT NULL,
     NAME CHAR(20),
     UNIQUE INDEX UNIQUEIDX(ID)
    )ENGINE = INNODB
    
    -- 创建组合索引
    CREATE TABLE Y4(
     ID INT NOT NULL,
     NAME CHAR(20),
     AGE INT NOT NULL,
     INDEX MULTIIDX(ID,NAME(19),AGE)
    ) ENGINE= INNODB
    

    使用KEY创建索引 SQL

    CREATE TABLE Y2 (
     ID INT NOT NULL,
     NAME VARCHAR (233) NOT NULL,
     KEY IDX (ID)
    ) ENGINE = INNODB DEFAULT CHARSET = UTF8
    --用KEY创建普通索引 
    

    **

    2. 在已存在表中添加索引

    **
    基本语法分两种,第一种语法为

    2.1:

    ALTER TABLE TABLE_NAME ADD  [UNIQUE | FULLTEXT | SPATIAL]  [INDEX | KEY ]  INDEX_NAME(COLUMN_NAME(LENGTH),.....)  [ASC | DESC]
    

    SQL:

    ALTER TABLE t1 ADD UNIQUE INDEX ALTERIDX(NAME)
    -- 使用ALTER TABLE 语句创建索引
    

    2.2:
    第二种语法为:

    CREATE [UNIQUE | FULLTEXT | SPATIAL]  [INDEX | KEY ]  INDEX_NAME ON TABLE_NAME(COLUMN_NAME(LENGTH),.....)  [ASC | DESC]
    

    SQL :

    CREATE UNIQUE INDEX CREIDX ON t4(NAME(20)) 
    -- 使用CREATE INDEX 在已存在表中创建索引
    
    展开全文
  • 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版

    展开全文
  • MySQL创建数据表索引

    千次阅读 2021-01-18 19:38:01
    三、数据字段属性:1、unsigned 可以让空间增加一倍,如果不希望字段中插入负值就使用此属性,另外只能用数值型字段。2、zerofill 只能用数值型字段,前导0(例如id int(5) zerofill,如果插入数据为11,会自动...

    除非注明,文章均为易水寒原创,版权属于易水寒博客,转载请注明出处,谢谢。

    三、数据字段属性:

    1、unsigned 可以让空间增加一倍,如果不希望在字段中插入负值就使用此属性,另外只能用在数值型字段。

    2、zerofill 只能用在数值型字段,前导0(例如id int(5) zerofill,如果插入数据为11,会自动存储为00011),该字段自动应用unsigned。

    3、AUTO_INCREMENT 只能是整数,数据每增加一条就会自动增1,字段的值不允许重复。

    4、NULL和NOT NULL 控制字段插入数据是否可以为空值。

    5、default 缺省值。在某个表里,某个字段不插入值的话,就会启用缺省值。

    CREATE TABLE users(

    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(30) NOT NULL DEFAULT '',

    height DOUBLE(10,2) NOT NULL DEFAULT 0.00,

    age INT NOT NULL DEFAULT 0,

    sex CHAR(4) NOT NULL DEFAULT '男'

    );

    四、创建索引:

    1、主键索引

    主要作用是确定数据库表里一条特定数据记录的位置。

    最好为每一张数据表定义为一个主键索引。

    一个表只能指定一个主键,主键的值不能为空。

    指定主键有2种方法:

    (1)

    CREATE TABLE users(

    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY

    );

    (2)

    CREATE TABLE users(

    id INT UNSIGNED NOT NULL AUTO_INCREMENT,

    PRIMARY KEY(id)

    );

    2、唯一索引

    unique

    它和主键索引一样,都可以防止创建重复的值,不同的是,每个表可以有多个唯一索引。

    3、常规索引

    最重要的技术,提高数据库性能,索引优化首先考虑常规索引。

    查询提高了,增删改减慢了。

    key和index是同义词,用哪个都可以。

    创建方法:

    单独创建常规索引:

    CREATE index 索引名称 on 表名(字段名,多个用逗号分隔);

    删除:

    drop index 索引名称 on 表名;

    创建表时创建常规索引:

    CREATE TABLE users(

    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

    uid INT NOT NULL,

    index 索引名称(uid)

    );

    4、全文索引

    fulltext类型索引,只能在MyISAM表类型上使用,只有在varchar,char,text等文本字符串上使用,也可以多个数据列使用。

    CREATE TABLE books(

    id int,

    bookname varchar(30),

    price double,

    detail text not null,

    fulltext(detail,bookname),

    index ind(price),

    primary key(id)

    );

    正常查询:select * from books where bookname like '%php%';

    全文索引查询:select bookname,price from books where MATCH(detail) AGAINST('php');

    以上两种查询来比,全文索引查询效率比较高。

    展开全文
  • MySQL索引篇,创建表时创建索引

    千次阅读 2021-01-27 02:34:24
    索引对于MySQL数据库查询速度具有无可取代的作用,一个合适的索引能给数据查询的效率带来巨大的提升,本文来给大家讲讲如何创建索引索引的最佳创建方式是建表的时候就确定好要索引的字段并建立好索引。...
  • 遇到如题的这么一个场景:需要MySQL的一张innodb引擎的(tableA)上添加一个唯一索引(idx_col1_u)。但是中已经有大量重复数据,对于每个key(col1),有的重复2行,有的重复N行。此时,做数据的手工清理,或者SQL...
  • 已经存在的创建索引

    千次阅读 2021-02-03 20:03:22
    已经存在的中,可以直接为上的一个或几个字段创建索引。基本形式如下:CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEX索引名ON表名(属性名[(长度)][ASC|DESC]);其中,UNIQUE是可选参数,表示索引唯一索引;...
  • MySQL数据库-索引-唯一索引

    千次阅读 2021-08-05 13:50:43
    所谓唯一索引,就是在创建索引,限制索引的字段值必须是唯一的。通过该类型的索引可以比普通索引更快的查询某条记录。 创建表时定义索引 语法: CREATE TABLE tablename( propName1 type1, propName2 type2, ...
  • mysql修改结构出现唯一索引冲突

    千次阅读 2021-01-19 08:08:29
    #########################直接主库上alter或者pt-osc操作都会报错每次报错的value 都不一样,添加ALGORITHM=COPY 即可搞定:> alter TABLE ad_glc add column `number` bigint(20) not null DEFAULT 0 COMMENT...
  • Oracle 创建唯一索引和非唯一索引

    千次阅读 2020-03-03 17:02:01
    唯一索引 生产环境已经存在且数据量不大的 CREATE index "索引名" on "表名"("字段名") tablespace "空间名" online; 举例: CREATE index IDX_WF_ORDER_CREATE_TIME on WF_ORDER(CREATE_TIME) tablespace ...
  • mysql使用唯一索引避免插入重复数据

    千次阅读 2021-02-07 16:19:55
    使用MySQL 索引防止一个中的一列或者多列产生重复值一:介绍MYSQL唯一索引如果要强烈使一列或多列具有唯一性,通常使用PRIMARY KEY约束。 但是,每个只能有一个主键。 因此,如果使多个列或多个组合列具有唯一性...
  • DBCC showcontig('Table')执行重建索引命令:DBCC DBREINDEX('T_CEmployeeRegisterHoliday')1、没有聚集索引查询2、有聚集索引查询3、没有非聚集索引查询4、有非聚集索引查询5、查询表索引语句EXEC sp_helpindex A6...
  • 怎样向有大量数据添加索引

    千次阅读 2021-05-11 19:56:21
    日常开发过程中我们可能会遇见这种场景,就是为了优化查询我们需要对某张表中的某个字段添加索引,但中存在大量数据,而且正式库的正在被当前系统所使用,我们不可能停掉服务去修改,直接使用sql语句向...
  • MySQL创建数据库和创建数据表

    万次阅读 多人点赞 2019-10-20 23:44:40
    MySQL 创建数据库和创建数据表 MySQL 是最常用的数据库,数据库操作中,基本都是增删改查操作,简称CRUD。 这之前,需要先安装好 MySQL ,然后创建好数据库、数据、操作用户。 一、数据库操作语言 数据库...
  • 数据表创建索引的目的是什么

    千次阅读 2021-01-29 18:21:30
    一、SQL创建索引的目的如下:1、通过唯一索引(unique)可确保数据唯一性;2、加快数据的检索速度;3、加快之间的连接;4、减少分组和排序时间;5、使用优化隐藏器提高系统性能。二、创建SQL索引的语法:CREATE ...
  • mysql 为表添加索引

    千次阅读 2021-01-19 02:47:45
    特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。例如,有3个未索引t1、t2、t3,分别只包含列c1、c2、c3,每个分别含有1000行数据组成,指为1~1000的数值,查找对应值相等...
  • 1.添加联合索引 alter table "表名" add unique index(`字段1`,`字段2`) 2.此时如果插入相同的数据会报错,可以使用 no duplicate key update 解决相同数据不存储,不会报错 insert into "表名" (`name`,`age`...
  • 如何利用MySQL添加联合唯一索引

    千次阅读 2022-07-05 11:51:35
    bb字段的值也可以重复,但是一条记录(aa,bb)组合值不允许重复),需要给 t_aa 表添加多个字段的联合唯一索引: alter table t_aa add unique index(aa,bb); 例如: alter table use_info add unique index agd(user_...
  • oracle创建唯一索引

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

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

    万次阅读 多人点赞 2020-08-24 23:14:20
    目录 为表格创建索引 ...创建唯一索引的字段值不能有相同的数据,否则保存不成功;主键id默认就是唯一索引 创建组合索引 选择自己需要的字段 创建全文索引 MySQL>6默认使用innodb,要把存.
  • 谈谈唯一约束和唯一索引

    千次阅读 2021-01-27 20:54:06
    索引 数据库中用的最频繁的操作是数据查询,索引就是为了加速数据行的检索而创建的一种分散的数据结构。可以把索引类比成书的目录,有目录的肯定比没有目录的书,更方便查找。唯一约束 保证一个字段或者一组...
  • 给mysql一百万条数据表添加索引

    千次阅读 2021-01-18 21:21:49
    直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁;故放弃该办法,最终解决办法如下:一.... 创建表创建一张新与要添加索引结构保持一致;CREATE TABLE 表名 LIKE...
  • 5张表联查,数据量最大的一张中包含100+万条数据; 二手项目,刚开始并没有仔细查看每个字段定义; 动手开干 阅读了SQL后,直接将已有的三张表与新的两张LEFT JOIN起来。到前端一刷新,好慢(实际上,这中...
  • mongodb创建唯一索引

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

    千次阅读 2021-11-23 17:31:46
    1、MySQL 的 主键。...(2)主键值必须唯一标识中的每一行,且不能为 NULL,即同一个中不可能存在两行数据有相同的主键值。 2、MySQL 的 唯一约束。  MySQL唯一约束(Unique Key)是指所有记录中字
  • mysql建表语句中添加索引

    千次阅读 2021-01-18 22:27:47
    【例】创建表名为 score 的数据表,并的 id 字段上建立索引,SQL 语句如下:CREATE table score(id int(11) AUTO_INCREMENT primary key not null,name varchar(50) not null,math int(5) ...
  • 前段时间我踩过一个坑:mysql8的一张innodb引擎的中,加了唯一索引,但最后发现数据竟然还是重复了。到底怎么回事呢?本文通过一次踩坑经历,聊聊唯一索引,一些有意思的知识点。
  • Oracle创建索引的基本规则

    千次阅读 2021-05-03 05:20:03
    选择索引字段的原则:在WHERE子句中最频繁使用的字段联接语句中的联接字段选择高选择性的字段(如果很少的字段拥有相同值,即有很多独特值,则选择性很好)Oracle在UNIQUE和主键字段上自动建立索引在选择性很差的字段上...
  • mysql中唯一索引的关键字是什么

    千次阅读 2021-01-19 10:16:46
    创建唯一索引可以使用关键字UNIQUE随一同创建。mysql中唯一索引的关键字是unique index。(推荐教程:mysql教程)相关介绍:创建唯一索引可以避免数据出现重复。唯一索引可以有多个,但索引列的值必须唯一,索引列的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 236,323
精华内容 94,529
热门标签
关键字:

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