数据库学习

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.外键唯一

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值