SQLITE: невозможно удалить безымянный первичный ключ - PullRequest
1 голос
/ 11 мая 2009

У меня есть таблица sqlite, которая была изначально создана с:

PRIMARY KEY (`column`);

Теперь мне нужно удалить этот первичный ключ и создать новый. Создать новый очень просто, но удаление оригинала кажется сложной задачей. Если я сделаю

.indices  tablename

Я не получил первичный ключ. Некоторые программы показывают первичный ключ как

Indexes: 1
    [] PRIMARY

Имя индекса обычно указывается в [].

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 26 мая 2009

Глоссарий базы данных; первичный ключ - это тип индекса, где порядок индекса обычно приводит к физическому упорядочению необработанных записей базы данных. Тем не менее, любое ядро ​​базы данных, которое позволяет изменять первичный ключ, вероятно, переупорядочивает базу данных ... так что большинство этого не делают, и программист должен создать сценарий для переименования таблицы и создать новый. Так что если вы хотите сменить PK, нет волшебного SQL.

2 голосов
/ 21 сентября 2009

Вы не можете.

PRAGMA INDEX_LIST('MyTable');

выдаст вам список показателей. Это будет включать в себя автоматически сгенерированный индекс для первичного ключа, который будет называться что-то вроде 'sqlite_autoindex_MyTable_1'</p> <p>But unfortunately you cannot drop this index...</p> <pre>sqlite> drop index sqlite_autoindex_MyTable_1; SQL error: index associated with UNIQUE or PRIMARY KEY constraint cannot be dropped

Все, что вы можете сделать, это заново создать таблицу без первичного ключа.

0 голосов
/ 11 мая 2009
select * from sqlite_master;
table|x|x|2|CREATE TABLE x (a text, b text, primary key (`a`))
index|sqlite_autoindex_x_1|x|3|

Вы увидите, что вторая строка, возвращенная из моего быстрого взлома, имеет имя индекса во втором столбце и имя таблицы в третьем. Попробуйте узнать, является ли это имя чем-нибудь полезным.

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