67,513
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE `t_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT, -- 自增
`name` varchar(50) NOT NULL unique, -- 唯一性约束
`phone` varchar(18) NOT NULL,
`mail` varchar(18) NOT NULL,
UNIQUE KEY (`phone`,`mail`), -- 联合唯一性约束
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;
创建表之后设置:
ALTER TABLE `t_user` ADD UNIQUE KEY(`name`); -- 唯一约束
ALTER TABLE `t_user` ADD UNIQUE KEY(`phone`,`mail`); -- 联合唯一约束
另外,对于缓存的,说下楼主说的系统复杂度和开销问题。对于系统复杂度来说,无非是多了缓存这一层。个人感觉没什么复杂的。对于系统开销来说,主要是看你的用户量或者说数据量。现在的硬件条件一般都支撑得起来。
至于数据库同步问题更不是问题。如果同步要求高的,可以先使用同步方式执行数据库插入。插入成功(无异常)后再执行缓存保存操作。如果同步要求不高的。可以采用异步方式执行数据库插入。再保存缓存。保存缓存后,异步插入数据库操作可能还没执行完,即可能出现插入异常后缓存已保存的情况。这时可以写个数据库操作回调。当失败时调用回调将对应缓存删除。
其实系统要采取什么方案,关键还是看你系统的业务需求。如果你的系统对响应要求比较高时,你所有查询操作都直接同步操作数据库的方式肯定是不可取的。而缓存这方面也主要是想解决数据查询的效率问题,是否需要用取决于你系统的业务需求。