SQL在插入記實的時辰,凡是并不是表中一整行所有字段都填充了值的,這種環境下的插入有可能當作功,也有可能掉敗,就看缺掉的信息是什么類型
打開Sql Server Management Studio客戶端,毗連上數據庫,利用如下劇本建立一張數據庫表tblEmpty(字段全可空,且無本家兒鍵)
CREATE TABLE tblEmpty(
Id varchar(40) NULL,
Col1 varchar(50) NULL,
Col2 varchar(50) NULL,
Col3 varchar(50) NULL,
Col4 varchar(50) NULL
);
往測試表tblEmpty中插入測試數據,此時,只插入一個字段值,從成果可以看到,這種字段全可空,無任何約束,本家兒鍵都沒有設置的表,插入不完整的信息是可以當作功的:
insert into tblEmpty(Id) values('123');
點竄測試表,將ID欄位設置為本家兒鍵,從執行成果,可以看出,可空的字段是不克不及作為本家兒鍵的
alter table tblEmpty add constraint PK_ID primary key (id);
點竄測試表,將ID欄位設置為不成空,然后再設置本家兒鍵,從成果可以看出,執行當作功了(按挨次一行一行的執行)
alter table tblEmpty alter column id varchar(40) not null;
alter table tblEmpty add constraint PK_ID primary key (id);
再利用第二步的sql語句,往測試表中插入不異的值,可是仍然只有一個ID列有值,執行成果:掉敗,因為本家兒鍵值不克不及反復
insert into tblEmpty(Id) values('123');
點竄第二步的sql語句,插入一個分歧的值,試一試呢,執行成果:當作功
insert into tblEmpty(Id) values('456');
插入除了ID列的所有字段信息,執行成果:掉敗,因為本家兒鍵值不克不及反復。
insert into tblEmpty(Col1, Col2, Col3, Col4) values('第二列', '第三列', '第四列', '第五列');
總結,同時知足下面前提的不完整信息插入就可以當作功,不然,就不可:
1)插入的所有本家兒鍵列都有值,且不反復
2)插入的所有非空欄位都有值,且不反復
3)插入的所有堆積索引欄位都有值,且不反復
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!