Do not duplicate на ключе что значит

MySQL: insert … on duplicate key update

Часто ли вы используете данную конструкцию?

Наверняка любой программист, кто мало-мальски связан с вебом (а под «вебом» я понимаю LAMP — LinuxApacheMySQLPHP), сталкивался c ситуацией, когда перед вставкой новой записи в БД нужно проверить, а вдруг запись с таким ключом уже есть? И если таковая уже имеется, то надо не вставлять новую, а обновлять старую.

Пример применения простой. У вас есть интернет-магазин и вы периодически синхронизируете свою локальную БД с сайтом. Если товар уже присутствует, надо обновить остаток, а если в БД сайта товара нет, то надо добавить запись.

Есть простая таблица goods в БД сайта:

Из листинга понятно, что ключевое поле здесь id. Обратите внимание, что AUTO_INCREMENT для поля id не установлен. Айдишники скорее всего будет генерировать программа, с которой вы синхронизируете БД сайта. На сайте же достаточно того, что поле id будет уникальным. Мы, собственно, так и указали: PRIMARY KEY (id).

Самое очевидное, что приходит в голову — это в скрипте синхронизации (который у вас скорее всего на PHP) проверить наличие элемента с таким id. Получается довольно громоздкая конструкция. Вот фрагмент кода:

Здесь мы вручную проверяем, есть ли запись с таким id в базе, а в дальнейшем выполняем разные запросы.

Возникает закономерный вопрос: зачем мы так делаем, если MySQL уже давно умеет делать это за нас? Все требуемые нами действия можно выполнить одним запросом:

Конструкция insert … on duplicate key update работает именно таким образом, которым нам и нужно. MySQL попробует добавить запись, а если не получится — обновит. Т.е. вместо возвращения ошибки ERROR MySQL Duplicate entry будет выполнено обновление существующей записи.

Кто-нибудь обязательно подумает: а почему бы мне просто не использовать оператор REPLACE?

Действительно, в этом случае мы тоже обойдемся всего одним запросом к БД:

Но на этом сходство заканчивается. Более того, не будет выполнено наше главное условие: «обновить, если такая запись уже существует». Связано это с принципом работы оператора. Отличие в том, что insert … on duplicate key update пытается сначала добавить запись, а если не получается, то обновляет. REPLACE же сначала удалит существующую запись (если такая имеется) а потом вставит новую. В нашем примере, если запись уже существовала, мы потеряем данные. Временной штамп (поле ts) особой важности для нас, допустим, не представляет. А вот поле с количеством просмотров (views) обнулится. Что будет весьма грустно. Ведь у нас правильный магазин и мы собираем статистику о популярности товаров.

И, естественно, триггеры в этих случаях будут срабатывать разные. Впрочем, если вы активно используете триггеры, то этот материал вряд ли для вас).

Как-то так, если вкратце и понятным языком.

Источник

1С:Повторяющиеся ключи (duplicate key) и потерянные проводки

Повторяющиеся ключи это значения из набора столбцов некоторой таблицы, которые встречаются в данной таблице более одного раза.

Потерянные проводки это строки таблицы _1SENTRY или _1SOPER.

Вы спросите – «Почему данные термины используются в заголовке темы вместе?». Потому, что часто (хотя и не всегда) потерянные проводки проявляются как строки с повторяющимися ключами.

В одной из моих статьей я уже писал как бороться с повторяющимися ключами. Теперь же рассмотрим ситуации, при которых возникают сообщения об ошибках в результате появления повторяющихся ключей. А таковых бывает несколько. Набираем в известном всем Books Online (BOL) сочетание «duplicate key», сортируем по колонке «Местонахождение» и перемещаемся на строки с разделом «Troubleshooting». Получаем:

Native errorКод ошибки SQLSeverityУровень «серьезности» ошибкиТекст ошибки
150514CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID %d. Most significant primary key is ‘%S_KEY’.
Невозможно создать уникальный индекс так как в талибце найдены повторяющиеся ключи
150814CREATE INDEX terminated because a duplicate row was found. Primary key is ‘%S_KEY’.
Невозможно создать кластерный индекс так как в таблице найдены повторяющиеся ключи
260114Cannot insert duplicate key row in object ‘%.*ls’ with unique index ‘%.*ls’.
Невозможно вставить строки (обновить строки) в таблице, так как для нее создан уникальный индекс и строка с таким ключом уже есть в таблице

Первые две ошибки случаются когда предпринимается попытка создания индекса (уникального или кластерного). Третья ошибка происходит при попытке вставки записи (либо изменении поля существующей записи) и при этом нарушается уникальность уже существующего индекса.

В том же BOL в качестве способа нахождения повторяющихся ключей указан такой оператор:

Select field,…, fieldN form table group by field,…, fieldN,

здесь field,…, fieldN – набор полей таблицы, по которому создан индекс, уникальный которого нарушается. Это конечно неудобно, так как приходится пролистывать весь запрос для нахождения повторяющихся ключей. Удобнее будет использовать следующий запрос:

select field,…, fieldN, «Count»=count(*) from Table Group by field,…, fieldN having count(*)>1

После получения списка повторяющихся ключей, остается решить какие из них нужно оставить, а какие удалить.

Теперь вернемся к потерянным проводкам. Часто такие сообщения появляются для таблиц _1SENTRY и _1SOPER. Поэтому метод описанные выше также подходит для исправления данных в таблице проводок и операций. Однако кроме этого существуют специфичные для 1С методы борьбы с потерянными проводками:

Что рекомендую. Сначала пробуйте отменить проведение документа и провести его заново. Иногда бывает трудно определить у какого документа потерялись проводки. В этом случае данная операция может занять столько же (если не больше) времени сколько загрузка и выгрузка. Если не поможет – тестирование + исправление конфигурации. Если не поможет – почистить проводки с помощью метода борьбы с повторяющимися ключами, провести документ(ы). Крайняя мера – загрузка – выгрузка. Изменение признака операции на «создавать всегда» приведет к пересчету бухгалтерских итогов, поэтому данная операция сравнима по времени с выгрузкой – загрузкой и тестированием с пересчетом итогов. Данную операцию я не применял, но думаю, что ее можно использовть вместо тестирования – исправления конфигурации. В любом случае если вы исправили положение, то для всех бухгалтерских документов лучше поставить признак создавать операцию всегда.

— есть проводки по непроведенным документам
— такое безобразие нужно «покоцать»
delete from _1sentry (nolock)
where docid in (select iddoc from _1sjourn (nolock)
where closed=0)

— есть проводки, но нет соответствующих документов
— такое безобразие нужно «покоцать»
delete from _1sentry (nolock)
where docid not in (select iddoc from _1sjourn (nolock))

— есть проводки, но нет соответствующих операций
— такое безобразие нужно «покоцать»
delete from _1sentry (nolock)
where docid not in (select docid from _1soper (nolock))

— есть операции, но нет соответствующих документов
— такое безобразие нужно «покоцать»
delete from _1soper (nolock)
where docid not in (select iddoc from _1sjourn (nolock))

— здесь можно сделать установку поля APPCODE, которое содержит
— флаги, к какой компоненте принадлежит документ (см. статью на
— hare.ru в разделе Коллективный разум про структуру базы)
— поле устанавливается для определенного вида документа IDDOCDEF
— то есть известно какой документ, по какой компоненте делает
— движения
— проверка правильности заполнения APPCODE в _1Sjourn
—Update _1Sjourn set appcode=appcode+32
—where appcode 1356 and
— iddoc in (select docid from _1sentry (nolock))
— 32 – заменить на нужный APPCODE
— 1356 –заменить на нужный IDDOCDEF

Запускать этот скрипт лучше всего на копии базы – мало ли что. Важное замечание – если с помощью скрипта удаляются проводки по операции, то восстановить их потом будет очень трудно, в то время как удаление проводок по документам не так страшно (их всегда можно перепровести).

Удачной борьбы с потерянными проводками и повторяющимся ключам – глюками 1С!

ВНИМАНИЕ!

1 декабря на «Клерке» стартует обучение на онлайн-курсе повышения квалификации для получения удостоверения, которое попадет в госреестр. Тема курса: управленческий учет.

Повышайте свою ценность как специалиста прямо на «Клерке». Подробнее

Источник

Will a Locksmith Copy a “Do Not Duplicate” Key?

Search

Categories

Do not duplicate на ключе что значит. Смотреть фото Do not duplicate на ключе что значит. Смотреть картинку Do not duplicate на ключе что значит. Картинка про Do not duplicate на ключе что значит. Фото Do not duplicate на ключе что значит

Do not duplicate на ключе что значит. Смотреть фото Do not duplicate на ключе что значит. Смотреть картинку Do not duplicate на ключе что значит. Картинка про Do not duplicate на ключе что значит. Фото Do not duplicate на ключе что значит

Will a Locksmith Copy a “Do Not Duplicate” Key?

Have you ever needed to copy a key, but noticed the “DO NOT DUPLICATE” inscription on it? You probably wondered if it is illegal to duplicate the key.

The truth is there’s no law regarding “do not duplicate” keys. The engraved message found on many business keys is not legally binding – it’s just a recommendation. Though many chain hardware stores, such as Ace, may refuse to cut a copy of these keys, a locksmith can easily duplicate them.

Now, you’re probably wondering ‘Why are some keys marked “do not duplicate”?’ and, ‘If a locksmith can copy them, are they any more secure than non-marked keys?’

Keys Marked “Do Not Duplicate” Don’t Increase Security

Property owners and managers began pressing the “do not duplicate” key message in an attempt to control security violations from terminated employees, former tenants, construction workers and others who gain possession of a key. Unauthorized key duplication remains a serious threat to security today and is currently the single most violated security policy in business.

The inscription may decrease the number of copies in circulation because of the need to have them copied by a locksmith. Yet the fact remains that keys stamped with “Do Not Duplicate” are no more secure than keys without it. According to the Associated Locksmiths of America (ALOA), having a “do not duplicate” message inscribed on your company keys may actually provide a false sense of security.

Do not duplicate на ключе что значит. Смотреть фото Do not duplicate на ключе что значит. Смотреть картинку Do not duplicate на ключе что значит. Картинка про Do not duplicate на ключе что значит. Фото Do not duplicate на ключе что значитBecause keys labeled “Do Not Duplicate” can actually be copied, your business will need real solutions to successfully increase security.

For “Do Not Duplicate” Keys, The Associated Locksmiths of America Advises:

The Associated Locksmiths of America (ALOA) says, “Orders for keys stamped ‘Do Not Duplicate’ or similar wording will be handled in the same manner as any unrestricted key. ALOA members should inform the consumer that the use of keys stamped ‘Do Not Duplicate’ or similar wording, is not effective security, and further that the use of such words is deceptive because it provides a false sense of security. Consumers who desire effective security should purchase a patented key control system rather than rely on a ‘Do Not Duplicate’ marking. This does not apply to keys protected by law.”

The good news is that there are some other types of keys available that can help ensure the security of your business.

Restricted Keys

It is illegal to duplicate some keys. Locksmiths refer to these keys as “restricted,” meaning that duplication rights are limited to the key’s original manufacturer. In order to make some of their products more secure, lock makers have made restricted keys which are harder to copy because the process requires special equipment and because the key design is patent protected.

Duplication of restricted keys is limited to approved manufacturers and locksmiths and requires the use of particular tools. In order to have a copied made, the locksmith should ask for identification of the person requesting it and proof that this person has obtained permission from the original owner.

These keys provide a higher level of security than unrestricted keys, even those stamped “do not duplicate”, because they are more difficult to copy. For businesses aiming to control the number of copies available, a restricted key may be the right choice.

Measures for Increasing Business Security

If you suspect that duplicate keys are undermining the security of your organization, consider asking a qualified locksmith to rekey the locks on the property. During rekeying, the locksmith changes the internal mechanism that accepts the keys, making it impossible for the previous keys to work and open the lock.

Another way to provide extra protection for a commercial property is to invest in locks that are designed to be more difficult to pick. Some manufacturers produce locks with tight tolerances or with additional pins or special features on the pins – including dimples and angles. Locks should also be made of high-strength materials to prevent burglars or vandals from drilling them or breaking them with force. Check with the manufacturer if you are unsure of what your locks are made of or how they are designed.

For superior security, it’s recommended to implement a technological solution, such as smart electronic locks. These are special devices that allow you to lock, unlock doors, program the security system and even monitor traffic in and out of the building – all from your smartphone. Another great option is electronic access control systems; key card systems allow businesses to restrict certain areas or terminate access to some without needing to reissue cards for other employees.

Great Valley Lockshop Can Help

Your local locksmith can duplicate all types of keys and make key copies that work perfectly. A skilled locksmith can also provide you with the information, locks and keys to safeguard your commercial property from unwanted intruders.

Great Valley Lockshop can help. For service, contact us at (610) 644-5334 or fill out our online request a quote form. Ask us about “Do not duplicate” keys, restricted keys and electronic security systems to protect your business.

Источник

Do Not Duplicate

1 duplicate

двойной, удвоенный;
тех. спаренный;
duplicate ratio (или proportion) мат. отношение квадратов

дубликат;
копия;
in duplicate в двух экземплярах

копия, имеющая силу оригинала

свидетельство о восстановлении несостоятельного должника в правах

снимать копию;
делать дубликат

состоящий из двух одинаковых частей

удваивать, увеличивать вдвое

двойной, удвоенный;
тех. спаренный;
duplicate ratio (или proportion) мат. отношение квадратов

дубликат;
копия;
in duplicate в двух экземплярах in

в двух экземплярах

2 dupl duplicate

3 duplicate

in duplicate в двух экземпля́рах

4 duplicate proportion

5 duplicate ratio

6 in duplicate

7 duplicate

8 duplicate level line

9 duplicate

10 duplicate

11 invoicing in duplicate

for customers requiring invoicing in duplicate, triplicate, etc. — для клиентов, которые требуют счета в двух, трех и т. д. экземплярах.

12 duplicate part

13 duplicate production

14 duplicate

15 duplicate

16 duplicate

17 duplicate reserve standard

18 duplicate standard

19 duplicate

20 duplicate

См. также в других словарях:

Duplicate characters in Unicode — Unicode has a certain amount of duplication of characters. These are pairs of single Unicode code points that are canonically equivalent. The reason for this are compatibility issues with legacy systems. Unless two characters are canonically… … Wikipedia

Duplicate bridge — tournament playing area Duplicate bridge is the most widely used variation of contract bridge in club and tournament play. It is called duplicate because the same bridge deal (i.e. the specific arrangement of the 52 cards into the four hands) is… … Wikipedia

Duplicate publication — Duplicate publication, multiple publication, or redundant publication refers to publishing the same intellectual material more than once, by the author or publisher. It does not refer to the unauthorized republication by someone else, which… … Wikipedia

Duplicate code — is a computer programming term for a sequence of source code that occurs more than once, either within a program or across different programs owned or maintained by the same entity. Duplicate code is generally considered undesirable for a number… … Wikipedia

Duplicate Boy — Publication information Publisher DC Comics First appearance … Wikipedia

Duplicate content — is a term used in the field of search engine optimization to describe content that appears on more than one web page, within the same web site. When multiple pages within a web site contain essentially the same content, search engines such as… … Wikipedia

duplicate — [do͞o′pli kit, dyo͞o′pli kit; ] for v. [, do͞o′plikāt΄] adj. [ME duplicaten < L duplicatus, pp. of duplicare, to double: see DUPLEX] 1. double 2. having two similar parts 3. corresponding exactly 4. designating a way of playing bridge in which … English World dictionary

[DUPLICATE] Hotel Ortles — (Коголо,Италия) Категория отеля: 3 звездочный отель Адрес: Via Caserotti, 66, 38024 Коголо, Италия Описание: The Ortles hotel is set in a typical little mountain resort … Каталог отелей

[DUPLICATE] Pineta Hotels Villaggio Albergo — (Коредо,Италия) Категория отеля: 3 звездочный отель Адрес: Via Al Santuario, 17, 38010 Коредо, Италия Описание: The family Sicher is pleased to welco … Каталог отелей

Источник

IntSystem.org

Случаи из опыта разработки различных WEB проектов. Интересные факты, статьи, впечатления. Программирование и все о нем в сфере WEB.

Неявная проблема ON DUPLICATE KEY и AUTO INCREMENT

Сейчас хочу вам предложить обсудить один интересный факт. Возьмем обычную таблицу:

Не так давно я писал насколько круто использовать конструкцию ON DUPLICATE KEY. Но как оказалось, данная конструкция имеет один подводный камень.

Описание проблемы

Представим себе скрипт который, выполняет следующий запрос:

Допустим это некий скрипт счетчик посещений за день.

Суть в том что любое выполнение этого запроса, вне зависимости от того был INSERT или UPDATE, приводит к увеличению счетчика AUTO INCRIMENT (справедливо только для InnoDB).

Что это значит? Это значит что ваша таблица через некоторое время будет выглядеть вот так (все внимание на столбец id ):

iddatevalue
12015-08-05109339
1093402015-08-06114171
2235112015-08-07154750
iddatevalue
12015-08-05109339
22015-08-06114171
32015-08-07154750

Переполнение первичного ключа

Как исправить

Решение этой проблемы — использовать эту конструкцию со знанием этого подводного камня, т.е. не стоит использовать ее где ожидается 10млн запросов в день 🙂

Второй вариант — отсрочить эту проблему — использовать BIGINT в качестве первичного ключа. Так например BIGINT UNSIGNED хватит на 18 446 744 073 709 551 615 запросов — 5 миллиардов лет при нашем количестве запросов в день (10 млн/день).

Неявная проблема ON DUPLICATE KEY и AUTO INCREMENT

Do not duplicate на ключе что значит. Смотреть фото Do not duplicate на ключе что значит. Смотреть картинку Do not duplicate на ключе что значит. Картинка про Do not duplicate на ключе что значит. Фото Do not duplicate на ключе что значитDo not duplicate на ключе что значит. Смотреть фото Do not duplicate на ключе что значит. Смотреть картинку Do not duplicate на ключе что значит. Картинка про Do not duplicate на ключе что значит. Фото Do not duplicate на ключе что значитDo not duplicate на ключе что значит. Смотреть фото Do not duplicate на ключе что значит. Смотреть картинку Do not duplicate на ключе что значит. Картинка про Do not duplicate на ключе что значит. Фото Do not duplicate на ключе что значитDo not duplicate на ключе что значит. Смотреть фото Do not duplicate на ключе что значит. Смотреть картинку Do not duplicate на ключе что значит. Картинка про Do not duplicate на ключе что значит. Фото Do not duplicate на ключе что значитDo not duplicate на ключе что значит. Смотреть фото Do not duplicate на ключе что значит. Смотреть картинку Do not duplicate на ключе что значит. Картинка про Do not duplicate на ключе что значит. Фото Do not duplicate на ключе что значит

Смотрите также

Правильное хранение IP адреса в БД. Преобразование адреса в unsigned intger 32 bit. Поиск по диапазону IP адресов. Получение маски подсети. Работа с IPv6.

Как ни странно, но многие разработчики до сих пор хранят ip адрес в базе плейн текстом, что вобщем то совсем.

Краткое описание добавления графика статистики запросов MySQL в Munin. Как добавить mysql в munin.

Кратенько о том как добавить MySQL в Munin.

Тестирование различных способов записи данных в таблицу. Сравнение конструкции insert on duplicate key с обычным подходом в три запроса. Производительность индексов MySQL.

Очень часто любому разработчику приходится сталкиваться с такой ситуацией: Проверить существует ли определенная запись в таблице. Если такой записи нет.

Реализация капчи на php. Алгоритм реализации не использует базу данных или файлы. Основан на генерации и проверки ключей. Быстрая и не сложная капча.

На данный момент все известные капчи делятся на категории Хранение некоего ключа в базе данных Хранение некоего ключа в сессии.

Здравствуйте. Хорошо что я прочитала эту статью, она мне очень помогла теперь я знаю что делать!

Хоть звучит это как сарказм, но все равно спасибо за комментарий

Ну хм. Это же всего лишь пример) Хотя вполне реальный пример скрипта счетчика посещений за день. Почему вы считаете что это бесполезная информация?

Вот кстати в подтверждение того что проблема реальна http://habrahabr.ru/post/156489/ случай из практики.

Допустим это некий скрипт счетчик посещений за день. Суть в том что любое выполнение этого запроса, вне зависимости от того был INSERT или UPDATE, приводит к увеличению счетчика AUTO INCRIMENT (справедливо только для InnoDB). Что это значит?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *