《SQL必知必会》读书笔记
SQL 必知必会
了解SQl
数据库基础
数据库
数据库是一个以某种有组织的方式存储的数据集合
数据库应用软件被称为数据库管理系统(即DBMS)
表
表是一种结构化的文件,可用来存储某种特定类型的数据,数据库中的每个表都有一个名字来标识自己。这个名字是唯一的。
列和数据类型
表由列组成。列存储表中某部分的信息。
每个列都有相应的数据类型,限制该列种存储的数据
数据类型:定义列中可以存储哪些数据种类
行
表中的一个记录
主键
表中的每一行都应该至少有一列可以唯一标识自己
表中的任何列都可以作为主键,只要满足一下特点:
- 任意两行都不具有相同的主键值
- 每一行都必须有一个主键值,且主键不能为空
- 主键列中的值不允许修改或者更新
- 主键值不能重用(如果某行从列表中删除,它的主键不能赋给以后的新行)
什么是SQL
SQL是结构化查询语言 Structured Query Language
一种专门来与数据库沟通的语言
检索数据
检索单个列
如:select prod_name from Products
检索多个列
select pord_id,prod_name,prod_price from Procucts
列名之间用逗号分开
检索所有列
select * form Products
给定通配符(*)则返回表中所有的列
建议:一般而言,除非你确实需要表中的每一个列,否则最好别使用*通配符。虽然通配符能让你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能
检索不同的值
select distinct vend_id from Products
distinct 关键字,指示数据库只返回不同的值,它必须放在列名的前面
限制结果
SqlServer
select top 5 prod_name from Products
MySql、MariaDB、PostgreSQL、SQLite
select prod_name from Products limit 5 offset 5
返回特定数量的行
排序检索数据
关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序由任何意义。
子句:SQL语句由子句构成
Order by
子句的位置:
在指定一条Order by 子句是,应该保证它是select语句中最后一条子句
过滤数据
使用where
子句,指定搜索条件进行过滤。
where 子句必须在表面之后给出
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
!< | 不小于 |
> | 大于 |
>= | 大于等于 |
!> | 不大于 |
BETWEEN | 在制定的两个值之间 |
IS NULL | 为空值 |
高级数据过滤
使用 and
来联结多个查询条件(且)
使用 or
来来联结多个查询条件(或)
用通配符进行过滤
创建计算字段
使用函数进行处理数据
汇总数据
分组数据
使用子查询
联结表
创建高级联结表
组合查询
插入数据
更新和删除数据
创建和操纵表
使用试图
使用存储过程
为什么要使用存储过程
- 通过把处理封装在一个易用的单元中,可以简化复杂的操作
- 由于不要求反复建立一系列的处理步骤,因而保证了数据的一致性
- 简化了对变动的管理
- 存储过程通常以编译过的形式存储,所以DBMS处理命令所需的工作量比价少,提高了性能
总而言之,就是 简单、安全、高性能
但是缺点就是不同DBMS中的存储过程语法有所不同,所以编写可移植的存储过程几乎是不可能的
管理事务处理
使用事务处理,通过确保成批的SQL 操作要么完全执行,要么完全不执行,来维护数据库的完整性
术语介绍:
- 事务:指一组SQL语句
- 回退:指撤销指定SQL语句的过程
- 提交:指将未存储的SQL语句结果写入数据库表
- 保留点:指事物处理中设置的临时占位符,可以对它发布回退
事务中的开始和结束
begin transaction
commit transaction
回退
rollback
使用保留点
save transaction delete1
rollback transaction delete1