假设我有一个像这样的创建表脚本:
CREATE TABLE Person (
id INT PRIMARY KEY,
age INT DEFAULT 18,
iq INT DEFAULT 100
);
所以我连续有两个DEFAULT约束。现在我像这样插入:
INSERT INTO Person VALUES(1,85);
我们怎么知道我们是否跳过属性age
或属性iq
?
谢谢您的帮助。
你的问题的答案:这取决于。 ;-)
在MySQL上运行查询会出现以下错误:
Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1
对于MySQL,您需要告诉DBMS您希望拥有哪些列(以及DB应使用默认数据填充哪些列)。像这样:
INSERT INTO Person(id, age) VALUES(1,85);
或者您需要告诉DB,在哪里使用默认值。您可以为这些列传递关键字DEFAULT
:
INSERT INTO Person VALUES(1,85, DEFAULT);
SQLite就像MySQL一样,这里的错误信息是:
SQLITE_ERROR: table Person has 3 columns but 2 values were supplied
这意味着,您必须指定列。
在PostgreSQL表上运行查询将产生
id age iq
1 85 100
这里PostgreSQL将按定义的顺序使用表定义中的列,并使用默认值填充所有剩余的列。