簡體   English   中英

如何為用戶指定值范圍,以便在phpmyadmin中輸入?

[英]How can I specify the range of values for the user to enter from in phpmyadmin?

我的問題是我有一個名為Autodb的數據庫,它在phpmyadmin中有一個名為Bluetooth的表,在其中必須創建一個名為LAP的列。 在此列中,用戶應輸入0X9E8B00-0X9E8B3F之間的任何值,是否可以在phpmyadmin中進行操作,是否可以在SQL中進行查詢以設置要輸入的值范圍?

我不能100%確定您的要求,但這可能會有所幫助:

如果要設置每個值,用戶可以輸入,則可以使用ENUM數據類型。

這里看看ENUM

這是一個如何使用它的例子。

CREATE TABLE Bluetooth
(
  ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  BlahBlah VARCHAR(50) NOT NULL,
  LAP ENUM('0X9E8B00', '0X9E8B3F', '0X9E8B3F') NOT NULL
)

如果范圍在2個數字之間,則可以使用約束和CHECK

ALTER TABLE myTableName
ADD CONSTRAINT myTableName_myColumnName_valZeroToOneHundred
CHECK (myColumnName BETWEEN 0 AND 100)

ALTER TABLE Table
ADD CONSTRAINT CK_Table_Column_Range CHECK (
    Column >= 0 AND Column <= 100 --Inclusive
)

檢查這個問題

如果只想在范圍之間插入數據:

INSERT INTO Bluetooth (ID, BLAHBLAH, LAP)
SELECT (1, 'BlahBlah', 0x9e8f21) WHERE 
IF (0x9e8f21 >= 0x9e8b00 and 0x9e8f21 <= 0x9e8b3f, 1, 0) = 1

phpMyAdmin是管理員用於管理MySQL數據庫的工具,而不是最終用戶的前端,因此這超出了phpMyAdmin可以處理的范圍。

基本上,在驗證插入數據時,您有三個選擇:

應用等級

在您的前端(似乎是基於所使用標簽的PHP)中,請先檢查該值,然后再將其傳遞給MySQL。 您應該能夠對這些值進行標准的十六進制比較,如果超出設置范圍,則將顯示錯誤消息。

MySQL觸發器

MySQL允許您設置一個觸發器,該觸發器可以在INSERT發生之前檢查數據。 觸發器是在諸如INSERT,UPDATE或DELETE之類的事件之前(或之后)運行的命令或測試-您可能希望在INSERT或DELETE之后發生相同的觸發器動作。 如果該值超出范圍,則可以向客戶端返回錯誤消息。 MySQL應該能夠比較十六進制值。

MySQL存儲過程

代替直接調用INSERT命令,您可以調用存儲過程。 這樣做的好處是,無論使用哪種前端,都可以為要執行的所有INSERT一次編寫一次。 他們都將使用存儲過程。 如果更改界限,則將在存儲過程中而不是在應用程序代碼中進行更改,如果您有多個部署或應用程序正在訪問數據,那么這很好。 同樣,MySQL應該能夠處理十六進制值。

選擇哪種選項取決於您的部署和經驗水平,但是在所有這些情況下,您都可以實現所要進行的檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM