SQl2008中主键不能等于NULL,可是可以等于null,这是为啥。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQl2008中主键不能等于NULL,可是可以等于null,这是为啥。相关的知识,希望对你有一定的参考价值。

我的SQl2008是NULL和null都不允许的,可是舍友的允许主键为null,这是什么原因?
就是这样子,第一条记录也是奇葩的貌似是纯空格也可以了。
第二条记录就是null状态的了。

1、你的理解是错误的,你说的null是字符,而你说的【NULL】应该是SQL内置的空值。
2、关系型数据库中的主键均不能为空,不管是单一列做为主键还是多列组合做为主键,都是不允许的
3、主键的概念你还不清楚,下面给你一些参考材料,你阅读后就会明白。
【主键(primary key)是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录。在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录。主关键字是一种唯一关键字,表定义的一部分。一个表不能有多个主关键字,并且主关键字的列不能包含空值。主关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。】
参考技术A 不可能允许主键为null的,肯定是看错了。。。
不然MS就别卖SQL2008数据库了。。
如果真有奇迹,最好贴个截屏,他主键(primarykey,还是允许null的),俺瞻仰瞻仰 囧追问

没看错啊,都好几次了,而且我们寝室装的一个版本,是不是哪里设置问题啊,还是装的有问题。

追答

让他show下表描述的截屏(用他电脑登下你的百度知道),我觉得不可能啊
回答补充:
既然是nchar(字符)数据类型,应该是他插入的学号值就是‘null',而不是空值('')
你可以用这个SQL来鉴定下:
select 学号, len(学号) from shiyan5;
▲纯空格,也就是' ',其len(' ')也有1,并不是真正意义的空值,
▲'null',len('null')=4,虽然其显示貌似空值,但你仔细观察第二行的性别、籍贯列,当为空值查询出显示的是NULL,而且是斜体,那个应该是真正意义上的空值''。len('')=0的

本回答被提问者和网友采纳
参考技术B 两张截图中,第一个“学号”为主键,很明显不允许为NULL;第二个没有设置主键,当然都允许为NULL了。至于第二个截图的第一行第一列的“学号”,这个应该是空格吧?这得你自己核实了。空格、NULL不一样,理解这个很关键。追问

呵呵,第一张截图就是第二张截图的设计图啊,第二张截图只是因为太长才截了前半部分来显示主要问题

追答

那也说明第二张截图里的姓名为a的学号是存在的,不过是空格而已。还是那句话,理解空格和NULL是不同的两个东西很关键。倘若你再加一行记录,学号拷贝a对应的那个学号试试,你一试就明白为什么不让你保存了。

参考技术C NULL在SQL里是关键字,应该不区分大小写。如果你舍友的表允许null,那么很可能他的表定义与你的不完全相同。看看他的表定义就知道了。 参考技术D 是不是该字段设置问题?追问

肯定不是的,我们上次实验课,舍友也是出现了这个问题。
会不会是哪个地方设置有问题,我们SQL装的都是同一个版本

追答

说实在话,SQL2008我不太懂(mysql略懂一些),一起等高手吧。

sql where条件不等于空怎么写

select *from table where a不等于空
怎么写?????

参考技术A where a <> ''
where a <> null
参考技术B where a is not null 参考技术C where isnull(a,'')<>''

如果你不能理解 那么请去SQL帮助里查询 isnull
参考技术D SQL Server Or Oracle? 第5个回答  2007-04-10 where a!=null本回答被提问者采纳

以上是关于SQl2008中主键不能等于NULL,可是可以等于null,这是为啥。的主要内容,如果未能解决你的问题,请参考以下文章

SQL中主键的使用

SQL语句如何写不等于?

oracle 不等于1怎么查?

oracle中怎么查询一列必须等于多个值

sql条件不等于0把null值也过滤掉了

“access索引或主关键字不能包含一个空 (Null)值”是啥意思?怎么解决?