Как в MySQL удалить первичный ключ?
Допустим вы внезапно осознали, что первичным ключом в таблице выбрано не то поле, которое больше подходит на эту роль. Но прежде чем добавить другой первичный ключ — нужно удалить старый. Сделать это можно так:
ALTER TABLE mytable DROP PRIMARY KEY;
Однако, если первичный ключ был автоинкрементным полем, то его нужно предварительно сделать не автоинкрементным:
ALTER TABLE mytable MODIFY id INT NOT NULL;
Post Views: 2 222
Читайте также
Работа с эвентами в MySQL и MariaDB SET GLOBAL `event_scheduler` = ON; CREATE EVENT `hourly_event` ON SCHEDULE EVERY 1 HOUR DO DELETE FROM `table_name`;
Mysql rownum Есть таблица меню в БД с полем порядка order_id, но порядок неправильный и надо порядок обновить по алфавиту другого поля title.…
Mysql import/export Экспорт БД через shell mysqldump -uroot -ppass base > dump.sql Импортировать данные из sql файла в mysql как известно можно…
Как удалить primary key sql
MS SQL Server
Для удаления обычных индексов в СУБД MS SQL используется оператор DROP INDEX:
Однако оператор DROP INDEX неприменим к первичным ключам (индекс PRIMARY KEY) и уникальным индексам (UNIQUE). Для удаления первичных ключей и уникальных индексов используется оператор ALTER TABLE с предложением DROP CONSTRAINT:
ALTER TABLE DROP CONSTRAINT
MySQL Server
В СУБД MySQL удаление индексов производится операторами DROP INDEX или ALTER TABLE. Удаление первичных ключей (индексов PRIMARY KEY) осуществляется только с помощью оператора ALTER TABLE. Операторы удаления индексов имеют следующий синтаксис:
ALTER TABLE DROP INDEX
Оператор для удаления индекса PRIMARY KEY имеет синтаксис:
ALTER TABLE DROP PRIMARY KEY
Если такой индекс с именем PRIMARY KEY создан не был, а таблица имеет один или несколько индексов UNIQUE, будет удален первый из них.
Удаление столбцов из таблицы влияет на индексы. Удаляя столбец из таблицы, вы тем самым удаляете этот столбец из индекса. Удаляя все индексируемые столбцы из таблицы, вы удаляете весь индекс.
Удалить уникальный индекс client_phone в таблице tbl_clients
MS SQL: *
ALTER TABLE tbl_clients DROP CONSTRAINT client_phoneMySQL:
DROP INDEX client_phone ON tbl_clients
или
ALTER TABLE tbl_clients DROP INDEX client_phone
Primary Keys SQL Server
В SQL Server (Transact-SQL) первичный ключ представляет собой одно поле или комбинацию полей, которые однозначно определяют запись. Ни одно из полей, которые являются частью первичного ключа, может содержать нулевое значение. В таблице может быть только один первичный ключ.
Первичный ключ может быть определен либо оператором CREATE TABLE, либо в предложении ALTER TABLE.
Создание первичного ключа — использование оператора CREATE TABLE
Вы можете создать первичный ключ в SQL Server с помощью оператора CREATE TABLE.
Синтаксис
Синтаксис создания первичного ключа с помощью оператора CREATE TABLE в SQL Server (Transact-SQL):
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ] [ PRIMARY KEY ],
column2 datatype [ NULL | NOT NULL ],
.
);
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
.
CONSTRAINT constraint_name PRIMARY KEY (column1, column2, . column_n)
);
Пример
рассмотрим пример создания первичного ключа с помощью оператора CREATE TABLE в SQL Server (Transact-SQL). Например:
Как удалить primary key с auto increment?
Пытаюсь удалить аттрибут PRIMARY KEY из представленной ниже таблицы!
+---------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+----------------+ | doughnut_name | varchar(10) | YES | | NULL | | | doughnut_type | varchar(6) | YES | | NULL | | | id | int | NO | PRI | NULL | auto_increment | +---------------+-------------+------+-----+---------+----------------+
ALTER TABLE `doughnut_list` DROP PRIMARY KEY ;
Выбрасывается ошибка : «ERROR: 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key»
Вроде бы понятно на что он ругается, что «здесь может быть только одна колонка с автозаполнением и она должна быть объявлена как ключ«( ну из этой каряво переведённой фразы мне понятно лишь что он ругается на автоинкремент)
Я ПЕРЕсоздал новое свойсто id но уже без AUTO_INCREMENT но с PRIMARY KEY
+---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | doughnut_name | varchar(10) | YES | | NULL | | | doughnut_type | varchar(6) | YES | | NULL | | | id | int | NO | PRI | NULL | | +---------------+-------------+------+-----+---------+-------+
и выполняя команду ALTER TABLE `doughnut_list` DROP PRIMARY KEY; соотвественно получаем ожидаемый результат :
+---------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-------------+------+-----+---------+-------+ | doughnut_name | varchar(10) | YES | | NULL | | | doughnut_type | varchar(6) | YES | | NULL | | | id | int | NO | | NULL | | +---------------+-------------+------+-----+---------+-------+
Но я чот запутался, если сама колонка с именем id не удаляется, то почему тогда интерпретатор скл ругается на AUTO_INCREMENT ? ну удалился бы этот PRIMARY KEY но колонка то осталась бы, всмылсе id ? Не понимаю этой механики т.е. получается чтобы удалить колонку которая является PRIMARY KEY и которая имеет так-же AUTO_INCREMENT нужно удалять её полностью, и пересоздавать? Или всё же есть способ сделать это в одну команду без пересоздания колонки? И вообще в чём связь PRIMARY KEY и AUTO_INCREMENT в данном случае? Почему получается эта ошибка , что мол нельзя дропнуть праймари ки, пока на этой колонке висит AUTO_INCREMENT ? Колонка то по факту не удаляется, ну и пусть бы была себе с этим AUTO_INCREMENT -том.
- Вопрос задан более двух лет назад
- 415 просмотров
1 комментарий
Простой 1 комментарий
