数据库入门

1 数据库基本概念

(1)数据库全称是一个数据库管理系统,本质是一个文件管理系统,可以看成是一个文件系统管理的软件;

(2)使用数据库的好处是可以提高数据的存储和查询的效率,相当于有人帮你管理这个数据,例如当你去一个随意摆放的仓库存储查找货物和去一个按照分类整齐排放的仓库存放和查找获取,这个效率就会差别很大。

(3)数据库的运用:一般是作为一台服务器的形式存在,用户通过网址来访问对应的数据库;

(4)常用的数据库:在java后端开发中,常用的数据库是mysql和Oracle数据库,前者在5.0及之前是免费的,后者是收费的。

(5)数据库的组成部分:对于用户来说,数据库的文件存放的结构组成是数据库和表,一个数据库管理系统包含多个数据库(注意:这里数据库不是数据库管理系统的简称,而是一种组织结构),一个数据库中包含多个表,一个表中包含多个记录,这个记录就是用户进行存储和读取的数据。数据库和表可以理解为数据的容器。

2 SQL语句

(1)SQL语句概念:全称为结构化查询语言(Structured Query Language),是专门用来和数据库通讯的语言,数据库通过SQL语句来识别访问用户需要进行的操作以及获取和返回相应的数据。

(2)SQL语句的组成分类

        sql语句根据功能的不同,对语句进行分类,分别为

       (1)DDL:(Data Definition Language)数据库定义语言:主要用来定义数据库的结构的,例如创建,修改,删除数据库或表,也就是在项目刚开始需要创建一个新的数据库时候,或则需要对数据库中的一些组织结构进行修改的时候才会使用;

                主要的关键字,create(创建),alter(修改),drop(删除);

       (2)DML:(Data Manipulation Language)数据库操作语句:主要用来对数据(也就是表中的记录)进行增加,删除,修改(注意是不包括查询的)的操作,这个语句使用的会比较经常,项目运行起来后,会经常涉及到数据的增删改,例如有一个用户注册了一个账号,就需要增加一条数据,用户对账号的信息进行修改,就需要修改数据库中的数据,这些都是经常的操作。

               主要的关键字:insert into(插入数据)  update(更新数据)  delete(删除数据)

       (3)DQL:(Data Query Language)数据库查询语言:主要用来对记录的查询,这个是使用最常用的操作,也是比较复杂的语句,因为数据的查询会涉及到各种条件,不同表之前的关联查询。

               主要的关键字:select(选择,也就是根据条件获取数据的意思)   

       (4)DCL:(Data Control Language)数据库控制语言:主要用来对数据库的用户管理,访问权限,事务等进行管理的语句,例如创建和删除访问用户,设置用户的访问权限(可以细化到表中的某个字段),设置事务是否自动提交等;

                主要的关键字:grant(分配权限)   revoke(撤销权限)

(3)几种常用的语句格式

       1)DDL语句

/*创建语句*/

create database 数据库名称;  -- 创建数据库

create table 表名称(字段名 类型  [键,约束] ,......)-- 创建表

/*删除语句*/

drop database 数据库名称  -- 删除数据库名称

drop table  表名称 -- 删除表(注意,如果该表被其他的表的外键指向,必须先删除存在指向的另一张表的键或表,才能删除该表)

/*修改语句*/

alter database 数据库名称  character set 字符集英文名称                              // 修改数据库的字符编码表

alter table 表名称  rename  to 新表名                                                              // 修改表名

alter table 表名称 character set 字符集名称                                                    // 修改表的字符编码,注意要和数据库的编码一样

alter table 表名称 change 旧字段名(列名)  新字段名(列名)  类型 [键或约束]  // 修改表的名称及类型

alter table 表名称  modify 字段名(列名)  类型 [键或约束]                                // 修改字段(列名)的类型

/*查看数据库和表的所有列表*/

show databases;                              //查看所有的数据库列表

show tables;                                     //查看所有的表的列表

show create table 表名;                 //查看建表语句

show create database 数据库名称   //查看创建数据库语句

desc 表名;                                     //显示表的结果信息,包括每个字段(列名)的名称,类型,键或约束     

    2)DML语句

/*插入语句*/

insert into 表名 (列名1,列名2,...)values(值1,值2,值3)

/*修改语句*/

update 表名 set 字段1=值1,...[where 条件]

/*删除语句*/

delete from 表名 [where 条件]

  3)DQL语句

select  要查询字段  from  表名 [where 条件]  [group by 字段名]  [order by 字段名]  查询

注意:后面的可选字段有写的话,必须按顺序写,实际就是把前面的执行结果后面的查询内容

3 数据库的事务

(1)事务的概念:事务是将多个SQL语句执行看成一个整体,这些语句要么都执行成功,要么都执行失败(事务的原子性);事务的产生是为了解决一些不能因为被打断而只执行一半的操作,例如银行转账操作,由账户A扣钱,账户B加钱操作组成,这两个步骤如果只执行一半就会出现问题;

(2)事务的四个基本特性

        1)原子性:组成事务的操作步骤要么都成功,要么都失败;

        2)一致性:事务操作前后,事务所操作的数据的总量保持不变,例如银行转账涉及A,B两个账户数据,这两个数据的总量保持不变;

        3)持久性:事务提交后,数据就会持久化保存到数据库中,这个也成为持久性;

        4)隔离性:同时存在多个事务的时候,不同事务之间需要隔离,例如事务A和事务B操作同一个数据,如果事务B操作了数据但未提交,事务A就应该读取的是之前的数据,而不是修改后的数据;

(3)事务的隔离性不同可能引发的问题

        1)脏读:存在多个事务,事务A读到事务B未提交的数据,这种情况不允许发生;

        2)不可重复读(虚读):在一个事务中,两次读取同一个数据,得到的值是不同的(自己没有修改,被其他事务修改);

        3)幻读:事务A修改了事务中的所有记录,事务B插入了一天记录,则事务A查询不到自己的修改;

(4)为了解决事务问题而产生的隔离级别

        1)读未提交:这种隔离级别最低,不同事务之间会读到未提交的数据,会发生所有的隔离性问题;

        2)读已提交(oracle默认隔离级别):只能读取到已经提交的数据,但是会产生虚读和幻读;

        3)可重复读(mysql默认隔离级别):保证同一事务中读到的数据一样,但是会产生幻读;

        4)串行化:最高隔离级别,同一时刻只能执行一个事务,可以解决一切问题,但是因为同一时刻只能执行一个事务,效率低;

4 数据库的多表

(1)表与表关系

    1)一对一关系 :不常用因为可以联合在一张表写,在将一张表分为活性和惰性两个部分来提高效率时使用该方式。

    2)一对多表关系:这种关系最常用,例如学生和班级关系,商品和商品分类的关系等

    3)多对多的关系:多对多关系,在两张表任意一张表的一条记录,都可以在另外一张表找到多条与之对应记录,需要借助中间表的方式,将多对多关系转换为一对多关系。

5 数据库的多表查询

(1)数据库的多表查询就是要查询的内容分布在多张表中,需要将这些表联合起来查找;多表的查询的原理是可以理解为通过笛卡尔积将两张表的所有排列组合列出现,然后通过限定条件筛选出需要的记录。

(2)多表查询的方式

        1)内连接查询:只能显示符合刷选条件的记录

              1)隐式内连接:select 字段... from 表1,表2...where 限定条件;

              2)显示内连接:select 字段...from 表1 join on 表2  on 限定条件;

              两种连接方式主要是格式差别,还有就是隐式可以连接多张表,显示只能两张表;

        2)外连接查询:可以显示指定表的所有记录(即使不满足连接条件),另一张表显示的只能是满足条件的记录

              1)左外连接:select 字段... from  表1 left join  表2 on 限定条件;

              2)右外连接:select 字段...from 表1 right join 表2  on 限定条件;

              两种方式的主要是格式不同,作用一样,left 指定的是表1显示全,right指定的是表2显示全。  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值