需要将MUL键更改为PRI键

时间:2015-03-24 20:09:42

标签: mysql

最初主键是

  

(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              |       |
    +--------------------+---------------+------+-----+-------------------+-------+

在上述架构中,idAUTO INCREMENT。我删除了,所以我可以caseId as PRIMARY KEY。但由于有多个记录具有相同的caseId,因此我无法进行更改。

最后我只想将caseId作为我的主键。

最初主键是(caseId,osName)。

1 个答案:

答案 0 :(得分:0)

MySQL Glossary

中所定义
  

主键

     

一组列 - 并且暗示基于这组列的索引 - 可以唯一地标识表中的每一行。因此,它必须是不包含任何NULL值的唯一索引。

     

InnoDB要求每个表都有这样的索引(也称为 聚集索引 群集索引 ) ,并根据主键的列值组织表存储。

     

选择主键值时,请考虑使用任意值( 合成键 ),而不是依赖于从其他来源获取的值( 自然键 )。

     

另请参阅clustered indexindexnatural keysynthetic key

由于您有多个caseId值相同的记录,caseId单独无法“在表格中唯一标识每一行”;因此caseId单独不能成为PRIMARY KEY