我可以在数字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;
答案 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;处理空值。