powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / INSERT or REPLACE меняет PRIMARY KEY ?
7 сообщений из 7, страница 1 из 1
INSERT or REPLACE меняет PRIMARY KEY ?
    #38467159
meneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Столкнулся с не понятной проблемой.
Есть таблица и уникальный индекс к ней:
Код: sql
1.
2.
3.
CREATE TABLE "matches" ("MatchID" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE ,"League" TEXT,"Match" TEXT,"DT" DATETIME)

CREATE UNIQUE INDEX "MainIndex_Match" ON "matches" ("League" ASC, "Match" ASC)



Если несколько раз выполнить
Код: sql
1.
INSERT OR REPLACE INTO matches (League,Match) VALUES ("Test","Test")


То каждый раз, когда выполняется REPLACT меняется MatchID

Подскажите, пжл, как этого избежать?

Спасибо!
...
Рейтинг: 0 / 0
INSERT or REPLACE меняет PRIMARY KEY ?
    #38467610
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убери PK с MatchID, поставь ее на реальный ключ.

И вообще, зачем тебе два уникальных ключа в таблице? Какой в этом смысл?
На каждой таблице должен быть один и только один первичный ключ. Который уникален по определению.
Вторичные уникальные ключи технически делать можно, но практически всегда бессмысленно и приводит к проблемам.
...
Рейтинг: 0 / 0
INSERT or REPLACE меняет PRIMARY KEY ?
    #38467658
meneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

я прочитал статью http://www.sqlabs.com/blog/2010/12/sqlite-and-unique-rowid-something-you-really-need-to-know/#comment-363

В ней сказано, что в sqlite родной rowid может быть изменен базой данных.
Цитата из статьи/оффиц доков:
"From the official documentation: “Rowids can change at any time and without notice. If you need to depend on your rowid, make it an INTEGER PRIMARY KEY, then it is guaranteed not to change”. And I add also AUTOINCREMENT so you are sure that the same rowid(s) are not reused when rows are deleted."

Поэтому я так и сделал.

Если подытожить, я поэкспериментировал и получилось, что решение есть:
выбрать какие записи существуют, сделать для них UPDATE для остальных INSERT
Тогда все вроде ок. Не могу понять как бы это сделать в рамках одного запроса.
...
Рейтинг: 0 / 0
INSERT or REPLACE меняет PRIMARY KEY ?
    #38467889
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
meneoПоэтому я так и сделал.Это все хорошо и правильно. Но тебя спрашивали совсем не об этом.

Если у тебя пара League, Match уникальна - сделай ее первичным ключом и убери нафиг MatchID.



meneoЕсли подытожить, я поэкспериментировал и получилось, что решение есть:
выбрать какие записи существуют, сделать для них UPDATE для остальных INSERT
Тогда все вроде ок. Не могу понять как бы это сделать в рамках одного запроса.
Никак. А чем тебя два запроса не устраивают?

Код: sql
1.
2.
insert into matches (League,Match) select 'a', 'b' where not exists (select * from matches where league='a' and match='b');
update matches set .... where league='a' and match='b';

классика из учебников.
...
Рейтинг: 0 / 0
INSERT or REPLACE меняет PRIMARY KEY ?
    #38468986
meneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
INSERT or REPLACE меняет PRIMARY KEY ?
    #38469302
meneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl, буду признателен если поможешь составить запрос (я могу ток самый примитив делать).
Запрос, походу, не тривиальный. Не уверен даже, что в один запихнешь :(
Итак есть таблица:
name1(text)name2(text)name3(text)winner(integer)Sum(double)МашаПетяВася1100ДимаМашаПетя2100ВасяДима Маша1100МаксимГенаВася350ПетяДимаВася1130
в столбце winner указывается номер победителя (name1,name2 или name3)
нужно вывести кто сколько итого выиграл. Т.е. в примере результирующая таблица будет:
WinnerNameSumМаша200Вася150Петя130
...
Рейтинг: 0 / 0
INSERT or REPLACE меняет PRIMARY KEY ?
    #38469308
meneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался, спасибо :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / INSERT or REPLACE меняет PRIMARY KEY ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]