Postgresql复合唯一键(LastName、FirstName、MiddleName)不工作?
我在Laravel(postgresql)中有以下模式 正如您所注意到的,我有一个由Postgresql复合唯一键(LastName、FirstName、MiddleName)不工作?,sql,postgresql,laravel,unique,Sql,Postgresql,Laravel,Unique,我在Laravel(postgresql)中有以下模式 正如您所注意到的,我有一个由lname、fname和mname组成的复合唯一键。但是,我将mname设置为nullable(),因为并非所有人都有中间名 但是,在向数据库添加数据时(postgresql) 它成功地保存了!我做错了吗?解决这个问题的方法是什么?请帮助。记住基本规则: NULL!=空或空 即使两者都有NULL值,也无法对其进行比较,因为它们未定义NULL不等于零NULL等于未定义。像这样想一个NULL就像Chuck Norri
lname
、fname
和mname
组成的复合唯一键。但是,我将mname
设置为nullable()
,因为并非所有人都有中间名
但是,在向数据库添加数据时(postgresql)
它成功地保存了!我做错了吗?解决这个问题的方法是什么?请帮助。记住基本规则:
NULL!=空或空
即使两者都有NULL
值,也无法对其进行比较,因为它们未定义NULL
不等于零NULL
等于未定义。像这样想一个NULL
就像Chuck Norris,因为没有什么可以和Chuck Norris相比
因此,你的钥匙:
Last1 NULL First1
Last1 NULL First1
是唯一的,因为空值
不可比较
要使其正常工作,请将
NULL
中间名默认为'
字符串或零长度字符串。记住基本规则:
NULL!=空或空
即使两者都有NULL
值,也无法对其进行比较,因为它们未定义NULL
不等于零NULL
等于未定义。像这样想一个NULL
就像Chuck Norris,因为没有什么可以和Chuck Norris相比
因此,你的钥匙:
Last1 NULL First1
Last1 NULL First1
是唯一的,因为空值
不可比较
要使其正常工作,请将
NULL
中间名默认为'
字符串或零长度字符串。记住基本规则:
NULL!=空或空
即使两者都有NULL
值,也无法对其进行比较,因为它们未定义NULL
不等于零NULL
等于未定义。像这样想一个NULL
就像Chuck Norris,因为没有什么可以和Chuck Norris相比
因此,你的钥匙:
Last1 NULL First1
Last1 NULL First1
是唯一的,因为空值
不可比较
要使其正常工作,请将
NULL
中间名默认为'
字符串或零长度字符串。记住基本规则:
NULL!=空或空
即使两者都有NULL
值,也无法对其进行比较,因为它们未定义NULL
不等于零NULL
等于未定义。像这样想一个NULL
就像Chuck Norris,因为没有什么可以和Chuck Norris相比
因此,你的钥匙:
Last1 NULL First1
Last1 NULL First1
是唯一的,因为空值
不可比较
要使其正常工作,请将默认的
NULL
中间名改为'
字符串或零长度字符串。请显示ORM/任何抽象工具生成的实际表和约束,以及insert命令产生的实际SQL运行。要获取表定义,请连接psql
并运行\dt members
。对于SQL,请从ORM查询日志中找到它。请阅读并重新考虑此模式。@CraigRinger这篇文章非常好,但我相信他需要更好地理解null的概念。用名字作为钥匙在某个时候会让你很难受。但是,不要剥夺一个人奋斗和经验的特权,对吗?当你尝试插入另一个叫John Smith的人时会发生什么?请显示ORM/任何抽象工具生成的实际表和约束,以及insert命令所产生的实际SQL运行。要获取表定义,请连接psql
并运行\dt members
。对于SQL,请从ORM查询日志中找到它。请阅读并重新考虑此模式。@CraigRinger这篇文章非常好,但我相信他需要更好地理解null的概念。用名字作为钥匙在某个时候会让你很难受。但是,不要剥夺一个人奋斗和经验的特权,对吗?当你尝试插入另一个叫John Smith的人时会发生什么?请显示ORM/任何抽象工具生成的实际表和约束,以及insert命令所产生的实际SQL运行。要获取表定义,请连接psql
并运行\dt members
。对于SQL,请从ORM查询日志中找到它。请阅读并重新考虑此模式。@CraigRinger这篇文章非常好,但我相信他需要更好地理解null的概念。用名字作为钥匙在某个时候会让你很难受。但是,不要剥夺一个人奋斗和经验的特权,对吗?当你尝试插入另一个叫John Smith的人时会发生什么?请显示ORM/任何抽象工具生成的实际表和约束,以及insert命令所产生的实际SQL运行。要获取表定义,请连接psql
并运行\dt members
。对于SQL,请从ORM查询日志中找到它。请阅读并重新考虑此模式。@CraigRinger这篇文章非常好,但我相信他需要更好地理解null的概念。用名字作为钥匙在某个时候会让你很难受。然而,不要否认一个人有奋斗和经验的特权,对吗?当你试图插入另一个叫约翰·史密斯的人时会发生什么?小小的挑剔:正确的术语应该是未知的,而不是未定义的。对于三值逻辑:真、假、未知。@Denis yes unknown是正确的,但是Chuck Norris的比较不太好。微小的挑剔:正确的术语应该是未知的,而不是未定义的。对于三值逻辑:真、假、未知。@Denis yes unknown是正确的,但是Chuck Norris的比较不太好。微小的挑剔:正确的术语应该是未知的,而不是未定义的。对于三值逻辑:tr