用于生成 user_account_user_id字段的值(用户的nickname+8位随机数(保证不会重复))。
delimiter $$ drop function if exists generate_user_id $$ create function generate_user_id(name char(22)) returns char(30) begin declare result char(30); declare repeat_line int default 1; while repeat_line != 0 do set result = concat(name, left(crc32(concat(now(), name)), 8)); select count(user_id) from user_account where user_id = result into repeat_line; end while; return result; end $$ delimiter ;function不如触发器使用简洁,其插入记录: insert into user_account (user_id, nickname, email, password) values (generate_user_id("zhangsan"), "zhangsan", "11@qq.com", password("11"));
用查询语句的结果对变量赋值(结果集只有一行一列) set 变量名 = (select语句); (一定要加括号) select语句 into 变量名;
MySQL function while if 测试
delimiter $$ drop function if exists foo $$ create function foo() returns varchar(1000) begin declare num int default 0; declare result varchar(50) default ""; while num != 10 do set num = num + 1; if num = 5 then set result = concat(result, " five "); else set result = concat(result, " "); set result = concat(result, num); end if; end while; return result; end $$ delimiter ; select foo();结果:
mysql> select foo(); +---------------------------+ | foo() | +---------------------------+ | 1 2 3 4 five 6 7 8 9 10 | +---------------------------+ 1 row in set (0.00 sec)