|
|
|
UPDATE OR INSERT в одном запросе
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, уважаемые Гуру ! Столкнулся с проблемой следующего характера: Мне нужно создать табличку, хранящую пары: ключ - значение (типа DBM или реестр в Win), причем ключ должен быть уникальным для определенного пользователя. Создал поля UserID, Name, Value. Создал библиотеку на перле, в которой есть функции getParam, setParam, которые возвращают значение ключа или устанавливают/создают его. Изменение значения параметра происходит за 2..3 запроса: 1. Определяется количество записей ключа для пользователя. 2. Если 0, то использую INSERT. 3. Если 1, то использую UPDATE. 4. Если >1, то DELETE + INSERT. Кто-нибудь реализовывал этот алгоритм на MySQL в 1 запрос ? С уважением, Илья Винокуров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2002, 17:56 |
|
||
|
UPDATE OR INSERT в одном запросе
|
|||
|---|---|---|---|
|
#18+
а ведь нет в MySQL вложенности :( Если интересует выполнение всего или ничего, ИМХО я бы посоветовал тип BDB и транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2002, 19:04 |
|
||
|
UPDATE OR INSERT в одном запросе
|
|||
|---|---|---|---|
|
#18+
Допустим нужно в таблице tSumm добавить пользователю 'Вася' 3 рубля к его сумме. Тогда: INSERT INTO tSumm (name, sm) VALUES ('Вася', 3.00) ON DUPLICATE KEY UPDATE name=name+3.00 Это или вставит запись, если ее нет, либо добавит к уже имеющейся строке значение. Для этого: 1. поле name должно быть или PRIMARY, или UNIQE 2. mysql версии не ниже 4.1.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2003, 15:56 |
|
||
|
UPDATE OR INSERT в одном запросе
|
|||
|---|---|---|---|
|
#18+
Виноват. исправляюсь :) INSERT INTO tSumm (name, sm) VALUES ('Вася', 3.00) ON DUPLICATE KEY UPDATE sm=sm+3.00 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2003, 16:07 |
|
||
|
UPDATE OR INSERT в одном запросе
|
|||
|---|---|---|---|
|
#18+
Давно я не брал в руки MySQL, что-то много поменялось... Но по-моему раньше можно было так: 1. Первичный ключ - уникален. Если он уже есть то insert не заработает 2. Поэтому было специальное слово - replace replace таблица (value) where name=твойключ И тогда если нет ключа, то вставляет новую запись, а если есть, то сначала удаляет, потом вставляет. Запись. А как счас - не знаю. Появились вложенные запросы, транзакции......... может, replace убрали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 13:00 |
|
||
|
UPDATE OR INSERT в одном запросе
|
|||
|---|---|---|---|
|
#18+
Ерунду какую-то написал, а никто меня и не поправит... Видимо, replace действительно больше нет, и никто про него не знает? Синтаксис replace был такой же как у insert replace таблица (value) values (' твоезначение ') where name=' твойключ ' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2003, 17:53 |
|
||
|
UPDATE OR INSERT в одном запросе
|
|||
|---|---|---|---|
|
#18+
feddЕрунду какую-то написал, а никто меня и не поправит... Видимо, replace действительно больше нет, и никто про него не знает? Синтаксис replace был такой же как у insert replace таблица (value) values ('твоезначение') where name='твойключ' REPLACE ни куда не делся. Но он никогда не работал, как UPDATE. REPLACE = DELETE + INSERT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2004, 13:36 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=681&tid=1854950]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 298ms |

| 0 / 0 |
