Mysql 在负数和正数之间设置范围约束的正确SQL语法是什么?

Mysql 在负数和正数之间设置范围约束的正确SQL语法是什么?,mysql,database,Mysql,Database,我是数据库设计新手,我很想知道如何为一列设置介于负数和正数之间的范围约束。我最好的猜测是: CREATE TABLE exampletable ( range TINYINT(1) NOT NULL, CONSTRAINT const1 CHECK (range >= -1 AND range <= 1) ); CREATE TABLE exampletable( 范围TINYINT(1)不为空, MySQL检查约束中的约束const1 CHECK(范围>=-1和范

我是数据库设计新手,我很想知道如何为一列设置介于负数和正数之间的范围约束。我最好的猜测是:

CREATE TABLE exampletable (
    range TINYINT(1) NOT NULL,
    CONSTRAINT const1 CHECK (range >= -1 AND range <= 1)
);
CREATE TABLE exampletable(
范围TINYINT(1)不为空,

MySQL检查约束中的约束const1 CHECK(范围>=-1和范围被忽略。您可以使用触发器取消超出范围的insert/update语句

在触发器中使用此命令

IF `range` < -1 or `range > 1 THEN
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT = 'Range is out of range';
END IF
如果`range`<-1或`range>1,则
信号状态“45000”
设置消息_TEXT='范围超出范围';
如果结束

MySQL中没有“正确的语法”。它只是不支持检查约束(但不会告诉您)因此,我将仅限于在应用程序端进行检查……我不知道MySQL中有if语句。那么,我如何将其与表语法的其余部分相匹配?这会显著降低效率吗?您不能将其放入表定义中。将其放入触发器语句中。每次执行表被更新或新的记录被插入。有趣的是,我被教导使用MySQL检查约束,我从来没有被教导过触发器语句,但我只是在文档中读了一些关于它们的内容,它们看起来非常有用。谢谢。许多MySQL新用户面临的一个问题是,您需要定义另一个分隔符,而不是当您执行触发器定义时,
否则DB会认为您的定义在第一个
处结束,这将使其不完整。请参阅此触发器作为如何执行的示例: