免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5449 | 回复: 3
打印 上一主题 下一主题

自增列和字符串列的唯一性 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-22 22:31 |只看该作者 |倒序浏览
我打算设计一个很简单的表,中有三个列user_id, user_name, age.
我想让user_id自增长,user_name在表中必须唯一。
我尝试了很久,总是不行

我在access中可以做到,oracle也行。
但我不知道mysql中怎么才可以做到的

因为系统总让user_id是主键,我也把user_name当主键,但是在Insert的时候还是可以插入两个user_name完全一样的记录。

这是怎么回事?如何解决

论坛徽章:
0
2 [报告]
发表于 2008-04-23 08:58 |只看该作者
按照你的意思

create table tb_user (
user_id int unsigned not null auto_increment primary key,
user_name varchar(20) not null default '',
age tinyint not null default 0,
unique key (user_name)
);

论坛徽章:
0
3 [报告]
发表于 2008-04-23 23:23 |只看该作者
2楼是正解

就这个问题来说是解决了,不过你的设计好像有问题
要注意mysql中的auto increment的特性,insert语句在执行时,mysql需要得到AUTO_INC lock,这是一种特别的table lock,是sql级的,insert执行完就release;

但是,mysql不允许两个事务同时获得auto increment计数器上的AUTO_INC lock;
这就有问题了,如果tb_user上有大量并发insert的话,性能会有严重影响,因为可能会造成某些insert必须等待锁的情况

如果一定要这个唯一id,建议想其它办法解决

http://blog.chinaunix.net/u2/67276/showart_574312.html

论坛徽章:
0
4 [报告]
发表于 2008-04-24 09:17 |只看该作者
如果有大量并发,难道你不想想分担这些负载到单一的服务器?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP