结构化查询语言(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…
去重查询:
Select distinct 列名 from table
Group by 列名称
判空查询:
Is null 判断造成索引失效
分页:
每页显示pageSize条记录
第pageNo页:limit (pageNo - 1) * pageSize , pageSize
体系结构已在,读《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; -- 调用存储过程
是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件触发
触发器常用于加强数据的完整性约束和业务规则等
实现一个触发器:在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,'男');
默认这个字段值什么都没有,所以要添加一个初始化的数据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等技术内容,点击立即学习:服务器课程