sql - PostgreSQL:INSERT INTO 语法错误

标签 sql postgresql sql-insert

我正在学习 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 运行命令、添加空格、使用 " 而不是 ' 引号...都会导致相同的错误。是否发生了某些变化或者我可能做错了什么?

最佳答案

问题是缺少(如评论中所述)。

我想提出一些建议。首先,无论何时使用 insert,都应该列出列。如果您正在学习语言,这一点尤其重要——您应该养成良好的习惯。

其次,您不需要多个插入。插入多行的较短方法是:

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)

关于sql - PostgreSQL:INSERT INTO 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863411/

相关文章:

node.js - 戈朗 : select few million rows from PostgreSQL database using readable streams like in node. js

Mysql select语句包含where子句所以不适合插入

sql - 为什么单独实例化的 Func<T,bool> 谓词不使用 Entity Framework 转换为 SQL?

SQL Server 对行进行分组

PHP、MySQL 和 jQuery : Display select options dynamically

php - Mysql INSERT SET类型

mysql - 如何解决mysql_error()?

MySQL 更新不执行操作

java - 如何配置 PostgreSQL 以允许 TCP/IP 连接?

mysql - PostgreSQL 特定的 SQL 关键字