连续插入2个DEFAULT约束

Jac*_*chi 0 sql

假设我有一个像这样的创建表脚本:

CREATE TABLE Person (
    id INT PRIMARY KEY,
    age INT DEFAULT 18,
    iq INT DEFAULT 100
);
Run Code Online (Sandbox Code Playgroud)

所以我连续有两个DEFAULT约束.现在我像这样插入:

INSERT INTO Person VALUES(1,85);
Run Code Online (Sandbox Code Playgroud)

我们如何知道我们是否跳过属性age或属性iq

谢谢您的帮助.

rol*_*rer 5

你的问题的答案:这取决于.;-)

MySQL的

在MySQL上运行查询会出现以下错误:

Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1
Run Code Online (Sandbox Code Playgroud)

对于MySQL,您需要告诉DBMS您希望拥有哪些列(以及DB应使用默认数据填充哪些列).像这样:

INSERT INTO Person(id, age) VALUES(1,85);
Run Code Online (Sandbox Code Playgroud)

或者您需要告诉DB,在哪里使用默认值.您可以DEFAULT为这些列传递关键字:

INSERT INTO Person VALUES(1,85, DEFAULT);
Run Code Online (Sandbox Code Playgroud)

请参阅:MySQL INSERT语法

SQLite的

SQLite就像MySQL一样,这里的错误信息是:

SQLITE_ERROR: table Person has 3 columns but 2 values were supplied
Run Code Online (Sandbox Code Playgroud)

这意味着,您必须指定列.

PostgreSQL的

在PostgreSQL表上运行查询将产生

id  age iq
1   85  100
Run Code Online (Sandbox Code Playgroud)

这里PostgreSQL将按定义的顺序使用表定义中的列,并使用默认值填充所有剩余的列.

MS SQL Server

请参阅:如何在SQL表中插入默认值?