• SQL语句,存储过程,触发器



    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()
    BEGIN
       UPDATE goods SET goods_number=goods_number+1;
       SELECT * FROM goods;
    END $$
    delimiter ; -- 存储过程定义完了之后恢复原来的定界符";"
    
    CALL show_goods; -- 调用存储过程
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    触发器

    是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件触发
    触发器常用于加强数据的完整性约束和业务规则等

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

    CREATE TABLE student_total(
    		total INT
    	);
    	SELECT * FROM student_total;
    DELIMITER $$
    CREATE TRIGGER student_insert_trigeer
    AFTER INSERT ON student FOR RACH ROW
    BEGIN
    	UPDATE student_total SET total=total+1;
    END $$
    DELIMTER;
    
    INSERT INTO student(`name`,age,gender) VALUES('xx'20'男');
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    默认这个字段值什么都没有,所以要添加一个初始化的数据0;
    student表每插入一条数据就加1。

    删除触发器

    DROP TRIGGER IF EXISTS student_insert_trigger;
    
    • 1
  • 相关阅读:
    网络安全、夺旗赛(CTF)技能汇总
    html和css中图片加载与渲染的规则是什么?
    Mac通过brew安装PostgreSQL保姆级实践步骤
    铁路设备屡遭破坏!RFID电子锁实现铁路防护网破坏实时报警管理
    STM32解析航模遥控器的PPM信号
    基于C#+WPF编写的调用讯飞星火大模型工具
    Java资产管理
    本科生学深度学习-Attention机制
    ubuntu16.04搭建fabric1.4
    低能量电子束曝光技术
  • 原文地址:https://blog.csdn.net/weixin_52259848/article/details/126166238