mysql唯一键可以为null吗_mysql – 具有NULL的唯一键

这个问题需要一些假设的背景。让我们考虑一个雇员表,其列名称为date_of_birth,title,salary,使用MySQL作为RDBMS。既然如果任何给定的人与另一个人具有相同的名字和出生日期,那么根据定义,他们是同一个人(除了我们有两个名叫亚伯拉罕·林肯的人在1809年2月12日出生的惊人的巧合之外),我们将放一个名称和date_of_birth上的唯一键值意味着“不要同时存放两次”。现在考虑这个数据:

id name date_of_birth title salary

1 John Smith 1960-10-02 President 500,000

2 Jane Doe 1982-05-05 Accountant 80,000

3 Jim Johnson NULL Office Manager 40,000

4 Tim Smith 1899-04-11 Janitor 95,000

如果我现在尝试运行以下语句,它应该会失败:

INSERT INTO employee (name, date_of_birth, title, salary)

VALUES ('Tim Smith', '1899-04-11', 'Janitor', '95,000')

如果我尝试这个,它会成功的:

INSERT INTO employee (name, title, salary)

VALUES ('Jim Johnson', 'Office Manager', '40,000')

现在我的数据将如下所示:

id name date_of_birth title salary

1 John Smith 1960-10-02 President 500,000

2 Jane Doe 1982-05-05 Accountant 80,000

3 Jim Johnson NULL Office Manager 40,000

4 Tim Smith 1899-04-11 Janitor 95,000

5 Jim Johnson NULL Office Manager 40,000

这不是我想要的,但我不能说我完全不同意发生了什么。如果我们谈论数学集,

{'Tim Smith', '1899-04-11'} = {'Tim Smith', '1899-04-11'}

{'Tim Smith', '1899-04-11'} = {'Jane Doe', '1982-05-05'}

{'Tim Smith', '1899-04-11'} = {'Jim Johnson', NULL}

{'Jim Johnson', NULL} = {'Jim Johnson', NULL}

我的猜测是MySQL表示:“既然我不知道吉姆·约翰逊有一个空的出生日期还没有在这张表中,我会补充一下。”

我的问题是:即使date_of_birth并不总是知道的,我如何防止重复?到目前为止,我想出的最好的办法是将date_of_birth移动到不同的表。然而,这个问题是,我可能会说,两位同名,标题和薪水,不同的出生日期的收银员,没有办法存储他们没有重复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值