【问题标题】:MySQL unique column stringMySQL 唯一列字符串
【发布时间】:2012-11-13 10:01:51
【问题描述】:

目前我的数据库中有这张表:

CREATE TABLE `twMCUserDB` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mc_userName` text NOT NULL,
  `mc_userPass` text NOT NULL,
  `tw_userName` text NOT NULL,
  `tw_userPass` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

我希望 mc_userName 列也是唯一的(就像 id 一样),但 mc_userName 必须是字符串。

我尝试将其设为主键,但没有成功。

当我向表中添加数据时,我是否首先必须检查mc_userName 是否已经存在?或者我可以使用 MySQL 中的任何内置函数(在插入查询中或其他地方)?

【问题讨论】:

    标签: mysql sql primary-key unique unique-key


    【解决方案1】:

    只需添加UNIQUE

    `mc_userName` text NOT NULL UNIQUE,
    

    CREATE TABLE `twMCUserDB` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `mc_userName` text NOT NULL,
      `mc_userPass` text NOT NULL,
      `tw_userName` text NOT NULL,
      `tw_userPass` text NOT NULL,
      PRIMARY KEY (`id`),
      CONSTRAINT tb_uq UNIQUE (mc_userName)
    ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
    

    【讨论】:

    • 如何将 UNIQUE 添加到列中?我正在使用 Navicat 作为数据库编辑器和 phpmyadmin,但找不到可以处理此问题的东西...
    • 您可以尝试通过运行此 DDL 来更改表:ALTER TABLE twMCUserDB ADD UNIQUE tb_uq (mc_userName)
    • 返回这个:[Err] 1170 - BLOB/TEXT column 'mc_userName' used in key specification without a key length
    • 尝试将databatype更改为varchar(100),因为它是用户名
    • varchar(50) 就足够了
    【解决方案2】:

    为什么不将 'mc_userName ' 作为主键而不是 id?您必须将 mc_userName 的数据类型更改为 VARCHAR,如本文所述:MySQL error: key specification without a key length。或者,创建一个包含 id 和用户名的复合主键。

    如果由于数据库的设计而无法执行此操作,请在查询中使用 EXISTS 关键字。在这里查看更多信息:http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html

    【讨论】:

    • 我不能这样做,因为我收到错误 MySQL Error 1170: BLOB/TEXT Column Used in Key Specification Without a Key Length... 我会看看那个链接
    • 对不起,我的意思是第一部分...使 mc_userName 成为主键而不是 id....我得到了我上面说的错误
    • 我对我的答案进行了更改。可以把 mc_userName 的数据类型改成 VARCHAR 吗?
    • 此链接可能对您有所帮助:stackoverflow.com/questions/1827063/…
    • 我尝试将其更改为 var char,使 id 不再是主要的,但只有 mc_userName,但随后出现此错误:`ERROR 1167: The used storage engine can't index column' mc_userName'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多