2009-08-07 15 views
2

我的表插入到數據庫中唯一要在PostgreSQL

question_id |    title    |  user_id | 
+---------------+---------------------------------+----------------+ 

它的類型是

   Column     |   Type    |       Modifiers        
---------------------------------------+-----------------------------+----------------------------------------------------------------- 
question_id       | integer      | not null default nextval('questions_question_id_seq'::regclass) 
title         | character varying(256)  | 
user_id        | integer      | 

我跑

INSERT INTO questions VALUES (SERIAL, 'question title', 123); 

我得到一個錯誤關於使用SERIAL的。

如何將問題自動添加到表中並通過PostgreSQL自動獲取唯一的question_id?

回答

12

默認值將自動生成一個序列號在你的數據庫上的序列號。所以,你可以做一個簡單的:

insert into questions (title, user_id) values ('question_title', 123); 

它會插入一個自動遞增的數question_id因爲** ** questions_question_id_seq序列的領域。

或者,也可以使用序列,而不是在插入子句中使用SERIAL。但是我寧願使用的第一句話我建議:

insert into questions values (nextval('questions_question_id_seq'), 'question_title', 123); 
+0

如果表中有一列'was_sent_at_time',我想知道如何自動將時間添加到新列。我不成功的嘗試在方括號中使用方法'now()'和明確的列名:'INSERT INTO questions(title,user_id,wast_sent_at_time)VALUES('Lorem Ipsun。',123,now())''。 **如何將時間添加到表格中?** – 2009-08-07 11:59:09

+1

@Masi:將was_sent_at_time列的類型設置爲以下值:timestamp not null default current_timestamp – 2009-08-07 12:04:04

+0

@Masi:聽maksymko。使用CURRENT_TIMESTAMP值填充您的was_sent_at_time列。 :-) – 2009-08-07 12:21:57

2

通常,你並不需要指定的唯一ID,因爲這是做服務器端。你應該使用下列內容:

INSERT INTO questions (title, user_id) VALUES ('question title', 123); 

自動ID的處理方式是通過「questions_question_id_seq」序列完成,你可以在修改部分看到。

2

您也可以使用

Create Table tbl_1 (id SERIAL , name varchar(30)); 

創建表你可以繼續插入數據,如

insert into tbl_1(name) values('xyz'); 

這將自動創建ID。 使用串口僅與序列相同。 您可以檢查link text