- 语句块包含符:begin ... end,请看:
- 流程控制:
- if语句:
- case语句:
- loop语句:
- while语句:
- repeat语句:
- leave语句:语法:leave 标识符; 其作用是用来退出begin...end结构或其他具有标识符的结构。
- 变量声明:declare 变量名 变量类型 [default 初始值]; #类似js中使用var定义变量(并赋值)。注意:其只能在begin...end这种复合语句结构中。
- 变量赋值:
- 语法1:set 变量名 = 表达式;#此语法中的变量必须先使用declare声明
- 语法2:set @变量名 = 表达式; #此方式可以无需declare语法声明,而是直接赋值,类似php定义变量并赋值。
- 语法3:select @变量名 := 表达式;#此语句会给该变量赋值,同时还会作为一个select语句输出“结果集”。
- 语法4:select 表达式 into @变量名;#此语句虽然看起来是select语句,但其实并不输出“结果集”,而只是给变量赋值。
- 注意:上述语法中变量形式的区别:“@变量名”形式可以在非程序语句中使用,而不带“@”的变量名只能在程序语句中(比如begin ...end范围),且后者必须先声明(declare语法)才能赋值。
- 存储过程:
- 什么是存储过程:就是相当于php或js中没有返回值的函数!——它只“做事”(包括增删改查等),不返回单个数据值(但可以得到select的查询结果)。
- 定义(创建):
- 调用:call 存储过程名 (实参1,实参2,...);
- 删除:drop procedure [if exists] 存储过程名;
- 存储函数
- 什么是存储函数:就是相当于php或js中有返回值的函数!——它必须在完成一定的“计算”后返回单个数据值(一个具体数据或变量数据);
- 注意:存储函数中不能有select语句——因为select语句会返回结果集,但存储函数只能返回“单个数据值”。
- 定义(创建):
- 调用:当作普通函数的调用方式,可用于select语句中。比如:select now() as shijian, func1(5) as col;
- 删除:drop function [if exists] 存储函数名;
- 内置函数
- 数值函数:abs(x), ceiling(x),floor(x), pi(), pow(x,y), rand(), round(x), sqrt(x); //x表示一个数字
- 字符串函数:(以下x表示一个数字,str表示一个字符串)
- ascii(str):返回str的ascii码
- bin(x):获取数字x的二进制字符串形式
- cast(exp as char): 将exp转换为char类型
- char(x1,x2, ...): 返回若干个数字对应的字符串
- char_length(str): 返回字符数,length(x)返回字节数
- concat(str1,str2,...): 连接字符串
- format(x, d): 将数字x格式化为“##,###,###.###”的字符形式,并保留d位。
- instr(str, substr): 取得str中第一次出现substr的位置(位置从1开始算起)
- lcase(str),lower(str);ucase(str), upper(str)
- left(str, len): 取得s左边len个字符,right(str,len)取得右边len个字符
- lpad(str,len,padstr): 左填充,rpad(str, len, padstr)右填充
- ltrim(str):左截取,rtrim(str)右截取,trim(str)两边截取
- mid(str, pos, len): 同义词:substring(str, pos[, len])
- repeat(str, count): 重复str字符count次。
- reverse(str):反转字符
- strcmp(str1, str2): 比较两个字符大小,返回0,-1,1。
- 时间日期函数:(以下t,t1,t2均表示一个时间/日期数据)
- addtime(t1,t2):将时间t2加到时间t1上
- curdate(), current_date();
- curtime(), current_time();
- date(t): 取得t的日期部分(即年月日)
- day(t):取得t的日期数(1-31)
- dayname(t): 取得星期名(英文单词)
- dayofweek(t): 取得星期数(1-7)
- datediff(t1, t2): 取得t1和t2相差的天数,t1大则为正数
- date_add(t, interval 数字n 单位u): 将时间t加上n个单位u(比如3个day,5个hour),实际上如果n为负数,就是减去。常用单位有:year, month, day, hour, minute, second, week
- date_format(t, '格式字符f'):格式字符f常用有:%Y, %y,%m, $d, %H, %h, %i, %s
- extract(时间项u from t):从t中取得时间的某项值,比如年份数,月份数;时间项u的常用词有:year, month, day, hour, minute, second, week
- localtime(): 同now();
- maketime(时,分,秒):
- month(t):取得月份数(1-12)
- year(t):取得年份数
- 聚合函数:(以下col表示一列,通常就是字段名)
- avg(col):取得一列的平均值
- count(col):取得一列的非null值的个数
- min(col):取得一列的最小值;
- max(col):取得一列的最大值;
- sum(col):取得一列的总和
- 其他函数:
- md5(str): md5加密函数
- password(str): 加密函数
- sha1(str): 加密函数
- user(), current_user();
- database();
- version();
- Inet_atoN(): IP到整数;
- Inet_ntoa()(): 整数到IP;
- 触发器
- 什么是触发器?触发器就是在数据库中预先设定好的用于在某个表上发生某个事件(增/删/改)的时候来完成某些任务的一种代码机制。现实中类似的例子就是银行金库的红外扫描入侵报警器。
- 创建触发器:create trigger 触发器名 触发时机 触发事件 on 表名 for each row 要执行的代码;
- 触发器名:一个名字,在一个数据库中唯一;
- 触发时机:表示是某个事件之前还是之后触发,只有两个可用值:before,after;
- 触发事件:表示一个表上什么事件发生的时候会触发,只有3个可用值:insert,update,delete;
- 要执行的代码:要执行的一条或多条语句(但不能有select语句),类似写存储函数中的语句,可以用begin和end以便写多条语句。其中,还可以使用两个特殊的关键字来代表特定含义:old代表触发该触发器的事件所操作的“原来行数据”(就是要执行update或delete的数据)),new代表触发该触发器的事件所操作的“新行数据”(就是要insert的数据)。用此两者可以引用其中的字段以代表该行的该字段值,比如:insert into trigger_test2 set n1=new.n1, amount=new.amount*2; 或:delete from trigger_test2 where n1=old.n1
- 删除触发器:drop trigger [if exists] 触发器名
mysql编程
最新推荐文章于 2024-06-25 14:51:25 发布