Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql/Maria唯一密钥表示_Mysql_Sql_Mariadb - Fatal编程技术网

Mysql/Maria唯一密钥表示

Mysql/Maria唯一密钥表示,mysql,sql,mariadb,Mysql,Sql,Mariadb,我想知道如何将密钥存储在mysql/mariadb数据库中。 据我所知,information_schema.columns中存储了一些类型:PRI、MUL和UNI,分别表示主键、键和唯一键 但事实并非如此 MariaDB [test]> CREATE TABLE test_table(leftkey int unsigned, rightkey int unsigned, unique key(leftkey, rightkey)); MariaDB [test]> DESC t

我想知道如何将密钥存储在mysql/mariadb数据库中。 据我所知,information_schema.columns中存储了一些类型:PRI、MUL和UNI,分别表示主键、键和唯一键

但事实并非如此

MariaDB [test]> CREATE TABLE test_table(leftkey int unsigned, rightkey int unsigned, unique key(leftkey, rightkey));

MariaDB [test]> DESC test_table;
+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| leftkey  | int(10) unsigned | YES  | MUL | NULL    |       |
| rightkey | int(10) unsigned | YES  |     | NULL    |       |
+----------+------------------+------+-----+---------+-------+
所以我有两个问题:

1如何检测密钥类型是唯一的?descripe命令显示类型为MUL,而不是UNI,表示简单键


2示例中的密钥对存储在何处:leftkey和rightkey?

不用麻烦描述,因为正如您所发现的,在某些情况下,它会给出不明确的信息

只需使用showcreatetable。这将准确地显示将重新创建表的SQL语法。然后您就可以确切地知道存在哪些键以及键的类型

mysql> show create table test_table\G
*************************** 1. row ***************************
       Table: test_table
Create Table: CREATE TABLE `test_table` (
  `leftkey` int(10) unsigned DEFAULT NULL,
  `rightkey` int(10) unsigned DEFAULT NULL,
  UNIQUE KEY `leftkey` (`leftkey`,`rightkey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
您还可以查询信息\u SCHEMA.STATISTICS以获得更精确的信息

mysql> select * from information_schema.statistics where table_name='test_table'\G
*************************** 1. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 1
  COLUMN_NAME: leftkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
*************************** 2. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 2
  COLUMN_NAME: rightkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
或者信息\u SCHEMA.KEY\u列\u用法表的信息稍有不同:

mysql> select * from information_schema.key_column_usage where table_name = 'test_table'\G
*************************** 1. row ***************************
           CONSTRAINT_CATALOG: def
            CONSTRAINT_SCHEMA: test
              CONSTRAINT_NAME: leftkey
                TABLE_CATALOG: def
                 TABLE_SCHEMA: test
                   TABLE_NAME: test_table
                  COLUMN_NAME: leftkey
             ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: NULL
      REFERENCED_TABLE_SCHEMA: NULL
        REFERENCED_TABLE_NAME: NULL
       REFERENCED_COLUMN_NAME: NULL
*************************** 2. row ***************************
           CONSTRAINT_CATALOG: def
            CONSTRAINT_SCHEMA: test
              CONSTRAINT_NAME: leftkey
                TABLE_CATALOG: def
                 TABLE_SCHEMA: test
                   TABLE_NAME: test_table
                  COLUMN_NAME: rightkey
             ORDINAL_POSITION: 2
POSITION_IN_UNIQUE_CONSTRAINT: NULL
      REFERENCED_TABLE_SCHEMA: NULL
        REFERENCED_TABLE_NAME: NULL
       REFERENCED_COLUMN_NAME: NULL

不要费心去描述,因为正如你所发现的,它在某些情况下给出了模棱两可的信息

只需使用showcreatetable。这将准确地显示将重新创建表的SQL语法。然后您就可以确切地知道存在哪些键以及键的类型

mysql> show create table test_table\G
*************************** 1. row ***************************
       Table: test_table
Create Table: CREATE TABLE `test_table` (
  `leftkey` int(10) unsigned DEFAULT NULL,
  `rightkey` int(10) unsigned DEFAULT NULL,
  UNIQUE KEY `leftkey` (`leftkey`,`rightkey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
您还可以查询信息\u SCHEMA.STATISTICS以获得更精确的信息

mysql> select * from information_schema.statistics where table_name='test_table'\G
*************************** 1. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 1
  COLUMN_NAME: leftkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
*************************** 2. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 2
  COLUMN_NAME: rightkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
或者信息\u SCHEMA.KEY\u列\u用法表的信息稍有不同:

mysql> select * from information_schema.key_column_usage where table_name = 'test_table'\G
*************************** 1. row ***************************
           CONSTRAINT_CATALOG: def
            CONSTRAINT_SCHEMA: test
              CONSTRAINT_NAME: leftkey
                TABLE_CATALOG: def
                 TABLE_SCHEMA: test
                   TABLE_NAME: test_table
                  COLUMN_NAME: leftkey
             ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: NULL
      REFERENCED_TABLE_SCHEMA: NULL
        REFERENCED_TABLE_NAME: NULL
       REFERENCED_COLUMN_NAME: NULL
*************************** 2. row ***************************
           CONSTRAINT_CATALOG: def
            CONSTRAINT_SCHEMA: test
              CONSTRAINT_NAME: leftkey
                TABLE_CATALOG: def
                 TABLE_SCHEMA: test
                   TABLE_NAME: test_table
                  COLUMN_NAME: rightkey
             ORDINAL_POSITION: 2
POSITION_IN_UNIQUE_CONSTRAINT: NULL
      REFERENCED_TABLE_SCHEMA: NULL
        REFERENCED_TABLE_NAME: NULL
       REFERENCED_COLUMN_NAME: NULL
信息_schema.columns描述作为约束的列而不是键。列在约束中使用,因此您需要使用一些其他信息\u架构表来获取信息

mysql> select * from information_schema.statistics where table_name='test_table'\G
*************************** 1. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 1
  COLUMN_NAME: leftkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
*************************** 2. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 2
  COLUMN_NAME: rightkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
您可以使用以下查询获取有关约束的更多信息:

SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE TK
 ON TC.CONSTRAINT_SCHEMA = TK.CONSTRAINT_SCHEMA
 AND TC.TABLE_SCHEMA = TK.TABLE_SCHEMA
 AND TC.TABLE_NAME   = TK.TABLE_NAME
 AND TC.CONSTRAINT_NAME = TK.CONSTRAINT_NAME
信息_schema.columns描述作为约束的列而不是键。列在约束中使用,因此您需要使用一些其他信息\u架构表来获取信息

mysql> select * from information_schema.statistics where table_name='test_table'\G
*************************** 1. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 1
  COLUMN_NAME: leftkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
*************************** 2. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 2
  COLUMN_NAME: rightkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
您可以使用以下查询获取有关约束的更多信息:

SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE TK
 ON TC.CONSTRAINT_SCHEMA = TK.CONSTRAINT_SCHEMA
 AND TC.TABLE_SCHEMA = TK.TABLE_SCHEMA
 AND TC.TABLE_NAME   = TK.TABLE_NAME
 AND TC.CONSTRAINT_NAME = TK.CONSTRAINT_NAME