zoukankan      html  css  js  c++  java
  • MySQL数据库语句整理

    关系型数据库语言


    核心功能

    数据定义DLL

    CREATE ALTER DROP
    

    数据查询/操纵DML

    SELECT INSERT UPDATE DELETE
    

    数据控制DCL

    GRANT REVOKE
    

    数据类型

    数据类型 符号标志
    整数型 bigint, int, smallint, mediumint, tinyint
    精确数值型 decimal, numeric
    浮点型 float, real, double
    位型 Bit
    字符型 char, varchar, longvarchar, longtext
    Unicode字符型 nchar, nvarchar
    BLOB类型 TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB
    文本型 text, tinytext
    二进制型 binary, varbinary
    日期时间类型 date, time, datetime, timestamp, year

    数据库、表结构操作

    数据库操作

    建库

    -- 基本语句
    CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    

    {DATABASE | SCHEMA}:同义,都是建库

    [IF NOT EXISTS]:判定数据库是否已经存在

    删库

    -- 基本语句
    DROP DATABASE [IF EXISTS] db_name
    

    [IF EXISTS]:避免删除不存在的数据库

    表操作

    建表

    -- 基本语句
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (
    	<列名1> <数据类型> [<列选项>],
    	<列名2> <数据类型> [<列选项>],
    	…
    	<表选项>
    ) [ENGINE= … AUTO_INCREMENT=… DEFAULT CHARSET=…]
    

    [TEMPORARY]:新建的表为临时表,只对创建用户可见,当断开与该数据库的连接时会自动删除

    [IF NOT EXISTS]:避免出现表已经存在无法再新建的错误

    [ENGINE= …]:数据库的引擎设置,一般默认InnoDB

    [AUTO_INCREMENT=…]:自动增长的起始值设置

    [DEFAULT CHARSET=…]:数据库的默认字符集,例如utf8,utf8mb4

    列选项
    • NULLNOT NULL:表示一列是否允许为空,NULL表示可以为空,NOT NULL表示不可以为空,如果不指定,则默认为NULL。
    • DEFAULT default_value:为列指定默认值,默认值default_value必须为一个常量。
    • AUTO_INCREMENT:设置自增属性,只有整型列才能设置此属性。当插入NULL值或0到一个AUTO_INCREMENT列中时,列被设置为value+1,value是此前表中该列的最大值。AUTO_INCREMENT顺序从1开始。每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。
    • UNIQUE KEY | PRIMARY KEY:UNIQUE KEY和PRIMARY KEY都表示字段中的值是唯一的。PRIMARY KEY表示设置为主键,一个表只能定义一个主键,主键必须为NOT NULL。
    • COMMENT 'string':对于列的描述,string是描述的内容。
    表选项
    • PRIMARY KEY(col_name,…):定义多列索引
    • 定义索引和外键

    删表

    -- 基本语句
    DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
    

    [TEMPORARY]:删除的表为临时表

    [IF EXISTS]:避免出现表不存在无法删除的错误

    改表

    -- 基本语句
    ALTER TABLE table_name
    	ADD <列名> <数据类型> <列选项>
    				/*添加列*/
    	ALTER <列名> {SET DEFAULT default_value | DROP DEFAULT}
    				/*修改默认值*/
    	CHANGE <旧列名> <新列名> <数据类型> <列选项>
    				/*对列重命名*/
    	MODIFY <列名> <数据类型> <列选项>
    				/*修改列类型*/
    	DROP <列名>
    				/*删除列*/
    	RENAME <新表名>
    				/*重命名该表*/
    	...
    

    数据操作

    数据操纵

    数据插入

    -- 基本语句
    INSERT [INTO] tbl_name [(col_name,...)]
    	VALUES ({expr | DEFAULT},...),(...),...
    
    -- 如果可能存在冲突,如已有相同主键,可以采用
    REPLACE [INTO] tbl_name [(col_name,...)]
    	VALUES ({expr | DEFAULT},...),(...),...
    

    如果列清单和VALUES清单都为空,则INSERT会创建一行,每列都设置成默认值

    {expr | DEFAULT}:

    • expr:是一个常量、变量或一个表达式,也可以是空值NULL。当数据为字符型时要用单引号括起。
    • DEFAULT:指定为该列的默认值。

    数据修改

    -- 基本语句
    UPDATE tbl_name;
    	SET col_name1=expr1 [,col_name2=expr2 ..]
    	[WHERE where_definition]
    

    数据删除

    -- 基本语句
    DELETE FROM tbl_name
    	[WHERE where_definition]
    -- 清除所有数据
    TRUNCATE TABLE table_name
    

    数据查询

    SELECT
    	[ALL | DISTINCT ]
    	select_expr, ...
    	[FROM table1 [ , table2] …]	 								/*FROM子句*/
    	[WHERE where_definition]									/*WHERE子句*/
    	[GROUP BY {col_name | expr | position} [ASC | DESC], ...]
    					/*GROUP BY子句*/
    	[HAVING where_definition]									/*HAVING子句*/
    	[ORDER BY {col_name | expr | position}[ASC | DESC] , ...]
    					/*ORDER BY子句*/
    	[LIMIT {[offset,] row_count}]								/*LIMIT子句*/
    

    查询对象

    FROM KCB {INNER|[NATURAL] [LEFT|RIGHT] OUTER|CROSS} JOIN CJB
    	ON (KCB.课程号=CJB.课程号)
    -- INNER JOIN 内连接
    -- [LEFT|RIGHT] OUTER JOIN 左右外连接
    -- NATIONAL JOIN 自然连接,可以省略OUTER
    
    -- 交叉连接,进行笛卡儿积,MySQL中与INTER相同
    FROM KCB CROSS JOIN CJB
    

    查询条件

    比较运算
    运算对象

    除TEXT和BLOB外类型的表达式

    运算符

    =(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<=>(相等或都等于空)、<>(不等于)、!=(不等于)

    逻辑运算符
    运算对象

    BOOL型

    运算符

    AND OR NOT

    模式匹配
    运算对象

    char、varchar、text、datetime

    运算方式

    match可使用特殊符号"_"和"%":“%”代表0个或多个字符。“_”代表单个字符

    expression [ NOT ] LIKE match_expression
    
    正则表达式

    语法:

    expression [ NOT ][ REGEXP | RLIKE ] match_expression
    
    -- 例子
    select 'xxxyy' regexp '^xx' -- TRUE
    

    表达:

    特殊字符 含 义
    ^ 匹配字符串的开始部分
    $ 匹配字符串的结束部分
    . 匹配任何一个字符(包括回车和换行)
    * 匹配星号之前的0个或多个字符的任何序列
    + 匹配加号之前的1个或多个字符的任何序列
    ? 匹配问号之前0个或多个字符
    {n} 匹配括号前的内容出现n次的序列
    () 匹配括号里的内容
    [abc] 匹配方括号里出现的字符串abc
    [a-z] 匹配方括号里出现的a~z之间的一个字符
    [^a-z] 匹配方括号里出现的不在a~z之间的一个字符
    | 匹配符号左边或右边出现的字符串
    [[. .]] 匹配方括号里出现的符号(如空格、换行、括号、句号、冒号、加号、连字符等)
    [[:<:]和[[:>:]] 匹配一个单词的开始和结束
    [[: :] 匹配方括号里出现的字符中的任意一个字符
    范围比较

    语法:

    -- 位于二者之间
    expression [ NOT ] BETWEEN expression1 AND expression2
    
    -- 位于枚举中
    expression IN ( expression [,…n])
    
    空值比较

    语法:

    -- 判定是否为空
    expression IS [ NOT ] NULL
    

    列子查询

    IN嵌套查询
    -- subquery为子查询
    expression [ NOT ] IN ( subquery )
    
    比较子查询
    expression { < | <= | = | > | >= | != | <> } { ALL | SOME | ANY } ( subquery )
    

    ALL:指定表达式要与子查询结果集中的每个值进行比较,当表达式与每个值都满足比较的关系时,才返回TRUE

    SOME|ANY:只要与子查询结果集中的某个值满足比较的关系时,就返回TRUE

    存在子查询
    -- 结果有元组则为存在
    [ NOT ] EXISTS ( subquery )
    

    表子查询

    -- FROM后子查询
    FROM( SELECT ... ) AS tablename
    
    -- SELECT后子查询
    SELECT select_expr-select_expr(
    	SELECT ...
    ) AS tablename ...
    

    数据分组

    聚合函数

    配合使用:

    SELECT 
    [COUNT ({[ ALL | DISTINCT ] expression }|*)]
    [MAX / MIN ( [ ALL | DISTINCT ] expression)]
    [SUM / AVG ( [ ALL | DISTINCT ] expression)]
    ...
    GROUP BY {col_name | expr | position} [ASC | DESC], ...
    HAVING where_expr
    
    函 数 名 说 明
    COUNT 求组中项数,返回int类型整数
    MAX 求最大值
    MIN 求最小值
    SUM 返回表达式中所有值的和
    AVG 求组中值的平均值
    STD或STDDEV 返回给定表达式中所有值的标准差
    VARIANCE 返回给定表达式中所有值的方差
    GROUP_CONCAT 返回由属于一组的列值连接组合而成的结果
    BIT_AND 逻辑或
    BIT_OR 逻辑与
    BIT_XOR 逻辑异或

    排序

    ORDER BY {col_name | expr | position} [ASC | DESC] , ...
    

    ASC:升序,默认

    DESC:降序

    限制返回行数

    用于限制SELECT语句返回的行数

    LIMIT {[offset,] row_count }
    

    offset:开始行数,0为起点

    row_count:返回总行数

    视图操作

    创建视图

    CREATE  VIEW view_name [(column_list)]
    	AS select_statement
    

    view_name:视图名称

    column_list:视图列名,未明确时与表相同

    select_statement:用于建立视图的SELECT语句

    删除视图

    DROP VIEW [IF EXISTS] view_name [, view_name] ...
    

    查询视图

    与基本表相同

    编程基础

    常量

    • 字符串

    用单引号或双引号括起来的字符序列

    为了便于区分,在MySQL中推荐使用单引号表示字符串

    • 数值常量
    • 日期时间常量

    符合特殊格式的字符串,必须符合日期、时间标准

    • 布尔值

    true / false,SELECT中表示为'0'与'1'

    • 二进制常量

    前缀为“b”,后面紧跟一个“二进制”字符串

    • 十六进制常量

    [两种表示法之一]:前缀为大写字母“X”或小写字母“x”,后面紧跟一个“十六进制”字符串

    [两种表示法之二]:前缀为“0x”,后面紧跟一个“十六进制数”(不用引号)

    select hex('MySQL'); -- 字符串转换为十六进制数
    
    • NULL

    适用于各种字段类型,参与算术、比较及逻辑运算时,结果依然为NULL

    变量

    变量名大小写不敏感

    系统会话变量

    以@@开头的变量,无需定义直接使用

    用户会话变量

    以@开头,会话期间一直有效

    定义方式

    等号右边的值(包括字符集和字符序)决定了用户会话变量的数据类型(包括字符集和字符序)

    -- 使用set命令定义赋值
    set @user_variable1=expression1 [,@user_variable2= expression2 , …]
    
    -- [有输出]使用select命令定义赋值
    -- 注意,使用的是':=',以区别于比较运算符
    select @user_variable1:=expression1 [,user_variable2:= expression2 , …]
    
    -- [无输出]使用select into命令定义赋值
    select expression1[, expression2 , …] into @user_variable1 [,@user_variable2,…]
    

    局部变量

    不以@开头

    • 作为存储过程或者函数的参数,在整个存储过程或函数内中有效
    • 作用范围在BEGIN...END模块中,使用set或select为其赋值
    定义方式
    DECLARE var_name [, var_name] ... type [DEFAULT value]
    

    [DEFAULT value]:默认值,无则默认为NULL

    运算符

    算数运算符

    +(加)、-(减)、*(乘)、/(除)、%(求余)以及div(求商)

    比较运算符

    运算符 含义
    = 等于
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于
    <>、!= 不等于
    <=> 相等或都为空
    is null 是否为NULL值
    between...and... 是否在区间内
    in 是否在集合中
    like 模式匹配
    regexp 正则表达式模式匹配

    逻辑运算符

    运算符 含义
    not、! 逻辑非
    and、&& 逻辑与
    or、|| 逻辑或
    xor 逻辑异或

    位运算符

    对二进制数据进行操作(非二进制类型数会自动转换)

    运算符 运算规则
    & 按位与
    | 按位或
    ^ 按位异或
    ~ 按位取反
    >> 位右移
    << 位左移

    重置命令结束标记

    -- 示例
    DELIMITER $$
    SELECT * FROM US$$
    DELIMITER ;
    SELECT * FROM US;
    

    BEGIN...END

    用于包裹代码块

    BEGIN
    	[局部]变量的声明;
    	错误触发条件的声明;
    	游标的声明; 
    	错误处理程序的声明;
    	业务逻辑代码;
    END
    

    流程控制

    IF语句

    不要漏了;

    if 条件表达式1 then 语句块1;
    [elseif 条件表达式2  then语句块2] ...
    [else语句块n]
    end if;
    

    CASE语句

    无break

    case 表达式
      when value1 then  语句块1;
      when value2 then  语句块2;
      …
      else 语句块n;
    end case;
    

    循环语句

    -- while,表达式为真时循环
    [循环标签:]while 条件表达式 do
      循环体;
    end while [循环标签];
    
    -- 跳出循环
    leave 循环标签;
    
    -- repeat,表达式为假时循环
    [循环标签:]repeat 
    循环体;
    until 条件表达式
    end repeat [循环标签];
    
    -- loop,无条件循环
    [循环标签:] loop
    循环体;
    if 条件表达式 then 
      leave [循环标签]; 
    end if;
    end loop;
    

    MySQL函数

    数学函数

    -- 圆周率
    pi()
    -- 角度->弧度 弧度->角度
    radians(x) degrees(x)
    -- 三角函数
    sin(x) cos(x) tan(x) cot(x)
    asin(x) acos(x) atan(x)
    
    -- 指数函数 x^(-1/2) x^y e^x
    sqrt(x) pow/power(x,y) exp(x)
    -- 对数函数 loge log10
    log(x) log10(x)
    
    -- 近似值函数
    round(x) -- 离x最近的整数
    round(x,y) -- 离x最近的小数(小数点后保留y位)
    truncate(x,y) -- 小数点后保留y位的x(舍去)
    
    -- 随机函数
    rand()
    
    -- 进制转化
    bin(x) -- 转二进制
    oct(x) -- 转八进制
    hex(x) -- 转十六进制
    ascii(x) -- 字符的ASCII码
    char(x1,x2...) -- 将一串ASCII码转成字符串
    conv(x,c1,c2) -- 将c1进制转c2进制
    

    字符串函数

    -- 基本信息函数
    charset(x) -- 返回x的字符集
    collation(x) -- 返回x的字符序
    convert(x using charset) -- 返回x的charset字符集数据(注意x的字符集没有变化)
    
    -- 长度函数
    char_length(x) -- 获取字符串x的长度
    length(x) -- 获取字符串x的占用的字节数
    
    -- 加密函数
    -- 不可逆加密
    password(x) -- 返回41位的加密字符串
    md5(x) -- 返回32位的加密字符串
    -- 可逆加密,key为加密密钥
    -- 返回二进制数
    encode(x,key) decode(password, key)
    -- 返回128位二进制数
    aes_encrypt(x,key) aes_decrypt(password,key)
    
    -- 连接
    concat(x1,x2,….) -- 将x1、x2连接成一个新字符串
    concat_ws(x,x1,x2,….) -- 用x将x1、x2连接成新串
    
    -- 修剪
    -- 去空格  开头/结尾/开头与结尾
    ltrim(x) rtrim(x) trim(x)
    -- 从x2字符串的前缀或者(以及)后缀中去掉字符串x1
    trim([leading | both | trailing] x1 from x2)
    left(x,n) righ(x,n) -- 截取前/后n个字符
    upper(x) ucase(x) -- 返回所有大写
    lower(x) lcase(x) -- 返回所有小写
    lpad(x1,len,x2) -- x2填充到x1的开始处,使x1长len
    rpad(x1,len,x2) -- x2填充到x1的结尾处,使x1长len
    
    -- 操作
    -- 从x的第n个位置开始获取length长度的字符串
    substring(x,start,length)
    mid(x,start,length)
    -- 从字符串x2中获取x1的开始位置
    locate(x1,x2) position(x1 in x2) instr(x2,x1)
    -- x2为逗号分割的串,返回x1在第几个
    find_in_set(x1,x2)
    -- x1中从start位置开始、长为length的子串替换为x2
    insert(x1,start,length,x2)
    -- x3替换x1中所有出现的字符串x2
    replace(x1,x2,x3)
    
    -- 复制
    repeat(x,n) -- x的n次复制串
    space(n) -- 空格字符的n次复制
    
    -- 比较   大于~1,小于~-1,等于~0
    strcmp(x1,x2)
    
    -- 逆序
    reverse(x)
    

    数据类型转化函数

    -- 返回x转type结果
    convert(x,type) cast(x as type)
    unhex(x) -- 十六进制字符串转换为十六进制数
    

    条件控制函数

    if(condition,v1,v2) -- condition?v1:v2
    ifnull(v1,v2) -- v1 is null?v2:v1
    

    系统信息函数

    version() -- @@version,MySQL版本号
    connection_id() -- @@pseudo_thread_id,连接ID
    database() schema() -- 获取当前操作的数据库
    
    -- 获取通过哪一台登录主机、使用什么账户名成功连接MySQL服务器
    user() system_user() session_user()
    
    -- 该账户名允许通过哪些登录主机连接MySQL服务器
    current_user()
    

    日期和时间函数

    -- 返回值与时区的设置有关
    
    -- 服务器当前日期或时间函数
    curdate() current_date() -- 服务器当前日期
    curtime() current_time() -- 服务器当前时间
    -- 服务器当前日期和时间,允许传递一个整数(<=6)作为参数,从而获取更为精确的时间信息
    now() current_timestamp() localtime() sysdate()
    
    -- 服务器当前UNIX时间戳函数
    unix_timestamp() -- 服务器当前UNIX时间戳
    -- 将日期时间datetime以UNIX时间戳返回
    unix_timestamp(datetime)
    -- 将UNIX时间戳以日期时间格式返回
    from_unixtime(timestamp)
    
    -- [世界时间]服务器当前UTC日期和时间函数
    utc_date() -- 获取UTC日期
    utc_time() -- 获取UTC时间
    
    -- 获取日期或时间x的某一具体信息的函数
    year(x) month(x) dayofmonth(x) hour(x) minute(x) second(x) microsecond(x)
    -- type=[year,month,day,hour,minute,second, microsecond]
    extract(type from x)
    monthname(x) -- x的月份信息
    dayname(x) weekday(x) -- x的星期信息
    dayofweek(x) -- x是本星期的第几天,星期日为第一天
    quarter(x) -- x在本年是第几季度
    week(x) weekofyear(x) -- x在本年是第几个星期
    dayofyear(x) -- x在本年是第几天
    
    -- 时间和秒数之间的转换函数
    time_to_sec(x) -- x在当天的秒数
    sec_to_time(x) -- 当天的秒数x对应的时间
    
    -- 日期间隔、时间间隔函数
    to_days(x) -- x距离0000年1月1日的天数
    from_days(x) -- 从0000年1月1日开始n天后的日期
    datediff(x1,x2) -- x1与x2之间的相隔天数
    adddate(d,n) -- 起始日期d加上n天的日期
    subdate(d,n) -- 起始日期d减去n天的日期
    addtime(t,n) -- 起始时间t加上n秒的时间
    subtime(t,n) -- 起始时间t减去n秒的时间
    
    -- 指定日期date指定间隔的日期
    date_add(date,interval 间隔 间隔类型)
    date_add('2019-4-30',INTERVAL '2' day) -- 例子
    
    间隔类型 说明 格式
    microsecond 微秒 间隔的微秒数
    second 间隔的秒数
    minute 分钟 间隔的分钟数
    hour 小时 间隔小时数
    day 间隔天数
    week 星期 间隔星期数
    month 间隔月数
    quarter 季度 间隔季节数
    year 间隔年数
    second_microsecond 秒和微秒 秒.微秒
    minute_microsecond 分钟和微秒 分钟:秒.微秒
    minute_second 分钟和秒 分钟:秒
    hour_microsecond 小时和微秒 小时:分钟:秒.微秒
    hour_second 小时和秒 小时:分钟:秒
    hour_minute 小时和分钟 小时:分钟
    day_microsecond 日期和微秒 天 小时:分钟:秒.微秒
    day_second 日期和秒 天 小时:分钟:秒
    day_minute 日期和分钟 天 小时:分钟
    day_hour 日期和小时 天 小时
    year_month 年和月 年_月
    time_format(t,f) -- 表达式f的要求显示时间t
    
    格式 说明
    %H 小时(00...23)
    %k 小时(0...23)
    %h 小时(01...12)
    %(I) 小时(01...12)
    %(l) 小时(1...12)
    %i 分钟,数字(00...59)
    %r 时间,12小时(hh:mm:ss [AP]M)
    %T 时间,24小时(hh:mm:ss)
    %S 秒(00...59)
    %s 秒(00...59)
    %p [AP]M
    date_format(d,f) -- 按照表达式f显示日期和时间t
    
    格式 说明
    %W 星期名字(Sunday...Saturday)
    %D 有英语前缀的月份的日期(1st, 2nd,3rd等等)
    %Y 年,数字,4位
    %y 年,数字,2位
    %a 缩写的星期名字(Sun....Sat)
    %d 月份中的天数,数字(00...31)
    %e 月份中的天数,数字(0...31)
    %m 月,数字(01...12)
    %c 月,数字(1...12)
    %b 缩写的月份名字(Jan....Dec)
    %j 年中的天数(001...366)
    %w 一个星期中的天数(0=Sunday ...6=Saturday)
    %U 星期(0...52),这里星期天是星期的第一天
    %u 星期(0...52),这里星期一是星期的第一天
    %% 一个文字“%”

    其他常用函数

    -- 最后一次insert或update语句设置的自增字段值
    -- 用户自己指定非自动生成的,则返回0
    -- 若有多行只返回第一条记录的自增字段值
    -- 与表无关,只与最终值有关
    last_insert_id() -- @@last_insert_id的值一致
    
    inet_aton(ip) -- IP地址(字符串数据)转换为整数
    inet_ntoa(n) -- 整数转换为IP地址(字符串数据)
    
    -- 将表达式expression重复执行n次,返回结果为0
    benchmark(n,expression)
    
    uuid() -- 生成一个128位的通用唯一识别码UUID
    

    UUID码由5个段构成

    • 前3个段与服务器主机的时间有关(精确到微秒)
    • 第4段是随机数,当前的服务实例不会变化,除非重启
    • 第5段是通过网卡MAC地址转换得到

    数据库对象

    存储过程

    创建

    CREATE PROCEDURE sp_name ([[ IN | OUT | INOUT ] param_name type [,...]])
    	<routine_body>
    

    [ IN | OUT | INOUT ]:指定变量输入或返回

    <routine_body>:BEGIN...END代码块

    删除

    DROP PROCEDURE [IF EXISTS] sp_name
    

    调用

    CALL sp_name([param[,...]])
    

    存储函数

    • 不能拥有输出参数
    • 不能用CALL语句来调用
    • 必须包含一条RETURN语句

    创建

    CREATE FUNCTION sp_name ([参数[,...]])
    	RETURNS type
    begin
    	函数体;
    	return 语句;
    end;
    

    删除

    修改时先删除再创建即可

    DROP FUNCTION sp_name
    

    调用

    sp_name ([param[,...]])
    SELECT NAME_OF_STU('081102'); -- 例子
    

    维护

    -- 服务器级别
    show function status; -- 所有的自定义函数信息
    show function status like 模式; -- 模糊查询
    
    -- 数据库级别
    select name from mysql.proc where db = 'choose' and type = 'function' ;
    
    -- 函数详细信息查询
    show create function 函数名;
    
    -- 函数信息保存在information_schema.routines表中
    select * from information_schema.routines where routine_name='函数名'
    

    触发器

    CREATE
        [DEFINER = user]
        TRIGGER trigger_name
        trigger_time trigger_event
        ON tbl_name FOR EACH ROW
        [trigger_order]
        trigger_body
    
    -- 确定在触发激活时检查访问权限
    DEFINER = user
    -- 触发先后
    trigger_time: { BEFORE | AFTER }
    -- 操作名
    trigger_event: { INSERT | UPDATE | DELETE }
    -- 与其他触发器相对先后
    trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
    -- BEGIN...END函数体
    trigger_body
    

    NEW与OLD表

    内涵
    • 在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据
    • 在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据
    • 在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据
    赋值
    • OLD 是只读的
    • NEW 则可以在触发器中直接使用 SET 赋值,这样不会因使用UPDATE再次触发触发器,造成循环调用

    ©️ Copyrights.RSMX.GUILIN.2020-05-06

  • 相关阅读:
    Centos 7安装python3
    R贡献文件中文
    Sublime text 3 注册码激活码 版本号3143
    Create R NoteBook require updated versions of the following packages : knitr,rmarkdown.
    vim 的升级 安装 重装
    使用yum快速升级CentOS 6.5内核到 3.10.28
    Container With Most Water——LeetCode
    Majority Element II——LeetCode
    Summary Ranges —— LeetCode
    Contains Duplicate III —— LeetCode
  • 原文地址:https://www.cnblogs.com/rsmx/p/12837009.html
Copyright © 2011-2022 走看看