一、数据库简介
1.1 DB、DBMS、SQL的关系?
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软 件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。 用户通过数据库管理系统访问数据库中的数据。
SQL(结构化查询语言)(Structured Query Language):是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。
DBMS负责执行SQL,通过执行SQL来操作DB中的数据。
1.2 常见数据库管理系统
Oracle、MySQL、DB2、MS Server....
1.3 三大范式 三大规范
1.无重复的列
2.数据库表中的每个实例或行必须可以被唯一地区分
3.一个数据库表中不包含已在其它表中已包含的非主关键字信息
二、SQL语言
2.1 语句分类
*DQL(Data Query Language): 数据查询语言 select
DML(Data Manipulation Language):数据操作语言,增create删delete改update
DCL(Data Control Language)::数据控制语言,用来定义访问权限和安全级别
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等
TCL------事务控制语言
2.2 一些注意事项
查询语句书写顺序:select – from- where- groupby- having- order by-limit
查询语句执行顺序:from - where -group by -having - select - order by-limit
mysql中,字符串类型和日期类型都要用单引号括起来
sql语句以;结尾
mysql中的关键字不区分大小写
分组函数avg()等自动忽略null
where后不允许执行分组函数
group by某个字段,前面select只能跟groub by的那个字段和分组函数
having和group by是成对出现的,不允许单独使用having
目前的条件执行语法尽量使用99版的:
select 列名 from 表1 join 表2 on 表1.列名=表2.列名 where......
三表联查的话,就在where前再来个join 表3 on 表1或表2.列名=表3.列名......
92版的语法:select 列名 from 表1,表2,表3 where 表1.列名=表2.列名 and 表1/表2.列名=表3.列名
虽然简洁,但是不如99版的结构清晰,易读
导入数据库的方法 sourse 然后直接拖sql文件doc中
三、数据库优化
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫 描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。
3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则引擎将放弃使用索引而进行全表扫描。
4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致 引擎放弃使用索引而进行全表扫描,如: 可以这样查询: 5.in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3 很多时候用 exists 代替 in 是一个好的选择