gpt4 book ai didi

mysql - 如何使用多列和自动递增 ID 创建主键?

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:21 25 4
gpt4 key购买 nike

这是我的表结构

mysql> DESCRIBE sections;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| sec_id | int(5) | NO | PRI | NULL | auto_increment |
| sec_name | varchar(45) | YES | | NULL | |
| sec_type | tinyint(4) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+

mysql> DESCRIBE subjects;
+-----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+----------------+
| sub_id | int(5) | NO | PRI | NULL | auto_increment |
| sub_name | varchar(45) | YES | | NULL | |
| sections_sec_id | int(5) | NO | MUL | NULL | |
+-----------------+-------------+------+-----+---------+----------------+

mysql> DESCRIBE chapters;
+-----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+----------------+
| chp_id | int(5) | NO | PRI | NULL | auto_increment |
| chp_name | varchar(45) | YES | | NULL | |
| subjects_sub_id | int(5) | NO | MUL | NULL | |
| sections_sec_id | int(5) | NO | MUL | NULL | |
+-----------------+-------------+------+-----+---------+----------------+

mysql> DESCRIBE questions;
+-----------------+-----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-----------+------+-----+---------+----------------+
| que_id | int(11) | NO | PRI | NULL | auto_increment |
| que_text | text | YES | | NULL | |
| que_created | timestamp | YES | | NULL | |
| chapters_chp_id | int(5) | NO | MUL | NULL | |
| subjects_sub_id | int(5) | NO | MUL | NULL | |
| sections_sec_id | int(5) | NO | MUL | NULL | |
+-----------------+-----------+------+-----+---------+----------------+

mysql> DESCRIBE answers;
+------------------+-----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-----------+------+-----+---------+----------------+
| ans_id | int(11) | NO | PRI | NULL | auto_increment |
| ans_text | text | YES | | NULL | |
| ans_created | timestamp | YES | | NULL | |
| questions_que_id | int(11) | NO | MUL | NULL | |
| chapters_chp_id | int(5) | NO | MUL | NULL | |
| subjects_sub_id | int(5) | NO | MUL | NULL | |
| sections_sec_id | int(5) | NO | MUL | NULL | |
+------------------+-----------+------+-----+---------+----------------+

让我们假设“答案”表

我创建了 'ans_id' 作为 'Answers' 表的主键,使用 创建了另一个 UNIQUE 键em>(ans_id,questions_que_id,chapters_chp_id,subjects_sub_id,sections_sec_id)

This how i created UNIQUE key using mysql workbench

我想做什么。

使用 (ans_id,questions_que_id,chapters_chp_id,subjects_sub_id,sections_sec_id) 列为“Answers”表创建主键,并创建插入前触发以创建“auto_increment”id。

最后我想完成这个

I want to do like this

最佳答案

定义:主键是确定表中每一行所需的最小属性集

UNIQUE 索引应该是 {questions_que_id} + {chapters_chp_id} + {subjects_sub_id} +{sections_sec_id} 并确保它与这 4 列组合为一个索引,如果你将它设置为不同的 4 个索引,你可能会达到不想要的效果结果,正如 Zohar 已经指出的那样。根据我的经验,像这样使用复合键可能是不切实际的。对于基本表操作 (CRUD),您必须提供大量参数。

也许可以这样尝试:自增数字id作为主键,其余重要属性作为UNIQUE索引。然后你可以计算已经插入的答案,以确保将正确的数字分配给 ans_id。提示:从您的应用程序层实现它可能更容易,而不是作为 MySQL 的触发器或过程。如果您的用户将逐步提供答案,那么只需保存时间戳,您就会知道哪个答案较旧,因此您根本不需要 ans_id。

关于mysql - 如何使用多列和自动递增 ID 创建主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23402691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com