关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

【收藏级】MySQL 100条命令,基本操作的所有内容(常看常新)(四)

发布时间:2023-06-30 18:00:42
11.1.2、用户变量 用户变量指用户自己定义的变量,可以给用户变量分配值。可以使用set 和 select语句定义赋值(不赋值默认为空值),其中 select 语句还可以查看所赋的值。 变量作用范围:当前连接的会话范围(如果断开当前的连接,那么之前定义的变量将无法访问)。 定义用户变量的形式:以’@‘开始,如:“@var_name”,从而区分用户变量和表中列名。可以使用 '=',':=' 操作符赋值。如果使用 select 语句必须使用 ':=' 操作符赋值 语法: set @var_name = value1 [ , @var_name = value2]; set @var_name := value1 [ , @var_name := value2]; set语句 mysql> set @test=123; Query OK, 0 rows affected (0.00 sec) mysql> select @test; +-------+ | @test | +-------+ | 123 | +-------+ 1 row in set (0.00 sec) mysql> set @var1=1,@var2=2; Query OK, 0 rows affected (0.00 sec) mysql> select @var1,@var2; +-------+-------+ | @var1 | @var2 | +-------+-------+ | 1 | 2 | +-------+-------+ 1 row in set (0.00 sec) select语句 mysql> select @var:=1,@var:=2; +---------+---------+ | @var:=1 | @var:=2 | +---------+---------+ | 1 | 2 | +---------+---------+ 1 row in set, 2 warnings (0.00 sec) mysql> select @var,@var; +------+------+ | @var | @var | +------+------+ | 2 | 2 | +------+------+ 1 row in set (0.00 sec) 11.2、SQL系统函数 11.2.1、条件判断函数 if函数 语法:if(expr1,expr2,expr3) 如果表达式的结果是true(布尔类型),则返回expr2的值,否则返回expr3的值。 case结构 case case_expr when when_value then statement_list [ when when_value then statement_list ]... end case case_expr:条件判断表达式,决定哪一个 when 被执行。 when_value:表示表达式可能的值,如果某个 when_value 值与case_expr表达式值结果相同,则执行对应 then 关键字后的 statement_list 语句。 11.2.2、数学函数 常用的一种函数。主要用于处理数字,包括整型、浮点数等 数学函数 11.2.3、字符串函数 字符串函数是非常常用的一种函数。针对数据类型 数据的处理。 字符串函数 11.2.4、日期函数 日期函数 11.2.5、聚合函数 一般作用在指定字段上。 聚合函数 11.3、自定义函数 在函数种可以使用 if、case、loop、repeat、while、for语句,这部分内容请自行了解。 11.3.1、创建函数 语法: create function func_name(func_parameter) returns type body create function:创建函数的关键字 func_name:函数名称 func_parameter:函数参数列表,形式为 (param_nae type),如:(num1 int,num2 int) type:函数放回值类型,如:int、char(50)等。 body一般格式为,如下: begin retrun(select 查询语句); end delimiter 定界符: MySQL默认定界符是分号 ‘;’ 。使用 delimiter 语句,可以修改默认定界符 例子: 创建一个函数,查询某读者的年龄。 delimiter $ create function func_reader_age2(name char(50)) returns int begin return(select year(curdate())-year(reader_birthday) from t_reader where reader_name=name); end $ delimiter ; select func_reader_age2("肖华"); 11.3.2、删除函数 drop function function_name; 十二、触发器 触发器自动执行时,以响应特定事件的存储程序。(特定事件:对数据库表的增删改) 触发器可以被定义在INSERT、UPDATE、DELETE语句更改数据表之前或之后被自动执行。 12.1、创建触发器 语法:CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW [trigger_order] trigger_body 参数详解: trigger_time:中发器执行的时间:AFTER(之后) | BEFORE(之前) trigger_event:触发器触发的事件:DELETE | UPDATE | INSERT FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器 table_name:表元触发事件操作表的名字 trigger_body:创建触发器的SQL语句 (1)创建Insert触发器,每向t_student中插入一条记录后,则向t_log表中插入该表的表名t_student和插入的时间。 CREATE TABLE t_log (logno int AUTO_INCREMENT primary key, tname varchar(20), logtime datetime); SELECT * FROM t_log; create trigger tr_insert after insert on t_student for each row insert into t_log (tname,logtime) VALUES('t_student',now()); insert into t_student(stu_id) values("0123456789"); select * from t_student; select * from t_log; (2)创建一个t_score1表的插入触发器,当向t_score1表中插入一条数据时,在t_student1自动添加一条stu_id对应的记录,在t_cours1e中自动添加一条course_id对应的记录。 create table t_score1 like t_score; insert into t_score1 select * from t_score; //创建触发器 create trigger t_insert3 after insert on t_score1 for each row begin insert into t_student1(stu_id) VALUES("1123456789") ; insert into t_course1(course_id) VALUES("12345678") ; end //验证 insert into t_score1(score_id,stu_id,course_id) values(1018,1631607101,16610001); select * from t_student1 where stu_id = "1123456789"; select * from t_course1 where course_id = "12345678"; 12.2、查看触发器 show triggers; 12.3、删除触发器 drop trigger trigger_name; 12.4、NEW和OLD的应用 MySQL中定义了NEW和OLD两个临时表,用来保存触发器修改之前和之后的表,方便引用。 12.4.1、流程图 12.4.2、案例 (1)修改表t_student1中一个学生的生日时,向另一个表t_backup(需新建)表中插入修改前的生日与修改后的生日。 //创建触发器 create trigger t_updata1 after update on t_student1 for each row begin insert into t_backup(old_birthday,new_birthday) values(old.stu_birthday,new.stu_birthday); end //测试 update t_student1 set stu_birthday="1999-12-12" where stu_name="王伟"; (2)删除t_major1表中的一条记录时,将删除的这条记录插入到另一个表(需新建表)中。 //创建触发器 create trigger t_delete1 after delete on t_major1 for each row begin insert into t_major_back values(old.major_id,old.major_name); end //测试 delete from t_major1 where major_name="计算机应用技术"; 十三、 事务 语法: START TRANSACTION | BEGIN DML语句 COMMIT 或 ROLLBACK START TRANSACTION、BEGIN:可以开始一项新的事务 DML语句:insert、delete、update COMMIT、ROLLBACK:定义提交、回滚事务 13.1、介绍 事务是一个完整的业务逻辑,是一个工作单元。如: 假设转账,从A账户向B账户中转账10000。 将A账户的钱减去10000 (update语句)将B账户的钱加上10000 (update语句) 这就是一个完整的业务逻辑。这两个updata语句要求必须同时成功或同时失败。 只有DML语句才会有事务这一说,其它语句和事务无关! ! ! insert、delete、update 只有以上的三个语句和事务有关系,其它都没有关系。 所以,事务就是批量的DML语句同时成功,或者同时失败 13.2、提交、回滚事务 提交事务:commit; 语句 ,代表事务结束。 回滚事务:rollback; 语句(回滚永远都是只能回滚到上一次的提交点!) 13.3、事务包括4个特性 A(原子性): 说明事务是最小的工作单元。不可再分。 C(一致性): 所有事务要求,在同一个事务当中,所有操作必须同时成功,或者同时失败,以保证数据的一致性。 I(隔离性)重点: A事务和B事务之间具有一定的隔离。 教室A和教室B之间有一道墙,这道墙就是隔离性。 A事务在操作一张表的时候,另一个事务B也操作这张表会那样? ? ? D(持久性): 事务最终结束的一个保障。事务提交,就相当于将没有保存到硬盘上的数据保存到硬盘上!

/template/Home/leiyu/PC/Static