Mysql/Maria唯一密钥表示
我想知道如何将密钥存储在mysql/mariadb数据库中。 据我所知,information_schema.columns中存储了一些类型:PRI、MUL和UNI,分别表示主键、键和唯一键 但事实并非如此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
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