我在 Laravel (postgresql) 中有以下模式
Schema::create('members', function(Blueprint $table)
{
$table->increments('id');
$table->string('lname');
$table->string('fname');
$table->string('mname')->nullable();
$table->string('ename', 10)->nullable();
$table->unique(array('lname', 'fname', 'mname'));
});
如您所见,我有一个由 lname
、fname
和 mname
组成的复合唯一键。但是,我已将 mname
设置为 nullable()
,因为并非所有人都有中间名。
但是,向数据库(postgresql)添加数据时
DB::table('students')->insert(
array(
array(
'lname' => 'Last 1',
'fname' => 'First 1'
),
array(
'lname' => 'Last 1',
'fname' => 'First 1'
)
)
);
保存成功!我做错了吗?解决方法是什么?请帮忙。
最佳答案
记住基本规则:
NULL!= NULL or NULL <> NULL
即使两者都有 NULL
value 它们无法比较,因为它们是未定义的。 NULL
不等于什么都没有。 NULL
等于未定义。像这样想一想 NULL
就像 Chuck Norris,因为没有什么可以与 Chuck Norris 相提并论。
因此你的 key :
Last1 NULL First1
Last1 NULL First1
作为 NULLS
是独一无二的没有可比性。
为了让这个工作默认一个NULL
''
的中间名字符串或零长度字符串。
关于sql - Postgresql 复合唯一键(姓氏、名字、中间名)不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21010648/