Я получаю SQLSTATE = 23505 ошибки, когда я выполнить следующий оператор DB2:SQL SQLSTATE/DB2 = 23505 ошибки при исполнении UPDATE заявления
update SEOURLKEYWORD
set URLKEYWORD = REPLACE(URLKEYWORD, '/', '-')
where STOREENT_ID = 10701
and URLKEYWORD like '%/%';
После быстрого поиска, определена 23505 ошибки SQL состояния следующим образом:
AN INSERTED OR UPDATED VALUE IS INVALID BECAUSE THE INDEX IN INDEX SPACE CONSTRAINS COLUMNS OF THE TABLE SO NO TWO ROWS CAN CONTAIN DUPLICATE VALUES IN THOSE COLUMNS RID OF EXISTING ROW IS X
полная ошибка я вижу это:
The full error I am seeing is:
DB2 Database Error: ERROR [23505] [IBM][DB2/LINUXX8664] SQL0803N One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by "2" constrains table "WSCOMUSR.SEOURLKEYWORD" from having duplicate values for the index key. SQLSTATE=23505 1 0
Я не уверен, что «индекс язь ntified by '2' ", но это может быть значительным.
Свойства столбцов для таблицы SEOURLKEYWORD следующим образом:
Основываясь на моем понимании этой информации, единственный столбец, который вынужден быть уникальным является SEOURLKEYWORD_ID, основной колонке ключ , Это заставляет это звучать, как оператор обновления, который я пытаюсь запустить, пытается вставить строку с идентификатором SEOURLKEYWORD_ID, который уже существует в таблице.
Если я запускаю SELECT * заявление по рядам я пытаюсь обновить, вот что я получаю:
select * from SEOURLKEYWORD
where storeent_id = 10701
and lower(URLKEYWORD) like '%/%';
Я не понимаю, как выполнение оператора UPDATE является в результате здесь ошибка. Есть только 4 строки, на которые это утверждение должно даже смотреть, и я не вручную обновляю первичный ключ вообще. Кажется, это похоже на повторную вставку повторяющейся строки с обновленным значением столбца перед удалением существующей строки.
Почему я вижу эту ошибку при попытке обновить столбец URLKEYWORD из этих четырех строк? Как я могу решить эту проблему?
ВАЖНО: Поскольку я написал этот вопрос, я сузил проблему до последней из четырех строк в таблице выше, SEOURLKEYWORD_ID = 3074457345616973668. Я могу обновить три другие строки просто отлично, но четвертая строка вызывает ошибка, я понятия не имею, почему. Если я запустил select * из SEOURLKEYWORD, где SEOURLKEYWORD_ID = 3074457345616973668 ;, я вижу только 1 строку.
Это действительно вопрос , Одна строка, о которой я упоминал, вызывала все проблемы с сестринской строкой в таблице, которая уже была/заменена на. Единственное, о чем я до сих пор не знаю, это то, как вы можете сказать, что столбцы STOREENT_ID и URLKEYWORD имеют эти «вынужденные быть уникальными» отношениями? Очевидно, ошибка выдает его, но, глядя на свойства таблицы, я не вижу никаких указаний на это отношение. Поскольку эти строки имеют разные первичные ключи, не должны ли вы иметь эти два столбца одинаковыми до тех пор, пока значения SEOURLKEYWORD_ID не совпадают? – jros
@jros У вас, похоже, есть более одного уникального ограничения для таблицы - первичный ключ, скорее всего, будет «уникальным ограничением или уникальным индексом, идентифицированным« 1 », но в сообщении об ошибке указано, что есть и тот, который идентифицирован (то есть , имеющий идентификатор) «2». – mustaccio
@mustaccio Я вижу, я был не уверен, что этот идентификатор = '2' в ошибке имел в виду. Мне нужно выяснить, как увидеть эти отношения. Благодаря! – jros