如何在MySQL中这样理解句子中的名称“ test_id”?
CREATE TABLE test(id INT, PRIMARY KEY test_id(id));
在学习MySQL的时候,我碰巧读了这样的一条语句:
CREATE TABLE test(id INT, PRIMARY KEY test_id(id));
在我的MACOS 10.14 mysql@5.7外壳程序中,我试图省略'test_id'来创建表,而我使用的是'DESC test;'。语句,发现我创建的两个表之间没有区别。
mysql> CREATE TABLE test(id INT, PRIMARY KEY test_id(id));
Query OK, 0 rows affected (0.01 sec)
mysql> DESC test;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> CREATE TABLE test2(id INT, PRIMARY KEY (id));
Query OK, 0 rows affected (0.01 sec)
mysql> DESC test2;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
答案 0 :(得分:3)
documentation说的是:
PRIMARY KEY
的名称始终为PRIMARY
基本上,MySQL会接受名称(因为它想成为一个好名字),然后默默地将其丢弃(因为您毕竟无法设置自己的名称)。最好再看看其他示例:
mysql> CREATE TABLE test(id INT, foo INT, PRIMARY KEY this_is_ignored (id), KEY this_is_kept (foo));
Query OK, 0 rows affected (0.02 sec)
mysql> show keys from test;
+-------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| test | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| test | 1 | this_is_kept | 1 | foo | A | 0 | NULL | NULL | YES | BTREE | | |
+-------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
(Fiddle)。
答案 1 :(得分:1)
两个语句都执行相同的工作。他们正在创建表。但是在第一个SQL
CREATE TABLE test(id INT, PRIMARY KEY test_id(id))
它将创建一个名为test的表,并为主键约束指定一个名称“ test_id”。
如果是第二个SQL
CREATE TABLE test2(id INT, PRIMARY KEY (id))
它将创建一个名为test的表,并为主键约束生成一个随机名称。
使用以下查询并检查使用两个表创建的约束
SHOW CREATE TABLE test;