一、数据库
1、为什么需要数据库
随着程序的功能越来越复杂,需要操作的数量也就是越来越大,管理数据就成了很大的问题,
因为读写文件并接续数据需要大量重复的操作,并且从大量数据的增、删、改、查需要非常复杂的逻辑和耗时的操作
如果程序都各自实现读写数据的代码,一方面效率低、容易出错,另一个方面是每个程序访问数据的接口、业务逻辑不同,所以代码可以复用
2、什么是数据库
数据库可以看作是电子化的文件柜(存储电子文件的场所),用户可以对文件中的数据方便的增加、修改、删除、查询等操作
注意:我们使用的是数据管理的软件,而不是存储数据的仓库
3、数据库的类型
层次型数据库
它的数据模型是上下级的层次关系,从数据结构上来看就是一颗树
网状型数据库
层次型数据库不足以表达更复杂的数据关系因此有了网状型数据库,他的数据模型是数据节点与节点之间链接起来,从数据结构上来看就是图形结构
关系型数据库
前两者普通人难以理解才有了关系型数据库
可以把关系型数据库看作是二维表格,他的数据模式就相当于Excel表
随着时间的推移和市场竞争,关系型获得了最终份额
4、目前主流的关系数据库
商用数据库:Oracle Oceanbase DB2 SQL Server
开源数据库:MySQL MariaDB
桌面数据库:微软的Access为代表,适合桌面应用程序使用
嵌入式数据库:SQLite为代表,适合手机、平板、可穿戴设备使用
内存数据库:Redis,数据存储在内存中,所以访问速度非常快
二、SQL语言介绍
1、什么是SQL
SQL是结构化查询语言的缩写,用于访问和操作数据库,既可以查询数据库中的输一局,也可以添加、删除、修改数据库中的数据,还可以对数据库进行管理和维护
SQL语言被ANSI组织定义出一套统一的标准,也就是说有的数据库都支持SQL语言,但是不同的数据库对SQL语言进行了不同程度的扩展(我们把他们称为"方言"),
也就是说如果只使用标准的SQL语言,理论上所有的数据库都可以使用,但如果使用了某个数据库的扩展,换到其他数据库上可能就不行了
注意:大小写不影响
2、SQL中的语句分类
数据控制语句:用于权限的授予和回收
数据定义语句:用于建立修改、修改、删除数据库对象
数据操作语句:用于改变数据库中的数据
数据查询语句:用于查询所需要的数据 select
事物控制语句:用来维护数据一致性的语句
3、SQL的数据类型
数值型
TINYINT 1字节 相当于有符号的char类型
SMALLINT 2字节
MEDIUNMINT 3字节
INT 4字节
BIGINT 8字节
FLOAT 4字节
DOUBLE 8字节
DECIMAL(M,D) M范围 D小数点右侧的数目不得超过M
字符型
CHAR(n) n:0~255 定长字符串,相当于定义char str[n]
VARCHAR(n) n:0~65535 变长字符串,n表示最多存储n个字节
日期型
DATA 3字节 日期值 格式YYYY-MM-DD
TIME 3字节 时间值或持续时间 格式HH:MM:SS
YEAR 1字节 年份值 格式:YYYY
DATETIME 8字节 混合日期和时间值 格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP 4字节 时间戳 格式:YYYYMMDD HHMMSS
三、访问数据库
1、本地访问
mysql -uuser -ppwd 会暴露密码
mysql -uuser -p 可以隐藏的输入密码
2、远程访问
先通过ssh、telnet命令远程登录搭建数据库,然后再登录数据库
前提是服务器要开启ssh或telnet远程登录的功能
3、客户端访问
MySQL Workbench
四、数据库控制语句
创建数据库:create database nameDB;
创建用户并授权 :grant all(select,insert,update,delete) privileges on nameDB.* to user@'*' identified by 'pwd';
刷新: flush privileges;
选择数据库:user nameDB;
注意:每次用户登录后,第一个操作就要选择要使用的数据库
五、数据定义语句
1、创建表
create table 表名(字段名 字段类型,...);
注意:语句不区分大小写,但表名、字段名区分大小写
show tables;查看当前数据库中的所有表格
desc 表名;查看表结构
练习1:创建一个教师表
2、修改表
修改表名:rename teble 旧表名 to 新表名
增加列:alter table 表名 add(字段名 字段类型)
注意:只能添加到末尾,不能插入到中间
删除列:alter table 表名 drop 字段名
修改列:alter table 表名 modify 字段名 字段类型
3、删除表
删除表数据,保留表结构 truncate 表名
六、表设计的三范式
1、无重复的列
如果列的数据重复,可以拆分成两张表
2、属性完全依赖于主键
如果一个字段与主键没有依赖关系,可能会导致其他字段的值重复
3、属性不能传递依赖于主键
如果一个字段与主键仅有依赖关系,也可能会导致其他字段的值重复
七、数据操作语言
1、插入数据
插入一条完整的数据
insert into student values(字段值);
字段值要与表结构一一对应
插入一条不完整的数据
insert into student(字段名) values(字段值);
字段名要与字段值要一一对应
2、修改表数据
修改所有行:update 表名 set 字段名 = 数据;
修改部分行:update 表名 set 字段名 = 数据 where 条件;
3、删除表数据
删除所有数据:delete from 表名;
功能相当于 truncate 表名;
删除符合条件的数据:delete from 表名 where 条件;
八、数据查询语言
select 字段1,字段2,... from 表名;
注意:*是SQL中的通配符,代表所有字段
九、事务控制语言
什么是事物控制:在操作数据时需要让有关系的数据进行联动(一起有效、无效)
注意:数据定义语句立即有效,不需要事物控制,只有数据操作语句才需要事物控制
1、commit接交
一个用户向表中插入一条记录,其他用户并不能立即查询到,只有执行了提交命令存才确定有效
注意:MySQL数据库默认设置了自动提交
查看是否开启自动提交:show variables like 'autocommit'
autocommit OFF
set session autocommit=0|1; //开启或关闭当前链接的自动提交 临时的
set global autocommit=0|1; //所有用户的
2、rollback回滚
当使用数据操作语句时 对数据进行更改时,如果还没有使用commit,那么可以使用rollback撤销,把数据还原成修改前的样子
3、savepoint保存点
默认情况下执行rollback语句,数据会回到最近一次的commit,设置保存点可以在rollback时返回到指定的位置
操作1
savepoint sp1;
rollback to savepoint sp1;
假设依次设置了1,2,3个savepoint如果先rollback到第一个,是无法再rollback到第二第三个的