2016-09-05 47 views
0

是否可以設置列,使其只能有2個不同的值中的1個。例如,現在類型是varchar(8),但我希望它只接受有效的值是「比特幣」或「貝寶」。我知道我可以用PHP來做到這一點,但是MySQL有可能嗎?設置列,以便只允許2個值中的1個

+0

您可以使用'ENUM'。 – 1000111

+1

爲了簡單和效率的緣故,您可以使用布爾值來表示一個或另一個,因爲只有2個選項。 –

+0

@ php_coder_3809625 while true(pun not not: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他列的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

相關問題