Mysql

當一個已經存在mysql8時如何更改列以使其成為主鍵?

  • May 6, 2021
id         | bigint unsigned | NO   | PRI | NULL    | auto_increment |
| title      | varchar(255)    | NO   |     | NULL    |                |
| category   | varchar(255)    | NO   |     | NULL    |                |
| summary    | varchar(10000)  | NO   |     | NULL    |                |
| detail     | mediumtext      | NO   |     | NULL    |                |
| created_at | timestamp       | YES  |     | NULL    |                |   
| updated_at | timestamp       | YES  |     | NULL    |                |
| image      | mediumblob      | YES  |     | NULL    |                |
| image1     | mediumblob      | YES  |     | NULL    |                |
| image3     | mediumblob      | YES  |     | NULL    |                |
| phold      | varchar(50)     | NO   |     | NULL    |                |
+------------+-----------------+------+-----+---------+----------------+

我現在有這個數據庫,我想與​​另一個表建立一對一的關係,我使用列( title )來連結特定數據。當我跑

mysql> alter table tours add primary key (id,title);

或者

mysql> alter table tours add constraint pk_tours primary key (id, title);

錯誤:

ERROR 1068 (42000): Multiple primary key defined

在這兩個查詢上。

我想要另一個名為 itinery 的表,我用它與前一個表在 volumn title 的幫助下連結;

我正在使用 mysql 8 和 laravel 8。謝謝

如果您想讓其他表引用該title欄位,則可以添加UNIQUE索引。

首先,編輯tours表以NOT NULL向欄位添加約束title

ALTER TABLE `tours` MODIFY `title` VARCHAR(255) NOT NULL;

現在您可以創建索引:

CREATE UNIQUE INDEX `udx_title` ON `tours` (`title`);

在執行此操作之前,請務必確認其中的所有值title都是唯一的。完成後,您將能夠讓其他表引用該欄位。

向 Vérace 致敬,因為他指出這 title 可能是 NULL我們不想要的。

引用自:https://dba.stackexchange.com/questions/291082