相关疑难解决方法(0)

无法在Sql Server表中将标识规范更改为是

这可能是一个愚蠢的问题,但为什么我不能将身份规范或(身份)从"否"更改为"是"?

sql-server

24
推荐指数
4
解决办法
6万
查看次数

主键中允许NULL - 为什么以及在哪个DBMS中?

继我的问题"为什么在TSQL中使用'not null primary key'?" ...

正如我从其他讨论中所理解的,一些RDBMS(例如SQLite, MySQL的)允许主键中的"唯一"NULL.

为什么允许这样做以及它有何用处?

背景:我认为与同事和数据库专业人员进行沟通有助于了解不同DBMS中基本概念,方法及其实现的差异.

笔记

  • MySQL被修复并返回到"NOT NULL PK"列表.
  • SQLite已被添加(感谢Paul Hadfield)到"NULL PK"列表:

为了确定主键值的唯一性,NULL值被认为与所有其他值不同,包括其他NULL.

如果INSERT或UPDATE语句尝试修改表内容,以便两个或多个行具有相同的主键值,则会违反约束.根据SQL标准,PRIMARY KEY应始终表示NOT NULL.不幸的是,由于长期的编码监督,在SQLite中并非如此.

除非列是INTEGER PRIMARY KEY,否则SQLite允许在PRIMARY KEY列中使用NULL值.我们可以改变SQLite以符合标准(我们将来可能会这样做),但是当发现疏忽时,SQLite的使用范围很广,如果我们解决问题,我们担心会破坏遗留代码.

所以现在我们已经选择在PRIMARY KEY列中继续允许NULL.但是,开发人员应该意识到,我们可能会在未来更改SQLite以符合SQL标准,并应相应地设计新程序.

- SQLite理解的SQL:CREATE TABLE

database database-design terminology relational-database

19
推荐指数
4
解决办法
3万
查看次数