1.表:table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强
一个表包括行和列 行:被称为数据/记录(data) 列:被称为字段(column)
每一个字段应该包括哪些属性? 字段名 数据类型 相关的约束
2.SQL语句怎么分类?
DQL:(数据查询语言) 查询语句,凡是select语句都是DQL
DML:(数据操作语言) insert delete update,对表当中的数据进行增删改
DDL: (数据定义语言) create drop alter 对表结构的增删改
TCL: (事务控制语言) commit 提交事务 , rollback 回滚事务
DCL:(数据控制语言) grant 授权 revoke 撤销权限等
3.导入数据
第一步: 登录mysql数据库管理系统 mysql -uroot -p123456
第二步:查看有哪些数据库 show databases;(这个不是SQL语句,属于MySQL的命令)
第三步:创建属于我们自己的数据库 create database bjpowernode; (这个不是SQL语句,属于MySQL的命令)
第四步:使用bjpowernode数据 use bjpowernode; (这个不是SQL语句,属于MySQL的命令)
第五步:查看当前使用的数据库中有哪些表? show tables;
第六步:初始化数据 source D:\MySql\数据库学习\例子文件\bjpowernode.sql
第七步:查看表结构 desc ;
第八步:删除数据库 drop database bjpowernode;
4.查看当前使用的数据库、这个数据库系统的版本
查看创建表语句 show create table emp;
5.简单查询(DQL)
语法格式: select 字段名1,字段名2,字段名3 form 表名;
给查询结果的列重命名: select ename,sal*12 as yearsal from emp; (as可以省略) 里面有中文用单引号
6.条件查询
select 字段,字段 from 表名 where 条件; 执行顺序:先from 再where 最后select
between and 除了可以使用在数字方面外,还可以运用在字符串方面
模糊查询like: 掌握两个特殊的符号,一个%:代表任意多个字符,一个是_代表任意一个字符
\_:表示一个普通的下划线
7.数据排序 select ename,sal from emp order by sal;(默认升序)
asc:表示升序 desc:表示降序
select ename,sal from emp order by sal desc,ename asc; (前面的字段起到主导作用)
8.分组函数(多行处理函数)自动忽略NULL:select sum(comm) from emp;
count:计数 sum:求和 avg:平均值 max:最大值 min:最小值
求总和
重点1:所有数据都是只要有NULL参与的运算结果一定是NULL
重点2:语法规则:分组函数不可直接使用在where字句中 -因为group by 一般和分组函数一起使用,group by 是在where执行之后才会执行
重点3:count(*):统计总记录条数 count(某个字段):统计某个字段中不为NULL的数据数
ifnull(可能为空的数据,当作处理的对象) : 空处理函数
select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;
9.group by:按照某个字段或者某些字段进行分组 select job,max(sal) from emp group by job;
having:是对分组之后的数据进行再次过滤
9.查询结果集的去重: select distinct job from emp; distinct前面不能写其他字段 distinct写在最前面表示后面字段联合去重
---------------------------------------------------------------------------------------------------------------------------------
10.连接查询
根据语法出现的年代来划分: SQL92(DBA) SQL99(比较新的语法)
根据表的连接方式划分:内连接:等值连接 非等值连接 自连接 外连接:左外连接 右外连接
在表的连接查询方面有一种现象:笛卡尔积现象
避免笛卡尔积现象:加条件进行过滤(不能提高效率) 只是显示的是有效记录
10.1 内连接之等值连接:最大特点:条件是等量关系 (A join B no 连接条件)
10.2 内连接之非等值连接: 最大特点:条件是非等量关系
select e.ename,e.sal ,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
10.3 内连接之自连接: 最大特点:一张表看做两张表,自己连自己
select a.ename as '员工',b.ename as '领导' from emp a join eam b no a.mgr=b.empno;
10.4 外连接: 主表的数据无条件的全部查询出来
10.5 三张表进行连接:select e.ename,d.dname,s.grade from emp e join dept d on e.deptno=d.deptno join salgrade s on e.sal between s.losal and s.hisal;
11.union(可以将查询结果集相加)
---------------------------------------------------------------------------------------------------------------------------------
12.******(重点中的重点,分页查询全靠它)
12.1(limit是mysql特有的,(oracle中有一个相同的机制,叫做rownum)
12.2 limit取结果集中的部分数据,这是他的作用
12.3 语法机制: limit startIndex,length startIndex表示起始位置 length表示取几个
select ename,sal from emp order by sal desc limit 0,5;
=========================================================================
13.1.创建表 建表语句的语法格式:
create table 表名(
字段名1 数据类型,
字段名2 数据类型
);
auto_increment:自增
13.2 insert 语句插入数据 语法格式: insert into 表名(字段名1,字段名2,字段名3) values(值1,值2,值3)(字段可以省略不写) 删除表:drop table if exists 表名;
13.3 表的复制 语法: creat table 表名 as select语句; (将查询结果当作表创建出来)
13.4.修改数据 语法格式: update 表名 set 字段名1=值1,字段名2=值2 where 条件;
注意:没有条件整张表数据全部更新
13.5 删除数据 语法格式 : delete from 表名 where 条件; 注意:没有条件整张表数据全部更新
怎么删除大表 (重点): truncate table 表名; 表被截断,不可回滚,永久删除
=========================================================================
14.约束(Constraint):非空约束(not null) 唯一约束(unique) 主键约束(primary key) :自增:auto_increment 外键约束(foreign key) 检查约束(check) 注意Oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。
=========================================================================
15.存储引擎
=========================================================================
16.事务:一个事务是一个完整的业务逻辑单元,不可再分。需要多条DML语句完成
16.1 事务的特性(ACID):原子性 一致性 隔离性 持久性、
16.2 关于事务之间的隔离性:有四个级别
第一级别:读未提交(read uncommitted):对方事务还没有提交,我们当前事务可以读取到对方未提交的数据,读未提交存在脏读(Dirty Read)现象:表示读到了脏的数据;
第二级别:读已提交(read committed):对方事务提交之后的数据我方可以读取到。存在的问题:不可重复读;解决了脏读现象。
第三级别:可重复读(repeatable read)这种隔离级别解决了:不可重复读问题; 存在的问题:读取到的数据是幻象。
第四级别:序列化读/串行化读(serializable) 解决了所有问题,但是效率低,需要事务排队
oracle默认:读已提交 mysql默认:可重复读
16.3 演示事务
*****mysql执行完一条DML语句后 自动提交。
使用 start transaction,关闭自动提交,代表事务开启;
savepoint 名字:表示一个保存点
设置事务的全局隔离级别:set global transaction isolation level read uncommitted;
查看事务的全局隔离级别: select @@global.tx isolation
=========================================================================
17.索引 :底层采用的数据结构:B+TRRE
查看mysql语句的执行计划:
怎么创建索引对象:create insert 索引名称 on 表名(字段名);
怎么删除索引对象:drop index 索引名称 on 表名;
=========================================================================
18.视图:站在不同的角度去看到数据
18.1创建视图:create view myview as select empno,ename from emp (只有DQL语句才能以视图方式创建出来)
18.2 删除视图:drop view myview;
18.3对视图进行增删改查,会影响到原表数据
19.DBA
=========================================================================
20.1 .数据库设计三范式:设计表的数据,按照这个三范式设计的表不会出现数据冗余
20.2. 第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分
20.3 第二范式:所有建立在第一范式基础上非主键字段完全依赖主键,不能产生部分依赖
(多对多? 三张表,关系表两个外键)
20.4第三范式,建立在第二范式的基础上,所有非主键字段直接依赖主键,不能产生传递依赖
(一对多? 两张表,多的表加外键)
20.5 一对一设计: 两张方案:1.主键共享 2.外键唯一