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

时间:2013-04-02 07:01:36

标签: mysql

我可以在数字MySQL列(InnoDB)上定义约束,只允许某个范围内的值吗?

例如,此表中的列wavelength

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;

1 个答案:

答案 0 :(得分:1)

如果您使用InnoDB作为引擎先生,可以check this出局。如您所见,您可以创建一个包含限制值的新表以及对您的字段的引用(如外键),然后它现在可以通过参照完整性来强制执行约束。

<强>更新

试试这个:

   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至DEFAULT = 0;处理空值。