mysql中空字符串和null,MySQL,最好插入NULL还是空字符串?

如果在唯一索引中使用多个列,并且这些列中至少有一列是必需的(即必需的表单字段),如果将索引中的其他列设置为NULL,则最终可能会出现重复的行 . 那是因为在唯一列中忽略NULL值 . 在这种情况下,请在唯一索引的其他列中使用空字符串以避免重复行 .

COLUMNS IN A UNIQUE INDEX:

(event_type_id, event_title, date, location, url)

EXAMPLE 1:

(1, 'BBQ', '2018-07-27', null, null)

(1, 'BBQ', '2018-07-27', null, null) // allowed and duplicated.

EXAMPLE 2:

(1, 'BBQ', '2018-07-27', '', '')

(1, 'BBQ', '2018-07-27', '', '') // NOT allowed as it's duplicated.

以下是一些代码:

CREATE TABLE `test` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`event_id` int(11) DEFAULT NULL,

`event_title` varchar(50) DEFAULT NULL,

`date` date DEFAULT NULL,

`location` varchar(50) DEFAULT NULL,

`url` varchar(200) DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `event_id` (`event_id`,`event_title`,`date`,`location`,`url`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

现在插入它以查看它将允许重复的行:

INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,

`url`) VALUES (NULL, '1', 'BBQ', '2018-07-27', NULL, NULL);

INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,

`url`) VALUES (NULL, '1', 'BBQ', '2018-07-27', NULL, NULL);

现在插入此内容并检查是否允许:

INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,

`url`) VALUES (NULL, '1', 'BBQ', '2018-07-28', '', '');

INSERT INTO `test` (`id`, `event_id`, `event_title`, `date`, `location`,

`url`) VALUES (NULL, '1', 'BBQ', '2018-07-28', '', '');

所以,这里没有对错 . 由您决定什么最适合您的业务规则 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值