Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中进行字母数字约束?_Mysql_Sql_Database_Tabs - Fatal编程技术网

如何在mysql中进行字母数字约束?

如何在mysql中进行字母数字约束?,mysql,sql,database,tabs,Mysql,Sql,Database,Tabs,在数据库上做作业。使用MySQL,我的任务是创建包含多个表的数据库。其中之一是worker表,其中主键是WId,它是由16个A-Z和0-9个元素组成的字符串。我需要做一个约束,这样就不可能把它放在那里!@#$%^等等 谢谢。您可以始终使用SIGNAL关键字返回错误: 编辑1: 根据@Gordon_linoff的评论:如果您希望Id发生更改,则必须在插入之前执行,在更新之前执行 CREATE TRIGGER myTrigger BEFORE INSERT ON worker FO

在数据库上做作业。使用MySQL,我的任务是创建包含多个表的数据库。其中之一是worker表,其中主键是WId,它是由16个A-Z和0-9个元素组成的字符串。我需要做一个约束,这样就不可能把它放在那里!@#$%^等等


谢谢。

您可以始终使用
SIGNAL
关键字返回错误:

编辑1: 根据@Gordon_linoff的评论:如果您希望Id发生更改,则必须在插入之前执行
,在更新之前执行

CREATE TRIGGER myTrigger
   BEFORE INSERT
   ON worker
   FOR EACH ROW
BEGIN
   IF NOT (NEW.WId REGEXP '^[A-Za-z0-9]+$')
   THEN
      BEGIN      
        SIGNAL sqlstate '45000' set message_text = 'TADA!';
      END;
  END IF;
END;

MySQL不支持检查约束,所以您需要使用触发器。好的,谢谢,您能告诉我如何使用触发器检查吗?@TeamBeam so不是代码编写服务。做你自己的研究,把你尝试过的东西贴在你不能用的地方。你应该也有一个<代码>更新/代码>触发器。@ TeamBeam,如果它满足你的需要,请考虑关闭这个问题。
CREATE TRIGGER myTrigger
   BEFORE INSERT
   ON worker
   FOR EACH ROW
BEGIN
   IF NOT (NEW.WId REGEXP '^[A-Za-z0-9]+$')
   THEN
      BEGIN      
        SIGNAL sqlstate '45000' set message_text = 'TADA!';
      END;
  END IF;
END;