繁体   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