【问题标题】:how to use UNIQUE index correctly?如何正确使用 UNIQUE 索引?
【发布时间】:2010-08-11 07:37:02
【问题描述】:

我在 DB 有 4 个字段。我将它们设置为不能重复条目。它们是:

1. Model     Varchar(14)     Unique
2. Serial    varchar(8)      Unique
3. Lot       varchar(5)      Unique
4. Line      char(5)         Unique


                    Model         Serial             Lot             Line
First data        remocon         x0001              033a            fa 01

如果我输入了相同的数据,则无法记录。

 remocon         x0001              033a            fa 01

但是如果我输入如下,如何使这些数据成功输入:

remocon        x0002        033a            fa 01

我想要这样的结果:

 Model         Serial             Lot             Line
remocon         x0001             033a            fa 01
remocon         x0002             033a            fa 01

【问题讨论】:

    标签: mysql duplicate-data unique-index


    【解决方案1】:

    您需要为所有字段添加唯一约束,而不是每个字段,即

    UNIQUE(型号、序列号、批次、线)

    解决方案:

    CREATE TABLE YourTable
    (
     Model     Varchar(14)     NOT NULL,
     Serial    varchar(8)      NOT NULL,
     Lot       varchar(5)      NOT NULL,
     Line      char(5)         NOT NULL,
     unique    (model, serial, lot, line) 
    

    )

    对于现有表:

     alter table YourTableName drop index model;
     alter table YourTableName drop index serial;
     alter table YourTableName drop index lot;
     alter table YourTableName drop index line;
     alter table YourTableName add unique (model, serial, lot, line); 
    

    【讨论】:

    • 如果我一直使用这个,我能得到我想要的结果吗?
    • @klox, Yes, UNIQUE(Model, Serial, Lot, Line) 表示字段 Model、Serial、Lot、Line 的组合在整个表中必须是唯一的,在您当前的设计中您不能每个表的每列有多个值,即不能添加两个模型 remocon - 因为该列必须是唯一的,所以删除每列的唯一约束并为表添加唯一约束
    • 对不起我是新手..你能给我完整的sql语法吗?因为我仍然看不出唯一索引和唯一约束之间的区别..谢谢
    • @klox,添加表定义
    【解决方案2】:

    如果您为每个字段创建唯一约束,则每个字段都需要具有唯一数据。您需要创建一个包含所有无法重复的字段的 UNIQUE。

    UNIQUE(Model, Serial, Lot, Line)
    

    但是如果你的所有字段都需要是唯一的,我认为你的表没有主键,你应该创建所有字段的主键而不是唯一。

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2016-11-23
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      相关资源
      最近更新 更多