Mysql
 sql >> база данни >  >> RDS >> Mysql

Използвайте множество колони като уникален идентификатор за mysql

Да, MySQL предоставя възможност за това.

ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)

Не знам за какво използвате тази таблица, но изглежда, че този уникален ключ може да е силен кандидат за първичен ключ на таблицата. Първичният ключ също автоматично е уникален ключ. Ако решите да го направите първичен ключ, направете следното:

ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)

(Ако получите съобщение за грешка, че вече има първичен ключ, издайте ALTER TABLE MyTable DROP PRIMARY KEY и след това повторете горната команда.)

Редактиране: В отговор на потребителски коментар

Не можете да имате няколко реда с идентични не-NULL стойности за колоните, обхванати от уникалния ключ. Така че не можете да имате два реда, където group_id = 0 AND user_id = 5 , например. 0 е стойност. Но ако направите една или и двете колони нулеви, можете можете имат множество реда, които са идентични до позиционирането на NULL с. Така че бихте могли да имате два (или повече) реда, където group_id IS NULL AND user_id = 1234 .

Условие:Горното е вярно и за двете често използвани MySQL машини за съхранение (MyISAM и InnoDB). MySQL има машини за съхранение, в които NULL се счита за уникална стойност, но вероятно не ги използвате.

Ако направите една или и двете колони нулеви, тогава вашият уникален ключ не може да бъде първичен ключ - първичният ключ трябва да е в колони, които NOT NULL .

Да предположим, че сте направили този ключ свой първичен ключ и сега искате да разрешите NULL в group_id колона. Не знам какъв тип данни group_id е в момента; Предполагам, че в момента е INT UNSIGNED NOT NULL , но ще трябва да промените по-долу, ако не е това. Вече няма да можете да използвате този ключ като основен ключ. Ето команда, която можете да изпълните, за да направите желаните промени:

ALTER TABLE MyTable
    DROP PRIMARY KEY,
    MODIFY group_id INT UNSIGNED,
    ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Искам тригер за ИЗТРИВАНЕ от 2 таблици в MySQL

  2. Най-добра производителност на MySQL DigitalOcean – ScaleGrid срещу DigitalOcean управлявани бази данни

  3. MYSQL как да отключя таблица, ако използвах команда LOCK table table_name WRITE;

  4. Вземете записи за текущия месец

  5. Използването на заявка води до друга заявка