MySQL确保每一行都是唯一的

时间:2019-04-15 14:17:46

标签: mysql sql database database-design

我有下表,并希望确保每一行都是唯一的。 sku_simple_product,branding_position_de,branding_id,handling_group_id和pre_cost_id的组合在此表中只能存在一次。

branding_position_id    int(255) Auto-Inkrement  
sku_simple_product  text     
branding_position_de    text     
branding_position_en    text NULL    
branding_position_fr    text NULL    
branding_position_es    text NULL    
branding_position_it    text NULL    
branding_position_pl    text NULL    
branding_position_nl    text NULL    
branding_id varchar(255)     
handling_group_id   varchar(255) NULL    
is_branding_incl    int(11) [0]  
pre_cost_id varchar(255)

现在我有以下问题:

  1. 通过SQL约束来确保这一点吗?
  2. 我真的需要自动创建的“ branding_position_id”吗?
  3. 最有效的插入方法是什么 记录(如果不存在)或更新记录(如果存在) 不知道其独特的“ branding_position_id”?所以根据 上面描述的属性的独特组合?预先感谢!

2 个答案:

答案 0 :(得分:0)

创建一个UNIQUE约束,如下所示:

alter table my_table add constraint uq1 (
  sku_simple_product, 
  branding_position_de, 
  branding_id, 
  handling_group_id,
  pre_cost_id
);

但是,由于列的数据类型为TEXT,因此该解决方案可能效率很低。 TEXT列可以存储很大的文本,并且检查其唯一性可能很慢。

如果可能,我建议将类型更改为较小的类型,例如VARCHAR

答案 1 :(得分:0)

  1. 是的,因为所有其他数据都可以随时间变化,并且效率更高。在这里您可以看到一些advantages and disavantages.

  2. 您可以使用类似这样的东西。

INSERT INTO companies
    (id, full_name, address, phone_number)
VALUES
    (1, ‘Apple’, '1 Infinite Loop, Cupertino, California', 18002752273)
ON DUPLICATE KEY UPDATE
    full_name = ‘Apple’
    address = ‘1 Infinite Loop, Cupertino, California’
    phone_number = 18002752273;