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 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!