最初主键是
(caseId,OSNAME)
+--------------------+---------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+-------------------+-------+
| createdBy | varchar(200) | NO | | NULL | |
| createdOn | timestamp | NO | | CURRENT_TIMESTAMP | |
| osName | varchar(200) | NO | | NULL | |
| caseId | varchar(100) | NO | MUL | NULL | |
| issueType | varchar(100) | NO | | NULL | |
| observationState | varchar(60) | YES | | NULL | |
| problemSolving | int(11) | NO | | NULL | |
| structure | int(11) | NO | | NULL | |
| logicalTransition | int(11) | NO | | NULL | |
| ownership | int(11) | NO | | NULL | |
| expectationSetting | int(11) | NO | | NULL | |
| empathy | int(11) | NO | | NULL | |
| valueAdd | int(11) | NO | | NULL | |
| comments | varchar(2000) | NO | | NULL | |
| version | int(11) | YES | | 0 | |
| showcase_escalate | varchar(30) | YES | | NULL | |
| ringback_state | varchar(200) | YES | | NULL | |
| trt_state | varchar(200) | YES | | NULL | |
| srp_state | varchar(200) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | |
+--------------------+---------------+------+-----+-------------------+-------+
在上述架构中,id
为AUTO INCREMENT
。我删除了,所以我可以caseId as PRIMARY KEY
。但由于有多个记录具有相同的caseId,因此我无法进行更改。
最后我只想将caseId作为我的主键。
最初主键是(caseId,osName)。
答案 0 :(得分:0)
主键
一组列 - 并且暗示基于这组列的索引 - 可以唯一地标识表中的每一行。因此,它必须是不包含任何
NULL
值的唯一索引。InnoDB要求每个表都有这样的索引(也称为 聚集索引 或 群集索引 ) ,并根据主键的列值组织表存储。
选择主键值时,请考虑使用任意值( 合成键 ),而不是依赖于从其他来源获取的值( 自然键 )。
由于您有多个caseId
值相同的记录,caseId
单独无法“在表格中唯一标识每一行”;因此caseId
单独不能成为PRIMARY KEY
。