2016-09-05 2 views
0

Можно ли установить столбец, чтобы он мог иметь только 1 из 2 разных значений. Например, сейчас тип varchar (8), но я хочу, чтобы только допустимые значения были словами «биткойн» или «Paypal». Я знаю, что могу сделать это с помощью PHP, но возможно ли это с MySQL?Столбец установки допускается только 1 из 2 значений

+0

Вы можете использовать 'ENUM'. – 1000111

+1

Для простоты и эффективности вы можете использовать логическое выражение для представления того или другого, поскольку существует только 2 варианта. –

+0

@ php_coder_3809625 в то время как true (каламбур не предназначен: p), что потенциально может привести к некоторым серьезным проблемам масштабирования позже в жизни этой базы кода. Несмотря на то, что Marc может не планировать когда-либо масштабировать его на других платежных процессорах, если эта программа когда-либо взлетает, он определенно хочет иметь возможность добавлять разные типы платежей, чем только 2, и, вероятно, должен планировать масштабируемость (по причине) – Pachonk

ответ

1

Пожалуйста, замените с именем таблицы и с именем cloumn

ALTER TABLE <table name> 
    CHANGE COLUMN <column name> ENUM('Bitcoin','Paypal') NOT NULL; 
+0

Вам нужно указать имя нового столбца, даже если оно не меняется. (Другими словами, '' должно появляться дважды после 'CHANGE COLUMN'.) В качестве альтернативы используйте' MODIFY' вместо 'CHANGE COLUMN'. –

+0

Отлично, это было на самом деле то, что я искал. @Gordon Linoff объяснил это, но вы показали мне, как это было сделано. Я сделал изменения в phpMyAdmin, и это получилось отлично. –

3

В MySQL у вас есть три или четыре варианта.

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

В других базах данных у вас также есть возможность использовать ограничение проверки. MySQL фактически не реализует их.

1

Если вы хотите пойти на совершенно нормализованной подход, я хотел бы сделать что-то вроде этого:

Customer 
id auto_increment pk 
name VARCHAR(255) 
payment_type_id INT(10) 

Тогда есть отдельная таблица:

PaymentTypes 
id auto_increment pk 
name VARCHAR(255) 

Если вы используете InnoDB, вы бы поставили внешний ключ на t he column payment_type.

Для запроса по типу оплаты, просто присоединиться к таблицам:

SELECT c.Name, pt.Name as 'Payment Type' 
FROM Customer c 
LEFT JOIN PaymentTypes pt ON pt.id = c.payment_type_id 

Это один из лучших вариантов, поскольку это позволяет более поздними добавлениями типов оплаты позже.

+0

Это то, что я сделал бы и избегал перечислений, таких как чума – Drew

+0

http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/ – Drew

Смежные вопросы