1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > SQL语句 存储过程 触发器

SQL语句 存储过程 触发器

时间:2024-01-29 09:11:11

相关推荐

SQL语句 存储过程 触发器

文章目录

SQL语句的分类SQL语句需要注意的点MySQL体系结构数据库设计三范式和反范式范式一:范式二:范式三:反范式:存储过程触发器

SQL语句的分类

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数

据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL是关系数据

库系统的标准语言。

并且SQL可以分为:

DQL:

数据查询语言(凡是带有select关键字的都是查询语句)

select…

DML:

数据操作语言(凡是对表当中的数据进行增删改的都是DML)

insert delete update

insert 增 delete 删 update 改

这个主要是操作表中的数据data。

DDL:

数据定义语言

凡是带有create、drop、alter的都是DDL。

DDL主要操作的是表的结构。不是表中的数据。

create:新建,等同于增 drop:删除 alter:修改

这个增删改和DML不同,这个主要是对表结构进行操作。

TCL:

是事务控制语言

包括:

事务提交:commit;

事务回滚:rollback;

DCL:

是数据控制语言。

例如:授权grant、撤销权限revoke…

SQL语句需要注意的点

去重查询:

Select distinct 列名 from table

Group by 列名称

判空查询:

Is null 判断造成索引失效

分页:

每页显示pageSize条记录

第pageNo页:limit (pageNo - 1) * pageSize , pageSize

MySQL体系结构

体系结构已在,读《MySQL是怎样运行的》笔录中总结,不在总结

数据库设计三范式和反范式

范式一:

确保每列保持原子性;数据库表中的所有字段都是不可分解的原子值;必须有主键

例如:某表中有一个地址字段,如果经常需要访问地址字段中的城市属性,则需要将该字段拆分为

多个字段,省份、城市、详细地址等;

范式二:

确保表中的每列都和主键相关,而不能只与主键的某一部分相关(组合索引);要求所有非主键字段必须完全依赖主键,不要产生部分依赖。

范式三:

确保每列都和主键直接相关,而不是间接相关;减少数据冗余;要求所有非主键字典必须直接依赖主键,不要产生传递依赖。

反范式:

范式可以避免数据冗余,减少数据库的空间,减小维护数据完整性的麻烦;但是采用数据库范式化设计,可能导致数据库业务涉及的表变多,并且造成更多的联表查询,将导致整个系统的性能降低;因此处于性能考虑,可能需要进行反范式设计;比如重复数据较少,并且经常被查询的

面试的时候问的三范式的时候可以把下面这句话也回答上:

数据库设计三范式是理论上的。实践和理论有的时候有偏差。最终的目的都是为了满足客户的需求,有的时候会拿冗余换执行速度。因为在sql当中,表和表之间连接次数越多,效率越低。(笛卡尔积)

有的时候可能会存在冗余,但是为了减少表的连接次数,这样做也是合理的,并且对于开发人员来说,sql语句的编写难度也会降低。

接下来在讲述下本人认为不是特别熟悉的内容:

存储过程

包含一系列SQL语句的集合,完成一个复杂的功能,存储过程可以被反复使用,执行效率高存储功能上类似于编程里面封装的函数

delimiter $$ -- 将原来";"这个定界符替换为"$$"CREATE PROCEDURE show_goods()BEGINUPDATE goods SET goods_number=goods_number+1;SELECT * FROM goods;END $$delimiter ; -- 存储过程定义完了之后恢复原来的定界符";"CALL show_goods; -- 调用存储过程

触发器

是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件触发

触发器常用于加强数据的完整性约束和业务规则等

实现一个触发器:在student表里面插入一条记录的时候在student_total表里面的total字段加1。

CREATE TABLE student_total(total INT);SELECT * FROM student_total;DELIMITER $$CREATE TRIGGER student_insert_trigeerAFTER INSERT ON student FOR RACH ROWBEGINUPDATE student_total SET total=total+1;END $$DELIMTER;INSERT INTO student(`name`,age,gender) VALUES('xx',20,'男');

默认这个字段值什么都没有,所以要添加一个初始化的数据0;

student表每插入一条数据就加1。

删除触发器

DROP TRIGGER IF EXISTS student_insert_trigger;

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,

分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,

fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,

TCP/IP,协程,DPDK等技术内容,点击立即学习:服务器课程

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。