继我的问题"为什么在TSQL中使用'not null primary key'?" ...
正如我从其他讨论中所理解的,一些RDBMS(例如SQLite, MySQL的)允许主键中的"唯一"NULL.
为什么允许这样做以及它有何用处?
背景:我认为与同事和数据库专业人员进行沟通有助于了解不同DBMS中基本概念,方法及其实现的差异.
为了确定主键值的唯一性,NULL值被认为与所有其他值不同,包括其他NULL.
如果INSERT或UPDATE语句尝试修改表内容,以便两个或多个行具有相同的主键值,则会违反约束.根据SQL标准,PRIMARY KEY应始终表示NOT NULL.不幸的是,由于长期的编码监督,在SQLite中并非如此.
除非列是INTEGER PRIMARY KEY,否则SQLite允许在PRIMARY KEY列中使用NULL值.我们可以改变SQLite以符合标准(我们将来可能会这样做),但是当发现疏忽时,SQLite的使用范围很广,如果我们解决问题,我们担心会破坏遗留代码.
所以现在我们已经选择在PRIMARY KEY列中继续允许NULL.但是,开发人员应该意识到,我们可能会在未来更改SQLite以符合SQL标准,并应相应地设计新程序.