范围约束数值MySQL列:如何?

范围约束数值MySQL列:如何?,mysql,Mysql,我可以在数值MySQL列(InnoDB)上定义一个约束,使其仅允许特定范围内的值吗 例如,此表中的列波长: CREATE TABLE spectrumdata ( valueid INT AUTO_INCREMENT, spectrumset INT NOT NULL, wavelength DOUBLE NULL, intensity DOUBLE NULL, error INT NOT NULL, status INT NOT NULL, PRIMARY KEY

我可以在数值MySQL列(InnoDB)上定义一个约束,使其仅允许特定范围内的值吗

例如,此表中的列
波长

CREATE TABLE spectrumdata
(
  valueid INT AUTO_INCREMENT,
  spectrumset INT NOT NULL,
  wavelength DOUBLE NULL,
  intensity DOUBLE NULL,
  error INT NOT NULL,
  status INT NOT NULL,
  PRIMARY KEY (valueid),
  INDEX spectrumset_idx (spectrumset),
  CONSTRAINT spectrumset_fk FOREIGN KEY (spectrumset)
    REFERENCES spectrumsets (setid)
)
COLLATE=utf8_general_ci
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=1;

如果您使用InnoDB作为引擎,先生,您可以退出。如您所见,您可以创建一个新表,其中包含您的限制值和对字段的引用(作为外键),然后使用引用完整性强制执行约束

更新

试试这个:

   CREATE TABLE allowed_val(
      limiting_val DOUBLE NOT NULL,
      PRIMARY KEY (limiting_val )
    ) ENGINE = InnoDB;

INSERT INTO allowed_val( limiting_val) VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),..(1000);

ALTER TABLE spectrumdata
ADD FOREIGN KEY (wavelength) REFERENCES allowed_val(limiting_val);

但您还必须将
spectrumdata
波长更改为
NOT NULL
为默认值=0;处理空值。

如果您使用InnoDB作为引擎sir,您可以退出。如您所见,您可以创建一个新表,其中包含您的限制值和对字段的引用(作为外键),然后使用引用完整性强制执行约束

更新

试试这个:

   CREATE TABLE allowed_val(
      limiting_val DOUBLE NOT NULL,
      PRIMARY KEY (limiting_val )
    ) ENGINE = InnoDB;

INSERT INTO allowed_val( limiting_val) VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),..(1000);

ALTER TABLE spectrumdata
ADD FOREIGN KEY (wavelength) REFERENCES allowed_val(limiting_val);

但您还必须将
spectrumdata
波长更改为
NOT NULL
为默认值=0;处理空值。

您是否使用InnoDB sir?因为MySQL是极少数不支持检查约束的DBMS之一,所以您唯一的机会就是使用触发器。@BlackHatShadow是的,忘了提一下,很抱歉没问题。试试我的答案。我不知道您的表的完整规格,但这可能会有所帮助。您使用InnoDB吗?先生?由于MySQL是为数不多的不支持检查约束的DBMS之一,您唯一的机会就是使用触发器。@BlackHatShadow是的,忘了提一下,很抱歉没问题。试试我的答案。我不知道你们桌子的全部规格,但那可能会有帮助。谢谢。但这是一个解决办法,我想知道是否有办法通过数据定义语句来强制它,但似乎没有。我找到了
CHECK
子句,但文档中说:“CHECK子句已解析,但被所有存储引擎忽略”。请参阅:另外,您的解决方案不适用于双值,只适用于整数。不过谢谢你,谢谢。但这是一个解决办法,我想知道是否有办法通过数据定义语句来强制它,但似乎没有。我找到了
CHECK
子句,但文档中说:“CHECK子句已解析,但被所有存储引擎忽略”。请参阅:另外,您的解决方案不适用于双值,只适用于整数。不过还是谢谢你