Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
494 views
in Technique[技术] by (71.8m points)

MySQL唯一索引的字段为null好不好

是这样的场景:
用户在注册的时候,可以选择邮箱或者手机号注册
用户名、邮箱、手机号都是唯一的,但是为了简化注册选项,邮箱或者手机号填写一个就可以
这3个字段都是唯一索引,那么声明为not null default ''
超过1个用户用手机注册的时候,就会提示错误,因为重复了
如果声明为允许为null,可以解决上述问题,但是书本上说会不利于查询优化(问题①:真的是这样吗)
那么这种问题该如何处理呢(问题②)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
  1. 不要用null,null会导致索引麻烦(我看的书是高性能MySQL)。判断是否重复。

  2. 建议使用空字符串,加普通索引,然后使用程序。插入记录前,如果用户名、邮箱、手机号有一个不为空,则使用不为空的数据查询数据库,如果重复,报错,否则插入数据。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...