我正在学习Postgres的老教程,所以可能的事情可能会因为发布而发生变化。在教程中(使用psql),我创建了一个表,然后执行一些insert
语句。以下是导致错误的教程和相应的psql
命令:
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中运行命令,添加空格,使用"
代替{ {1}}引号...所有导致相同的错误。有什么改变或者我可能做错了吗?
答案 0 :(得分: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)
。