正在做一个登录模块,可以使用 email或者phone作为登录帐号登录
由于登录帐号不能重复,所以 email字段和phone字段都必须是unique但是这里就不能保证 email和phone相等了,例如:
帐号A  : phone = 123 , email = [email protected] , password=qq
帐号B  : phone = 444 , email = 123 , password=qq
那么使用sql 语句 "where (phone=? or email=? ) and password=?"的时候
如果输入的帐号密码为 {123,qq}就会查到两个记录暂时的办法只能通过校验phone是否为纯数字,email是否含有@来解决,不让它们重复。
问是否存在数据库的设计让某个值在email + phone 的范围内都必须唯一~

解决方案 »

  1.   

    没有这种方法 ,当然可以在触发器中INSERT的时候检查一下。但还是你自己的方法更可靠。
      

  2.   

    就你自己的方法还好些。。纯为数字没有@号即为phone登陆。反之就为邮箱登陆。
      

  3.   

    做个存储过程。程序先判断是不是邮箱格式,送入区别标志就好了,不然where (phone=? or email=? ) and password=?" 这样的烂语句很让人伤心的,数据量大了就是个杯具。