zoukankan      html  css  js  c++  java
  • 约束和索引

    约束信息保存在information_schema.table_constraints表中

    select * from information_schema.table_constraints where table_schema = "pmx";
    Empty set (0.00 sec)

    索引信息保存在information_schema.statistics表中

    select * from information_schema.statistics where table_schema = 'pmx';
    Empty set (0.00 sec)

     mysql的约束分为主键约束,外键约束和唯一性约束。

    创建具有主键的表t1

    Table: t1
    Create Table: CREATE TABLE `t1` (
      `id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    在创建约束时,mysql会自动创建该字段的索引

    select * from information_schema.table_constraints where table_schema = "pmx";
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | def                | pmx               | PRIMARY         | pmx          | t1         | PRIMARY KEY     |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    select * from information_schema.statistics where table_schema = 'pmx'G;
    *************************** 1. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: PRIMARY
     SEQ_IN_INDEX: 1
      COLUMN_NAME: id
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: 
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 

    为t1添加唯一性约束

    alter table t1 add column a int;
    alter table t1 add constraint a_unique unique key(a);

    给唯一约束指定自定义名称时,需要分两行写

    alter table t1 add column a int unique key;

    不需要指定约束名称可以写成一行

    查看约束和索引

    select * from information_schema.table_constraints where table_schema = "pmx";
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | def                | pmx               | PRIMARY         | pmx          | t1         | PRIMARY KEY     |
    | def                | pmx               | a               | pmx          | t1         | UNIQUE          |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    select * from information_schema.statistics where table_schema = 'pmx'G;
    *************************** 1. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: PRIMARY
     SEQ_IN_INDEX: 1
      COLUMN_NAME: id
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: 
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 2. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: a
     SEQ_IN_INDEX: 1
      COLUMN_NAME: a
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 

    为t1添加外键约束

    alter table t1 add column b int;
    alter table t1 add constraint c_fk foreign key (b) references t2(id);

    表结构更新为:

    Table: t1
    Create Table: CREATE TABLE `t1` (
      `id` int(11) NOT NULL,
      `a` int(11) DEFAULT NULL,
      `b` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `a_unique` (`a`),
      KEY `c_fk` (`b`),
      CONSTRAINT `c_fk` FOREIGN KEY (`b`) REFERENCES `t2` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    t1的约束列表

    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | def                | pmx               | PRIMARY         | pmx          | t1         | PRIMARY KEY     |
    | def                | pmx               | a_unique        | pmx          | t1         | UNIQUE          |
    | def                | pmx               | c_fk            | pmx          | t1         | FOREIGN KEY     |
    | def                | pmx               | PRIMARY         | pmx          | t2         | PRIMARY KEY     |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+

    但是为t1唯一索引会创建唯一性约束

     alter table t1 add unique index(c);
    select * from information_schema.table_constraints where table_schema = "pmx";
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | def                | pmx               | PRIMARY         | pmx          | t1         | PRIMARY KEY     |
    | def                | pmx               | a_unique        | pmx          | t1         | UNIQUE          |
    | def                | pmx               | c               | pmx          | t1         | UNIQUE          |
    | def                | pmx               | c_fk            | pmx          | t1         | FOREIGN KEY     |
    | def                | pmx               | PRIMARY         | pmx          | t2         | PRIMARY KEY     |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+

      

    select * from information_schema.statistics where table_schema = 'pmx'G;
    *************************** 1. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: PRIMARY
     SEQ_IN_INDEX: 1
      COLUMN_NAME: id
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: 
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 2. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: a_unique
     SEQ_IN_INDEX: 1
      COLUMN_NAME: a
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 3. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: c
     SEQ_IN_INDEX: 1
      COLUMN_NAME: c
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 4. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 1
     INDEX_SCHEMA: pmx
       INDEX_NAME: c_fk
     SEQ_IN_INDEX: 1
      COLUMN_NAME: b
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 5. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t2
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: PRIMARY
     SEQ_IN_INDEX: 1
      COLUMN_NAME: id
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: 
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 

    为t1添加其他的普通索引,全文索引则不会创建约束

    alter table t1 add column d int,add column e char(20)
     create index d_index on t1 (d);
    alter table t1 add fulltext index  e_index (e);

    结果

     select * from information_schema.table_constraints where table_schema = "pmx";
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    | def                | pmx               | PRIMARY         | pmx          | t1         | PRIMARY KEY     |
    | def                | pmx               | a_unique        | pmx          | t1         | UNIQUE          |
    | def                | pmx               | c               | pmx          | t1         | UNIQUE          |
    | def                | pmx               | c_fk            | pmx          | t1         | FOREIGN KEY     |
    | def                | pmx               | PRIMARY         | pmx          | t2         | PRIMARY KEY     |
    +--------------------+-------------------+-----------------+--------------+------------+-----------------+
    select * from information_schema.statistics where table_schema = 'pmx'G;
    *************************** 1. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: PRIMARY
     SEQ_IN_INDEX: 1
      COLUMN_NAME: id
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: 
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 2. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: a_unique
     SEQ_IN_INDEX: 1
      COLUMN_NAME: a
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 3. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: c
     SEQ_IN_INDEX: 1
      COLUMN_NAME: c
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 4. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 1
     INDEX_SCHEMA: pmx
       INDEX_NAME: c_fk
     SEQ_IN_INDEX: 1
      COLUMN_NAME: b
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 5. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 1
     INDEX_SCHEMA: pmx
       INDEX_NAME: d_index
     SEQ_IN_INDEX: 1
      COLUMN_NAME: d
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 6. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t1
       NON_UNIQUE: 1
     INDEX_SCHEMA: pmx
       INDEX_NAME: e_index
     SEQ_IN_INDEX: 1
      COLUMN_NAME: e
        COLLATION: NULL
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: YES
       INDEX_TYPE: FULLTEXT
          COMMENT: 
    INDEX_COMMENT: 
    *************************** 7. row ***************************
    TABLE_CATALOG: def
     TABLE_SCHEMA: pmx
       TABLE_NAME: t2
       NON_UNIQUE: 0
     INDEX_SCHEMA: pmx
       INDEX_NAME: PRIMARY
     SEQ_IN_INDEX: 1
      COLUMN_NAME: id
        COLLATION: A
      CARDINALITY: 0
         SUB_PART: NULL
           PACKED: NULL
         NULLABLE: 
       INDEX_TYPE: BTREE
          COMMENT: 
    INDEX_COMMENT:  

    可以看到索引表中有d和e字段,而在约束表中没有

  • 相关阅读:
    [转]进程与线程及其区别
    [转]工厂模式
    [转]Filter实现处理中文乱码,转义html标签,过滤敏感词
    [转]JAVA设计模式之单例模式
    [转]Servlet 中文乱码问题及解决方案剖析
    Servlet作业2-将表单提交的商品信息输出到页面中
    Servlet作业1-实现注册登录
    [转] ServletContext 与application的异同
    [转]servlet中的service, doGet, doPost方法的区别和联系
    [转]Servlet 3.0 新特性详解
  • 原文地址:https://www.cnblogs.com/bibiafa/p/9237889.html
Copyright © 2011-2022 走看看