Oracle插入数据时默认值的影响
工作中经常会遇到的一种数据库问题:
明明为某列设置了默认值,但 INSERT 操作后,还是生成空值。
SQL> CREATE TABLE MY_TEST(
2 COL_1 VARCHAR2(20),
3 COL_2 VARCHAR2(20) DEFAULT '默认',
4 COL_3 VARCHAR2(20) DEFAULT '默认'
5 );
Table created
SQL> INSERT INTO MY_TEST(COL_1, COL_2, COL_3) VALUES(NULL, NULL, NULL);
1 row inserted
SQL> SELECT * FROM MY_TEST;
COL_1 COL_2 COL_3
-------------------- -------------------- --------------------
SQL> INSERT INTO MY_TEST(COL_1, COL_2, COL_3) VALUES('TEST_01', NULL, NULL);
1 row inserted
SQL> SELECT * FROM MY_TEST;
COL_1 COL_2 COL_3
-------------------- -------------------- --------------------
TEST_01
SQL> INSERT INTO MY_TEST(COL_1, COL_2, COL_3) VALUES('TEST_1', 'TEST_2', 'TEST_3');
1 row inserted
SQL> SELECT * FROM MY_TEST;
COL_1 COL_2 COL_3
-------------------- -------------------- --------------------
TEST_01
TEST_1 TEST_2 TEST_3
SQL> INSERT INTO MY_TEST(COL_1, COL_2, COL_3) VALUES(DEFAULT, DEFAULT, DEFAULT);
1 row inserted
SQL> SELECT * FROM MY_TEST;
COL_1 COL_2 COL_3
-------------------- -------------------- --------------------
TEST_01
TEST_1 TEST_2 TEST_3
默认 默认
SQL>
通过以上测试代码可以看出:
1、INSERT 语句中不包含列名时,其值会自动添加为默认值;
2、INSERT 语句中包含列名时,分以下三种情况:
如果 VALUES 中对应的值为非空,则会插入手输的值;
如果 VALUES 中对应的值为 NULL,则会插入空值,不会生成默认值;
如果 VALUES 中对应的值为 DEFAULT 关键字,则会添加默认值。