首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >约束MySQL字符串列仅包含字母和不包含字母

约束MySQL字符串列仅包含字母和不包含字母

原创
作者头像
思前码厚
发布2024-12-25 22:29:32
发布2024-12-25 22:29:32
7461
举报

数据表创建

代码语言:sql
复制
CREATE TABLE foobar(
    id          SMALLINT   UNSIGNED  NOT   NULL PRIMARY KEY,
    no_alpha    VARCHAR(6)   NOT   NULL,
    some_alpha  VARCHAR(6)   NOT   NULL,
    all_alpha   VARCHAR(6)   NOT   NULL
);

创建触发器,分别在数据插入前和数据更新前触发

代码语言:sql
复制
-- -- 创建表数据插入前的触发器
CREATE TRIGGER check_valid_i BEFORE INSERT ON foobar FOR EACH ROW
BEGIN 
	DECLARE all_alpha, no_alpha, not_all_alpha, not_no_alpha INT;
	SET not_all_alpha = 0, not_no_alpha = 0;
	IF NOT (NEW.all_alpha REGEXP '^[A-Za-z]+$') THEN SET not_all_alpha = 1; 
	END IF;
	IF NOT (NEW.no_alpha REGEXP '^[^A-Za-z]+$') THEN SET not_no_alpha = 1;
	END IF;
	IF not_all_alpha = 1 AND not_no_alpha = 1 THEN 
		SELECT CONCAT('Can not INSERT this, because ', NEW.all_alpha, ' is invalid'), 
		    CONCAT('Can not INSERT this, because ', NEW.no_alpha, ' is invalid')
		INTO all_alpha, no_alpha FROM information_schema.tables;
	END IF;
	IF not_all_alpha = 1 THEN 
		SELECT CONCAT('Can not INSERT this, because ', NEW.all_alpha, ' is invalid')
		INTO all_alpha FROM information_schema.tables;
	END IF;
	IF not_no_alpha = 1 THEN 
		SELECT CONCAT('Can not INSERT this, because ', NEW.no_alpha, ' is invalid')
		INTO not_no_alpha FROM information_schema.tables;
	END IF;
END; 

-- 创建表数据更新前的触发器
CREATE TRIGGER check_valid_u BEFORE UPDATE ON foobar FOR EACH ROW
BEGIN 
	DECLARE all_alpha, no_alpha, not_all_alpha, not_no_alpha INT;
	SET not_all_alpha = 0, not_no_alpha = 0;
	IF NOT (NEW.all_alpha REGEXP '^[A-Za-z]+$') THEN SET not_all_alpha = 1; 
	END IF;
	IF NOT (NEW.no_alpha REGEXP '^[^A-Za-z]+$') THEN SET not_no_alpha = 1;
	END IF;
	IF not_all_alpha = 1 AND not_no_alpha = 1 THEN 
		SELECT CONCAT('Can not UPDATE this, because ', NEW.all_alpha, ' is invalid'), 
		    CONCAT('Can not UPDATE this, because ', NEW.no_alpha, ' is invalid')
		INTO all_alpha, no_alpha FROM information_schema.tables;
	END IF;
	IF not_all_alpha = 1 THEN 
		SELECT CONCAT('Can not UPDATE this, because ', NEW.all_alpha, ' is invalid')
		INTO all_alpha FROM information_schema.tables;
	END IF;
	IF not_no_alpha = 1 THEN 
		SELECT CONCAT('Can not UPDATE this, because ', NEW.no_alpha, ' is invalid')
		INTO not_no_alpha FROM information_schema.tables;
	END IF;
END; 

表数据新增和更新操作测试

INSERT INTO foobar (id, no_alpha, some_alpha, all_alpha) VALUES (1, '1231@@', 'ab13ba', 'bbbbbb');

INSERT INTO foobar (id, no_alpha, some_alpha, all_alpha) VALUES (2, 'ab13ba', 'ab13ba', 'aaaaaa');

INSERT INTO foobar (id, no_alpha, some_alpha, all_alpha) VALUES (2, '123132', 'ab13ba', 'aaaaaa');

INSERT INTO foobar (id, no_alpha, some_alpha, all_alpha) VALUES (3, '123132', 'ab13ba', 'a23aaa');

INSERT INTO foobar (id, no_alpha, some_alpha, all_alpha) VALUES (3, '123132', 'ab13ba', 'aweaaa');

数据操作结果
数据操作结果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据表创建
  • 创建触发器,分别在数据插入前和数据更新前触发
  • 表数据新增和更新操作测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档