加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.cn/)- 专有云、图像技术、经验、数据治理、专属主机!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

关于MySQL主键的约束

发布时间:2022-08-09 12:37:49 所属栏目:MySql教程 来源:互联网
导读:首先来复现下问题,我们连接到数据库test,然后创建表test_data2. mysql use test mysql create table test_data2 (id int ,name varchar(30)); Query OK, 0 rows affected (0.05 sec) 接着创建一个主键,命名为idx_pk_id,从执行情况来看,MySQL是正常处理了
  首先来复现下问题,我们连接到数据库test,然后创建表test_data2.
 
  mysql> use test
 
  mysql> create table test_data2 (id int ,name varchar(30));
 
  Query OK, 0 rows affected (0.05 sec)
 
  接着创建一个主键,命名为idx_pk_id,从执行情况来看,MySQL是正常处理了。
 
  mysql> alter table test_data2 add primary key idx_pk_id(id);
 
  Query OK, 0 rows affected (0.02 sec)
 
  Records: 0  Duplicates: 0  Warnings: 0
 
  为了进一步对比,我们添加一个唯一性索引(辅助索引),来看看它们的差异。
 
  mysql> alter table test_data2 add unique key idx_uniq_name(name);
 
  Query OK, 0 rows affected (0.00 sec)
 
  Records: 0  Duplicates: 0  Warnings: 0
 
  查看主键命名方法1:使用show indexes命令
 
  要查看MySQL索引的信息,使用show indexes from test_data2就可以。
 
  mysql> show indexes from test_data2G
 
  *************************** 1. row ***************************
 
          Table: test_data2
 
     Non_unique: 0
 
       Key_name: PRIMARY
 
   Seq_in_index: 1
 
    Column_name: id
 
      Collation: A
 
    Cardinality: 0
 
       Sub_part: NULL
 
         Packed: NULL
 
           Null:
 
     Index_type: BTREE
 
        Comment:
 
  Index_comment:
 
  *************************** 2. row ***************************
 
          Table: test_data2
 
     Non_unique: 0
 
       Key_name: idx_uniq_name
 
   Seq_in_index: 1
 
    Column_name: name
 
      Collation: A
 
    Cardinality: 0
 
       Sub_part: NULL
 
         Packed: NULL
 
           Null: YES
 
     Index_type: BTREE
 
        Comment:
 
  Index_comment:
 
  2 rows in set (0.00 sec)
 
  查看主键命名方法2:使用数据字典information_schema.statistics
 
  使用命令的方式不够通用,我们可以使用数据字典information_schema.statistics来进行数据提取。
 
  mysql> select *from information_schema.statistics where table_schema='test' and table_name='test_data2' limit 20 G                
 
  *************************** 1. row ***************************
 
  TABLE_CATALOG: def
 
   TABLE_SCHEMA: test
 
     TABLE_NAME: test_data2
 
     NON_UNIQUE: 0
 
   INDEX_SCHEMA: test
 
     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: test
 
     TABLE_NAME: test_data2
 
     NON_UNIQUE: 0
 
   INDEX_SCHEMA: test
 
     INDEX_NAME: idx_uniq_name
 
   SEQ_IN_INDEX: 1
 
    COLUMN_NAME: name
 
      COLLATION: A
 
    CARDINALITY: 0
 
       SUB_PART: NULL
 
         PACKED: NULL
 
       NULLABLE: YES
 
     INDEX_TYPE: BTREE
 
        COMMENT:
 
  INDEX_COMMENT:
 
  2 rows in set (0.00 sec)
 
  查看主键命名方法3:使用show create table 命令
 
  如果查看建表语句,会发现主键名已经被过滤掉了。
 
  mysql> show create table test_data2G
 
  *************************** 1. row ***************************
 
         Table: test_data2
 
  Create Table: CREATE TABLE `test_data2` (
 
    `id` int(11) NOT NULL,
 
    `name` varchar(30) DEFAULT NULL,
 
    PRIMARY KEY (`id`),
 
    UNIQUE KEY `idx_uniq_name` (`name`)

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读