2017-10-21 146 views
0

我正在學習Postgres的一個較老的教程,因此它可能可能是自發布以來發生了變化。在教程中(使用psql),我創建一個表,然後執行一些insert語句。這裏是教程和相應的psql命令導致錯誤:PostgreSQL:INSERT INTO語法錯誤

http://www.postgresqlforbeginners.com/2010/11/create-table-and-constraints.html

create table people(
    id int PRIMARY KEY, 
    name varchar NOT NULL 
); 
insert into people(0,'Steve Jobs'); 
insert into people(1,'Mike Markkula'); 
insert into people(2,'Mike Scott'); 
insert into people(3,'John Sculley'); 
insert into people(4,'Michael Spindler'); 
insert into people(5,'Gil Amelio'); 
insert into people(6,'Mike Scott'); 

我得到這個錯誤每個插入語句:

ERROR: syntax error at or near "0" 
LINE 1: insert into people(0,'Steve Jobs'); 
         ^

我試圖複製粘貼,資本的sql命令(即INSERT),從psql以外的shell中運行命令,使用"而不是'引號添加空格...所有結果都是t他同樣的錯誤。有什麼改變或我可能做錯了什麼?

+3

你缺少'values'關鍵字:https://www.postgresql.org/docs/current/static/sql-insert.html那個教程是錯誤的 –

+0

是的,就是這樣。我以爲我也嘗試過,也許我沒有'value'而是'values'。不管怎樣,謝謝 – DjH

回答

3

問題是缺少values(正如註釋中所述)。

我想提出一些建議。首先,無論何時使用insert,都應該始終列出列。如果你正在學習語言,這一點尤其重要 - 你應該學習良好的習慣。第二,你不需要多個inserts。插入多行的較短方式是:

insert into people (id, name) 
    values (0,'Steve Jobs'), 
      (1,'Mike Markkula'), 
      (2,'Mike Scott'), 
      (3,'John Sculley'), 
      (4,'Michael Spindler'), 
      (5,'Gil Amelio'), 
      (6,'Mike Scott'); 

而且您應該瞭解有關serial。寫這些代碼的更常見的方法是:

create table people (
    id serial PRIMARY KEY, 
    name varchar NOT NULL 
); 

insert into people (name) 
    values ('Steve Jobs'), 
      ('Mike Markkula'), 
      ('Mike Scott'), 
      ('John Sculley'), 
      ('Michael Spindler'), 
      ('Gil Amelio'), 
      ('Mike Scott'); 

id由數據庫自動分配(開始於1而非0)。

我應該補充一點:我個人對varchar沒有長度感到不舒服。這在Postgres中是完美的,但有些數據庫會將其解釋爲varchar(1)