Как сделать уникальный столбец в mysql

Обновлено: 07.07.2024

Indexe - это способ настройки производительности, позволяющий быстрее извлекать записи. Индекс создает запись для каждого значения, которое появляется в индексированных столбцах.

Создать индекс

Существует два способа создания индекса. Вы можете создать индекс, когда сначала создаете таблицу, используя оператор CREATE TABLE, или вы можете использовать оператор CREATE INDEX после создания таблицы.

Синтаксис

Синтаксис создания индекса с помощью оператора CREATE TABLE в MySQL:

CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
.
column_n datatype [ NULL | NOT NULL ],

INDEX index_name [ USING BTREE | HASH ]
(index_col1 [(length)] [ASC | DESC],
index_col2 [(length)] [ASC | DESC],
.
index_col_n [(length)] [ASC | DESC])
);

ИЛИ
Синтаксис создания индекса с помощью оператора CREATE INDEX в MySQL:

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
[ USING BTREE | HASH ]
ON table_name
(index_col1 [(length)] [ASC | DESC],
index_col2 [(length)] [ASC | DESC],
.
index_col_n [(length)] [ASC | DESC]);

Параметры или аргументы

UNIQUE - необязательный. Модификатор UNIQUE указывает, что комбинация значений в индексированных столбцах должна быть уникальной.

FULLTEXT - необязательный. Модификатор FULLTEXT индексирует весь столбец и не допускает префикса. Таблицы InnoDB и MyISAM поддерживают этот параметр.

SPATIAL - необязательный. Модификатор SPATIAL индексирует весь столбец и не позволяет индексированным столбцам содержать значения NULL. В этой опции поддерживается InnoDB (начиная с MySQL 5.7) и таблиц MyISAM.

index_name - имя для присвоения индексу.

table_name - имя таблицы для создания индекса.

index_col1 , i ndex_col2 , . index_col_n - столбцы для использования в индексе.

length - необязательный. Если указано, то индексируется только префикс столбца, а не весь столбец. Для не двоичных строковых столбцов это значение - заданное числом символов столбца для индекса. Для двоичных строковых столбцов это значение представляет собой заданное количество байтов столбца для индекса.

ASC - необязательный. Индекс сортируется в порядке возрастания для этого столбца.

DESC - необязательный. Индекс сортируется в порядке убывания для этого столбца.

Пример

Рассмотрим пример создания индекса в MySQL с помощью оператора CREATE TABLE. Этот пример одновременно создаст таблицу, а также индекс.
Например:

ColumnName является уникальным ( UNIQUE KEY ColumnName ).

Я просто хочу сделать колонку не уникальной (должна быть очень простой, но не могу понять, как).

Внутри строки есть уникальный значок. Но значок не способен щелкать мышью.

Как и в phpMyAdmin не нашел, как это сделать, пытаясь с запросом.

На основании советов попробовал ALTER TABLE TableName DROP INDEX ColumnName ,

Получить 1091 Can't DROP 'ColumnName'; check that column/key exists

Посоветуйте, пожалуйста, что нужно сделать, чтобы колонка не была уникальной.

С SHOW CREATE TABLE получить

Обновить

По совету @Bart Friederichs попробовал ALTER TABLE 18_6_TransactionPartners DROP INDEX Number и изменил столбец RegistrationNumber не не уникальный. Не понимаю почему (возможно был какой-то бардак с уникальными ключами). В любом случае может измениться на не уникальный.

Решение

Вероятно, у вас есть имя INDEX , Используя SHOW CREATE TABLE tbl Вы можете узнать названия индексов. Затем отбросьте их по имени (например, некоторые тестовые таблицы):

Чтобы удалить индекс, используйте это:

Другие решения

Если ваш столбец был определен как уникальный с помощью предложения UNIQUE, то вы можете сделать что-то вроде этого:

Ограничение UNIQUE в SQL позволяет идентифицировать каждую запись в таблице.

Если помещается ограничение столбца UNIQUE в поле при создании таблицы, база данных отклонит любую попытку ввода в это поле для одной из строк, значения, которое уже представлено в другой строке. Это ограничение может применяться только к полям, которые были объявлены как непустые (NOT NULL), так как не имеет смысла позволить одной строке таблицы иметь значение NULL, а затем исключать другие строки с NULL значениями как дубликаты.

SQL Server / Oracle / Access

Пример создания таблицы SQL с ограничением UNIQUE:

CREATE TABLE Student

( Kod_stud integer NOT NULL UNIQUE,

Fam char (30) NOT NULL UNIQUE,

Adres char (50),

Ball decimal);

Если база данных определяет, что каждая специальность принадлежит одному и только одному факультету, то каждая комбинация кода факультета(Kod_f) и кода специальности(Kod_spec) в таблице Spec должна быть уникальной. Например:

CREATE TABLE Spec
( Kod_spec integer NOT NULL,
Kod_f integer NOT NULL,
Nazv_spec char (50) NOT NULL,
UNIQUE (Kod_spec, Kod_f));

Оба поля в ограничении таблицы UNIQUE все еще используют ограничение столбца — NOT NULL. Если бы использовалось ограничение столбца UNIQUE для поля Kod_spec, такое ограничение таблицы было бы необязательным. Если значения поля Kod_spec различно для каждой строки, то не может быть двух строк с идентичной комбинацией значений полей Kod_spec и Kod_f. Ограничение таблицы UNIQUE наиболее полезно, когда индивидуальные поля не обязательно должны быть уникальными.

MySQL UNIQUE

Пример создания таблицы Persons в MySQL с ограничением UNIQUE:

CREATE TABLE Persons (
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
);

Удалить ограничение UNIQUE

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

SQL Server / Oracle / MS Access:

ALTER TABLE table_name DROP CONSTRAINT uc_PersonID;

MySQL:

ALTER TABLE table_name DROP INDEX uc_PersonID;

В таблице данных реальным полем ограничения является тип данных. Однако ограничения типа данных единичны, и для обеспечения легитимности данных необходимы некоторые дополнительные ограничения.

Просмотр структуры данных таблицы

  • Красный цвет обозначает тип данных;
  • Синий обозначает атрибуты столбца;


Есть много атрибутов столбцов, примерно так:

NOT NULL/NULL,
DEFAULT,
PRIMARY KEY,
UNIKUE KEY,
AUTO_INCREMENT,
COMMENT

[1] Нулевой атрибут

У него есть два значения: null (по умолчанию) и not null (не пусто);

Хотя базовые поля базы данных по умолчанию пусты, насколько это возможно в производственной среде, поля не являются пустыми. Пустые данные не имеют смысла и не могут участвовать в расчетах.


[2] Описание колонки

комментарий: Описание. Он не имеет реального значения. Добавление текстового описания в столбец будет сохранено вместе с созданием таблицы.

[3] Значение по умолчанию

по умолчанию: у определенного типа данных часто появляется определенное значение, которое может быть указано в начале. Пользователь может выборочно использовать значение по умолчанию или вставлять новые данные при его использовании.


  • Если столбец пола не вставлен, пол будет использовать значение по умолчанию


Можно видеть, что как метод указания столбцов, так и значений по умолчанию может заставить столбцы со значениями по умолчанию использовать значения по умолчанию при вставке данных.

[4] первичный ключ

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

Добавление первичного ключа в таблицу можно условно разделить на три типа:

Keyword Используйте ключевое слово первичного ключа после поля при создании таблицы;

② При создании таблицы используйте первичный ключ (список полей первичного ключа), чтобы создать первичный ключ после всех полей (если в качестве первичного ключа имеется несколько полей, он называется составным первичным ключом).


Тест выглядит следующим образом:


Creating После создания таблицы добавьте первичный ключ в таблицу. Есть два способа, первый - изменить атрибуты поля таблицы, второй - добавить напрямую.

Пример первого способа следующий:

Удалить первичный ключ:

[Классификация первичного ключа]

В процессе фактического создания таблицы редко используйте реальные бизнес-данные в качестве поля первичного ключа (бизнес-первичный ключ, такой как номер курса, номер студента); в большинстве случаев используют логические поля (поле не имеет делового значения, а значение равно нулю) Отношения), это поле первичного ключа называется логическим первичным ключом.

[5] Автоматический рост
| - - |
auto_increment: если соответствующему полю не присвоено значение || для значения по умолчанию || для нулевого значения, оно будет запущено системой автоматически.

Система выполнит операцию +1 от максимального значения в текущем поле, чтобы получить новое и отличающееся поле, которое является значением самоприращающегося поля в качестве следующих вставленных данных. Если auto_increment изменяется вручную и он изменяется в сторону увеличения, следующее значение - auto_increment!

Саморазвитие часто сочетается с первичными ключами.

① обязательным условием для саморазвития любой области должен быть индекс;
field Поле автоинкремента должно быть целым числом;

| -
Тест выглядит следующим образом


| - Обратите внимание, что самоинкрементное поле должно быть ключом (индексом)- |

Это правильно следующим образом:


Вставить данные

Среди них второй и третий не удастся вставить - первичный ключ не может быть пустым:


Первая и четвертая вставка нулевых значений или значений по умолчанию будут автоматически увеличиваться и вставляться:


Если значение введено в поле, соответствующее автоструйному росту, этот автостоп недействителен. В следующий раз, когда вы вставите данные, вы все равно получите максимальное значение +1:


[Изменено с момента роста]

Если саморазвитие происходит от проекта до изменения поля, сначала необходимо удалить саморазвитие, а затем увеличить его (таблица может иметь только одно саморазвитие)

Измените текущее самоинкрементное существующее значение. Изменение может быть только больше максимального значения и не может быть небольшим (малое не действует).

Синтаксис выглядит следующим образом:

Тест Модифицировать вниз:

Тестирование восходящей модификации:

Вставить данные теста:


На данный момент идентификатор равен 10! ! !

Пока у меня есть вопрос: почему саморазвитие начинается с 1?

Мы знаем, что производительность всех систем (таких как наборы символов, наборы корректуры) контролируется переменными внутри системы.

Просмотрите переменные, соответствующие авто-росту: show VARIABLES LIKE '%auto_increment%'


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


После изменения переменной она вступает в силу, когда данные вставляются во второй раз:

  • Поскольку изменение переменной не приводит к немедленному обновлению auto_increment параметра таблицы, при повторной вставке данных будет обновляться auto_increment. В это время обнаруживается, что размер шага изменился, поэтому новое значение размера шага будет использоваться для вставленных данных впоследствии! !


[Удалить с момента роста]

Саморазвитие не может быть устранено через падение, только через столбец модификации;


[6] Уникальный ключ
В таблице часто есть много полей, которые должны быть уникальными, и данные не могут быть дублированы, но таблица может иметь только одно поле в качестве первичного ключа, тогда уникальный ключ может решить проблему в таблице Есть несколько полей, которые требуют уникальных ограничений.

Значение по умолчанию для уникального ключа может быть пустым автоматически и может быть пустым для многих различных полей - пустые поля не участвуют в сравнении уникальности.

[Добавить уникальный ключ]

Существует два способа создания таблицы и последний:

Creating При создании таблицы (есть два типа):


② После создания таблицы (разделенной на две части):

[Удалить уникальное ограничение]

Интересное явление продемонстрировано ниже:


Обратите внимание на ключевой столбец, который показывает, что PRI не UNI! ! !

Объяснение таково: таблица не имеет первичного ключа, это уникальный ключ, который не является пустым и имеет те же свойства, что и первичный ключ. Таким образом, MySQL не может судить, он показывает PRI. Когда первичный ключ уже существует в таблице, он обычно отображается как UNI

[Составное уникальное ограничение]


  • Вставить данные
  • Имя ограничения запроса на дублирование данных - na_um_un (имя указывается при создании)



Удалить составное ограничение имени по умолчанию

  • Если имя не указано, имя составного ограничения является первым именем поля

Кроме того, уникальный ключ также является типом индекса, поэтому добавление и удаление уникального ключа может быть следующим:

Читайте также: