2016-07-29 20 views
0

我試圖插入一些測試數據到表中來檢查一個web servlet的功能,但是,使用pgAdmin4來做插入,我正在運行到一個問題我不知道如何糾正。我想看到的是這個測試信息的最後一個值(圖像字節流)爲空。這裏是我的插入語句:SQL - 插入到postgresql表中產生分號錯誤

INSERT INTO schema.tablename("Test Title", "Test Content", "OldWhovian", "2016-07-29 09:13:00", "1469808871694", "null"); 

我回去:

ERROR: syntax error at or near ";" 
LINE 1: ...ldWhovian", "2016-07-29 09:13:00", "1469808871694", "null"); 
                    ^
********** Error ********** 

ERROR: syntax error at or near ";" 
SQL state: 42601 
Character: 122 

我試過只是踢去除分號,並在右括號,而不是錯誤。這是與null有關的問題嗎?我試圖做到這一點,而不用在引號周圍加空格,並且我得到相同的錯誤,但在null而不是分號。任何幫助表示讚賞,我是DBA/DBD相關活動的新手。

相關:使用PostgreSQL 9.6

+6

你缺少'的'INSERT' VALUES'關鍵字。 –

+0

是的,立即工作。由於某種原因,當我首次指定列名時,我認爲這是必要的。 –

+1

SQL使用單引號表示字符串文字,雙引號表示標識符。所以你的下一個錯誤將是關於「測試標題」是一個未知的列名等的抱怨。而且,null,'null'和'null'是非常不同的東西,你可能想要'null'。 –

回答

1

insert語句通常,您可以指定到要插入並在您指定要插入什麼樣的價值觀其中第二部分列第一部分。

INSERT INTO table_name (column1, column2) VALUES (value1, value2); 

只有在第二部分提供了所有值時,才需要指定哪些列部分。如果你有一個有七列的表格,你可以省略第一部分,如果在第二部分中提供了七個值。

INSERT INTO table_name VALUES (value1, value2, value3, ...); 

例子:

drop table if exists my_table; 
create table my_table (
    id int not null, 
    username varchar(10) not null, 
    nockname varchar(10), 
    created timestamptz 
); 

INSERT INTO my_table (id, username) VALUES (1, 'user01'); 

您插入列ID和用戶名。創建的列具有指定的默認值,所以當您在插入時不提供值時,將使用默認值。暱稱和標識號可以接受空值。未提供值時使用NULL。

INSERT INTO my_table VALUES (2, 'user02', NULL, NULL, current_timestamp); 

與以前相同,但這裏省略了第一部分,所以您必須提供所有列的值。如果你沒有,你會得到一個錯誤。


如果要插入多個值,可以使用多個語句。

INSERT INTO my_table (id, username, identification_number) VALUES (3, 'user03', 'BD5678'); 
INSERT INTO my_table (id, username, created) VALUES (4, 'user04', '2016-07-30 09:26:57'); 

或者你可以使用postgres簡化這種插入。

INSERT INTO my_table (id, username, nickname, identification_number) VALUES 
    (5, 'user05', 'fifth', 'SX59445'), 
    (6, 'user06', NULL, NULL), 
    (7, 'user07', NULL, 'AG1123'); 

在我寫,你可以省略第一部分(其中指定列)只有當你在第二部分中的所有列提供值開始。這並非完全正確。在特殊情況下,當您的表具有可爲空的列(可以包含NULL值的列)或者您指定了DEFAUL值時,也可以省略第一部分。

create sequence my_seq start 101; 
create table my_table2 (
    id    int    not null default nextval('my_seq'), 
    username  varchar(10)  not null default 'default', 
    nickname  varchar(10), 
    identification_number varchar(10), 
    created   timestamptz  default current_timestamp 
); 

INSERT INTO my_table2 DEFAULT VALUES; 
INSERT INTO my_table2 DEFAULT VALUES; 
INSERT INTO my_table2 DEFAULT VALUES; 

結果:

101 default NULL NULL 2016-07-30 10:28:27.797+02 
102 default NULL NULL 2016-07-30 10:28:27.797+02 
103 default NULL NULL 2016-07-30 10:28:27.797+02 

如果不指定值,使用缺省值或空。在上面的示例中,id列具有序列中的缺省值,username的默認字符串爲「default」,如果未指定並且創建的缺省值爲當前時間戳,則nickname和identification_number爲null。


更多信息:

PostgreSQL INSERT