MySQL гарантирует, что каждая строка уникальна - PullRequest
1 голос
/ 15 апреля 2019

У меня есть следующая таблица, и я хочу убедиться, что каждая строка уникальна. Комбинация sku_simple_product, branding_position_de, branding_id, processing_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 голосов
/ 15 апреля 2019

Да, потому что все ваши другие данные могут со временем меняться и также более эффективны.Здесь вы можете увидеть некоторые преимущества и недостатки.

Вы можете использовать что-то вроде этого.

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;
0 голосов
/ 15 апреля 2019

Создайте ограничение 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...