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
你缺少'的'INSERT' VALUES'关键字。 –
是的,立即工作。由于某种原因,当我首次指定列名时,我认为这是必要的。 –
SQL使用单引号表示字符串文字,双引号表示标识符。所以你的下一个错误将是关于“测试标题”是一个未知的列名等的抱怨。而且,null,'null'和'null'是非常不同的东西,你可能想要'null'。 –