什么空间可以做网站百度推广后台登录
- 作者: 五速梦信息网
- 时间: 2026年04月20日 09:19
当前位置: 首页 > news >正文
什么空间可以做网站,百度推广后台登录,上海好的网站建设公司,网络seo排名day53 MySQL 触发器 创建触发器#xff1a;#xff08;before #xff1a; 前置触发器、after #xff1a;后置触发器#xff09; 语法#xff1a; delimiter xx 指定分隔符xxcreate trigger 触发器名 [before | after] 触发事件 on 表名 for each row 执行语句begin…day53 MySQL 触发器 创建触发器before 前置触发器、after 后置触发器 语法 delimiter xx 指定分隔符xxcreate trigger 触发器名 [before | after] 触发事件 on 表名 for each row 执行语句begin多条执行语句end 加上 “结束符xx”delimiter ;还原分隔符未注意 由某个事件去触发某个操作这些事件有insert、update、delete语句 new.字段当前写法可以获得添加语句字段对应的值 old.字段当前写法可以获得删除语句字段对应的值 在MySQL中DELIMITER是用来指定SQL语句中的语句分隔符的关键字。 默认情况下分号;作为语句的结束符号。 当在一个语句中包含了多个语句比如在创建存储过程、触发器等时如果直接使用分号作为结束符号会导致MySQL将整个语句作为一个语句进行解析从而导致语法错误。所以才有指定分隔符又还原这个操作。 补充解释 数据添加后相应的表数据更新的需求每次用更新语句十分不便 psupdate class set sum sum1 where id 1; 所以使用触发器 begin end类似于{}有点像函数多个语句时使用单个可不用 对于前触发器例如删除操作要在删除之前才拿得到如果删除之后再操作不行因为数据已经被删了 在第一次操作之后再进行重复操作不会再触发触发器 # 触发器# 创建场景 —————————————————————————-# 创建学科表并添加数据 CREATE TABLE course(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),sum INT(3) DEFAULT 0 ) INSERT INTO course(name) VALUES(JavaEE); INSERT INTO course(name) VALUES(Python); INSERT INTO course(name) VALUES(HTML);# 创建班级表并添加数据 CREATE TABLE class(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),sum INT(3) DEFAULT 0 ) INSERT INTO class(name) VALUES(01JavaEE); INSERT INTO class(name) VALUES(02JavaEE); INSERT INTO class(name) VALUES(01Python); INSERT INTO class(name) VALUES(02Python); INSERT INTO class(name) VALUES(01HTML); INSERT INTO class(name) VALUES(02HTML);# 创建学生表 CREATE TABLE student(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),class_id INT(3),course_id INT(3) )# ——————————————————————————————————# 需求添加学生并更新班级表和学科表的数据# 创建触发器添加学生数据之后就会触发班级表和学科表更新数据的操作
delimiter xx - 设置SQL命令的结束符
trigger - 触发器
after - 后置触发
delimiter xx
create trigger tri01 after insert on student for each rowBEGINUPDATE class SET sumsum1 WHERE idnew.class_id;UPDATE course SET sumsum1 WHERE idnew.course_id;END xx
delimiter ;INSERT INTO student(name,class_id,course_id) VALUES(小王,1,1);
INSERT INTO student(name,class_id,course_id) VALUES(小马,1,1);
INSERT INTO student(name,class_id,course_id) VALUES(小李,2,1);
INSERT INTO student(name,class_id,course_id) VALUES(麻生希,3,2);
INSERT INTO student(name,class_id,course_id) VALUES(椎名空,4,2);# ——————————————————————————————————# 需求删除学生并更新班级表和学科表的数据# 创建触发器删除学生数据之前就会触发班级表和学科表更新数据的操作
delimiter xx
create trigger tri02 before delete on student for each rowBEGINUPDATE class SET sumsum-1 WHERE idold.class_id;UPDATE course SET sumsum-1 WHERE idold.course_id;END xx
delimiter ;DELETE FROM student WHERE id 2;# ——————————————————————————————————# 删除触发器
DROP TRIGGER tri01;
DROP TRIGGER tri02;
运行分析
存储过程
理解类似java里面的方法但无返回值有返回参数
参数列表输入类型的参数 – in输出类型的参数 – out输入输出类型的参数 – inout注意 对于传入的参数要与本身参数区分识别不了会报错 返回参数需要用到传出参数into传出参数 调用存储过程有两种 一种直接调用查就会直接打印结果另一种拿到参数变量值不会立即打印结果还可以进行再查操作 对于传入参数与传出参数类型相同可用传入传出参数相当于简写 # 存储过程
注意类似于Java里的方法# 创建场景 —————————————————————————-# 创建学生表并添加数据
CREATE TABLE student(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),sex VARCHAR(32),age INT(3),salary FLOAT(8,2),course VARCHAR(32) ) INSERT INTO student(name,sex,age,salary,course) VALUES(奇男子,男,23,10000,Java); INSERT INTO student(name,sex,age,salary,course) VALUES(小兰,男,20,12000,Java); INSERT INTO student(name,sex,age,salary,course) VALUES(奇女子,女,19,17000,Java); INSERT INTO student(name,sex,age,salary,course) VALUES(刘德华,男,21,15000,Java); INSERT INTO student(name,sex,age,salary,course) VALUES(马德华,男,27,10000,Java); INSERT INTO student(name,sex,age,salary,course) VALUES(霍建华,男,19,12000,Java); INSERT INTO student(name,sex,age,salary,course) VALUES(华晨宇,男,32,5000,Python); INSERT INTO student(name,sex,age,salary,course) VALUES(黄日华,男,45,4000,Python); INSERT INTO student(name,sex,age,salary,course) VALUES(任达华,男,28,7000,Python); INSERT INTO student(name,sex,age,salary,course) VALUES(周华健,男,30,8000,Python); INSERT INTO student(name,sex,age,salary,course) VALUES(欧阳震华,男,23,12000,Python); INSERT INTO student(name,sex,age,salary,course) VALUES(麻生希,女,30,7000,HTML); INSERT INTO student(name,sex,age,salary,course) VALUES(椎名空,女,23,6000,HTML); INSERT INTO student(name,sex,age,salary,course) VALUES(水野朝阳,女,28,8000,HTML);# —————————————————————————-# 最简单的存储过程
查询学生表和用户表里的数据
delimiter xx CREATE PROCEDURE pro01()BEGINSELECT * FROM student;SELECT * FROM user;END xx delimiter ;# 调用存储过程 CALL pro01();# —————————————————————————-# SQL中存储过程 与 Java中方法 的区别
Java方法中的参数指的是外界传入到方法内部的数据返回值指定是方法结束后返回的具体数据
SQL存储过程中没有返回值但是有返回参数# 存储过程中参数的分类
# in - 传入参数 # out - 传出参数 # inout - 传入传出参数# —————————————————————————-# 需求创建存储过程传入学生id查询出学生姓名 delimiter xx CREATE PROCEDURE pro02(IN s_id INT(3))BEGINSELECT name FROM student WHERE ids_id;END xx delimiter ;# 调用存储过程 CALL pro02(2);# —————————————————————————-# 需求创建存储过程传入学生id返回学生姓名 delimiter xx CREATE PROCEDURE pro03(IN s_id INT(3),OUT s_name VARCHAR(32))BEGINSELECT name INTO s_name FROM student WHERE ids_id;END xx delimiter ;# 调用存储过程 CALL pro03(3,s_name); SELECT s_name;# —————————————————————————-# 需求创建存储过程传入学生id返回学生年龄 delimiter xx CREATE PROCEDURE pro04(INOUT param INT(3))BEGINSELECT age INTO param FROM student WHERE idparam;END xx delimiter ;# 调用存储过程 SET param 3; CALL pro04(param); SELECT param;# —————————————————————————-# 删除存储过程 DROP PROCEDURE pro01; DROP PROCEDURE pro02; DROP PROCEDURE pro03; DROP PROCEDURE pro04;运行分析 调用存储过程方式1 调用存储过程方式2 函数 预定义函数 数学函数 绝对值函数select abs(字段) from 表 ps:此函数指的是求绝对值 平方根函数select sqrt(9) ps:得到的值为3 求余函数select mod(10,3) / select 10%3 ps:得到的值为1 随机函数select rand() ps:得到的值为0~1 幂运算函数select pow(10,2) ps:10的2次方 字符串函数 长度函数select length(‘内容’) 合并函数select concat(’hello’,’world’) 截取字符串函数select substring(字段,start,end) 日期/时间函数 当前日期函数curdate() 当前时间函数curtime() 当前日期时间函数now() 年函数year(now()) 月函数month(now()) 日函数dayofmonth(now()) 时函数hour(now()) 分函数minute(now()) 秒函数second(now()) 时间格式函数年月日时分秒‘别名 注意 当然对于在Navbbicat的 函数里可以看到是否删除 # 预定义函数
理解MySQL给我们提供的函数
注意函数必须有返回值# 数学类函数 —————————————————–
SELECT ABS(-100);# 求绝对值
SELECT sqrt(9); # 求平方根
SELECT mod(10,3);# 求余数
SELECT pow(2,3); # 求次方
SELECT rand();# 求随机值# 字符串类函数 —————————————————–SELECT CONCAT(用良心做教育,做真实的自己);# 拼接字符串
SELECT SUBSTR(用良心做教育,2,2);# 截取字符串(目标字符串第几个字符截取长度)
SELECT length(用良心做教育);# 获取长度字节# 日期时间类函数 —————————————————–SELECT now();# 获取当前日期时间
SELECT YEAR(NOW());# 获取年
SELECT MONTH(NOW());# 获取月
SELECT DAYOFMONTH(NOW());# 获取日
SELECT HOUR(NOW());# 获取时
SELECT MINUTE(NOW());# 获取分
SELECT SECOND(NOW());# 获取秒
SELECT DATE_FORMAT(NOW(),%Y年%m月%d日 %H时%i分%s秒);
运行分析
自定义函数 返回值需要一个变量去接查到的数据再返回此变量 对于5.7版本5.5版本之类不加关键字就可运行8.0必须加不然运行即报错 加了关键字DETERMINISTIC就认为它是一个函数 语法
create function 函数名([参数列表]) returns 数据类型 DETERMINISTIC
beginsql语句;return 值;
end# 自定义函数
注意MySQL的函数必须有返回值# 需求创建一个函数传入学生id返回学生信息delimiter xx
CREATE FUNCTION fun(s_id INT(3)) RETURNS VARCHAR(32) DETERMINISTICBEGINDECLARE s_name VARCHAR(32);SELECT name INTO s_name FROM student WHERE ids_id;RETURN s_name;END xx
delimiter ;# 调用函数SELECT fun(3);# 删除函数
DROP function fun;运行分析
范式 第一范式理解为所有数据集中在一张表存在多种问题 第二范式简单分表解决数据冗余但一对多种关系出现多个数据不可避免 第三范式再细化分表第一范式存在问题全部解决但表就会很多需要多表联合查询效率很低 反范式就是把第三范式细化的多张表又重新融合一些表就会出现数据冗余这里就考验程序员的能力考虑融合 空间换时间对于现在的空间大可不考虑就得考虑时间 对于第三范式和反范式之间选择根据具体项目而定哪些该融合哪些该细分就简单说用的少的表可以融合到其他表 下面以表的形式理解 第一范式 第二范式 第三范式 反范式 小结 触发器存储过程函数范式
- 上一篇: 什么静态网站容易做福州周边网络营销公司
- 下一篇: 什么软件网站好圆梦科技专业网站建设
相关文章
-
什么静态网站容易做福州周边网络营销公司
什么静态网站容易做福州周边网络营销公司
- 技术栈
- 2026年04月20日
-
什么叫展示型网站做食品网站需要什么条件
什么叫展示型网站做食品网站需要什么条件
- 技术栈
- 2026年04月20日
-
什么叫网站外链杭州咨询网站公司
什么叫网站外链杭州咨询网站公司
- 技术栈
- 2026年04月20日
-
什么软件网站好圆梦科技专业网站建设
什么软件网站好圆梦科技专业网站建设
- 技术栈
- 2026年04月20日
-
什么时候网站建设wordpress 文章代码块
什么时候网站建设wordpress 文章代码块
- 技术栈
- 2026年04月20日
-
什么是wordpress网站vi设计整套
什么是wordpress网站vi设计整套
- 技术栈
- 2026年04月20日
