在已有的PostgreSQL表中建立主鍵?


雖然很少見,但你可能會遇到需要在現有表上定義主鍵的情況。這可以使用ALTER TABLE語句實現。

語法如下:

ALTER TABLE table_name ADD PRIMARY KEY (column_name1,
column_name2,…., columns_nameN)

從上面的語法可以看出,你可以在多個列上定義主鍵。當你在多個列上定義主鍵時,條件是列對應該具有唯一且非空的值。因此,如果主鍵定義在(column1, column2)上,則允許值(value1, value2)、(value3, value2)和(value1, value4)。即使column1的值value1重複,column2的值value2重複,但當將列對一起考慮時,它們的值是唯一的。

讓我們考慮一個例子來理解這一點。讓我們建立一個名為marks的表並填充它,如下所示:

CREATE TABLE marks(
   name VARCHAR,
   roll_no INTEGER,
   marks_obtained INTEGER,
   perc_marks DOUBLE PRECISION,
   max_marks INTEGER,
   date_of_entry DATE
);
INSERT INTO marks(name, roll_no, marks_obtained, perc_marks,
max_marks, date_of_entry)
VALUES ('Yash', 26, 42, 42.0, 100, current_date),
('Isha', 56, 175, 87.5, 200, current_date),
('Yash', 35, 12, 24, 50, current_date);

如果你查詢該表(SELECT * from marks2),你會看到類似於以下的輸出:

姓名學號獲得分數百分比分數滿分錄入日期
Yash2642421002021-01-31
Isha5617587.52002021-01-31
Yash351224502021-01-31

這個表目前還沒有設定主鍵。現在,讓我們嘗試將name列定義為主鍵。

ALTER TABLE marks ADD PRIMARY KEY (name)

PostgreSQL將返回一個錯誤:

ERROR: could not create unique index "marks_pkey" DETAIL: Key (name)=(Yash) is
duplicated. SQL state: 23505

這是預期的。主鍵不能有重複的值。現在,讓我們嘗試在(name, roll_no)對上設定主鍵。

ALTER TABLE marks ADD PRIMARY KEY (name, roll_no)

這將有效,因為沒有(name, roll_no)組合是重複的。

更新於:2021年2月2日

2K+ 瀏覽量

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告