比如设计一张用户表,tuser
有字段userid和username
userid为自动增长的int类型
username为varchar
要求username不允许重复,于是我设置了为主键,但我发现,无效,依然可以输入同样的username值,为什么会这样呢?
有请高人指教。

解决方案 »

  1.   

    贴出你的 show create table tuser; 否则别人根本无法分析。 一种可能就是你看错了,其实不是同的USERNAME,但你没看清楚。
      

  2.   

    楼主是不是把userid和username 做为联合主键了?一般你要是不重复的话,建立唯一索引即可;如:
    alter table tab_name add unique key (username)
      

  3.   

    我是用Navicat8工具建的,我看了下,发现,确实是成了联合主键的了,如下:
    CREATE TABLE `tuser` (
    `userid`  int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '1' ,
    `username`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' ,
    PRIMARY KEY (`userid`, `username`)
    )
    我是在工具上直接设置为主键的,为何却成了联合主键呢?
    问题倒是解决了,我把里面加了unique key (username)这句就行了。
      

  4.   

    AUTO_INCREMENT 字段默认就是PRIMARY KEY。
    一个表只能有一个PRIMARY KEY。或许在Navicat8创建主键的时候发现已经存在了,就设置为复合PRIMARY KEY 了。
      

  5.   

    你的工具过于智能化。 所以一般DBA或者学习数据库的时候都不推荐使用图形界面。尽可能使用数据库系统自带的工具。