1.数据库概念
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。用于存储和管理数据的仓库。
2.关系型数据库
oracle、MySQL、sql-server,数据有关联,通常用表来存储
3.非关系数据库
redis、MongoDB、Hbase,数据无关联,通常采用键值对key-value的方式来存储,效率高
4.MySQL
1)启动命令
mysql -u 用户名 -p 密码
2)数据类型
常用的数据类型:int整数类型 double(5,2)小数类型 varchar字符串 date日期,只包含年月日
datetime日期类型 包含年月日时分秒 timestamp:时间戳类型 包含年月日时分秒
3)DDL,操作数据库、表
4.3.1操作数据库:crud
1.c(create):创建 create database if not exists 数据库名; 2.r(retrieve):查询 show databases;查询数据库 //查询所有的数据库 show create database 数据库名//查看数据库的编码 3.u(update):修改 alter database 数据库名称 character set 字符集名称; 4.d(delete):删除 drop database 数据库名称 //判断数据库是否存在 drop database if exists 数据库名称 5.使用数据库 select database(); //查询当前正在使用的数据库 use 数据库 //使用数据库
4.3.2操作表:crud
1.c(create):创建 create table 表名( 列名1 数据类型1, 列名2 数据类型2, ... 列名n 数据类型n ); 2.r(retrieve):查询 show tables;//查询所有的表 desc 表名;//查询表结构 3.u(update):修改 alter table 表名 rename to 新的表名;//修改表名 alter table 表名 character set utf8;//修改表的字符编码 alter table 表名 add 列名 数据类型;//添加一列 alter table 表名 change 列名 新列名 新数据类型;//修改列名称、类型 alter table 表名 modify 列名 新数据类型;//修改类型 alter table 表名 drop 列名;//删除列 4.d(delete):删除 drop table 表名; drop table if exists 表名;
4)DML:增删改表中的数据
1.添加数据 insert into 表名(列名1,列名2) values(值1,值2); //列名要和值一一对应 //如果表名后面不写列名,默认给所有的列添加值 2.删除数据 delete from 表名 where 条件; //如果不加条件则删除表中的所有记录 truncate table 表名;//先删除表,再创建一张一样的表 3.修改数据 update 表名 set 列名1=值1,列名2=值2...where 条件; //如果不加条件,则会修改表中的所有数据
5)DQL:查询表中的数据
select * from 表名;//查询表中的所有数据 1.语法 select 字段列表 from 表明列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定 2.基础查询 1.多个字段的查询 select 字段1,字段2 from 表名; distinct //去除重复的结果集 计算列: 一般可以使用四则运算计算一些列的值。 ifnull(表达式1,表达式2)//表达式1:哪个字段需要判断是否为null,表达式2:如果该字段为null后的替换值 as //起别名 as也可以省略 3.条件查询 1.where子句后跟条件 2.运算符 <,>,>=,<=,=,!=,<> between...and //在什么范围内 in(a,b,c) null不能使用=来判断,要用is来判断 like:模糊查询 占位符:_:单个任意字符 %:任意多个字符 3.排序查询 order by 子句 升序:asc 降序:desc 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件 4.聚合函数 将一列数据作为一个整体,进行纵向计算。 1.count:计算个数 2.max:计算最大值 3.min:计算最小值 4.sum:计算和 5.avg:计算平均值 5.分组查询 1.语法:group by 分组字段; 2.注意: 1.分组之后查询的字段:分组字段、聚合函数 2.where和having的区别? where在分组之前进行限定,如果不满足条件,则不参与分组,having在分组之后进行限定,如果不满足结果,则不会被查询出来 having后面可以使用聚合函数where不行 6.分页查询 limit 开始的索引,要显示的数目 公式:开始的索引=(当前的页码-1)*每页显示的条数 limit 是一个mysql“方言”
6)约束
4.6.1概念:对表中的数据进行限定,保证数据的正确性,有效性,完整性
1.主键约束 primary key alter table 表名 drop primary key; 自动增长: auto_increment alter table 表名 modify 列名 数据类型 auto_increment;
2.非空约束 创建表时添加not null 创建表完后添加非空约束 alter table 表名 modify 列名 数据类型 not null;
3.唯一约束 unique值不能重复 删除唯一约束 alter table 表名 drop index 列名;
4.外键约束 让表与表产生关系,从而保证数据的正确性 constraint外键名称 foreign key (外键列名称) references 主表名称(主表列名称) 删除外键: alter table 表名 drop foreign key 外键名; 添加外键: alter table 表名 add constraint外键名称 foreign key (外键列名称) references 主表名称(主表列名称) 级联更新:on update cascade 级联删除:on delete cascade
5.数据库范式
1.第一范式(1NF):每一列都是不可分割的原子数据项
2.第二范式(2NF):在1NF基础上,消除对非主属性对主码的部分函数依赖
函数依赖:A-->B,如果通过A的属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A
完全函数依赖:A-->B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值
部分函数依赖:A-->B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中的某一些值即可
传递函数依赖:A-->B,B-->C,如果通过A的属性(属性组)的值,可以确定唯一B属性的值,如果通过B的属性(属性组)的值,可以确定唯一C属性的值,则称C传递函数依赖于A
码:如果在一张表中,一个属性或属性组,被其他属性所完全依赖,则称这个属性(属性组)为该码的表
3.第三范式(3NF):在2NF基础上,消除传递函数依赖
6.数据库的备份和还原
备份:mysqldump -u root -proot 数据库名称 > 保存的路径
还原:登录数据库->创建数据库->使用数据库->执行文件 source 文件路径
7.多表查询
1.内连接查询 1.隐式内连接:使用where条件消除无用数据 2.显式内连接 语法:select 字段列表 from 表名1 [inner] join 表名2 on 条件 2.外连接查询 1.左外连接: 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件 查询的是左表所有数据以及其交集部分 2.右外连接: 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件 查询的是右表所有数据以及其交集部分 3.子查询 查询中嵌套查询 1.子查询结果是单行单列的 子查询可以作为条件,使用运算符去判断,运算符:> >= < <= = 2.子查询结果是多行单列的 子查询可以作为条件,使用运算符in去判断 3.子查询结果是多行多列的 子查询可以作为一张虚拟表
8.数据库事务
1)事务的基本介绍
1.概念
如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
2.操作
1.开启事务:start transaction
2.回滚:rollback
3.提交:commit
3.MySQL数据库事务默认自动提交
select @@autocommit;//1代表自动提交0代表手动提交
修改默认的提交方式:set @@autocommit=0;
2)事务的四大特征
1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。
2.持久性:当事务提交或回滚后,数据库会持久化的保存数据
3.隔离性:多个事务之间,相互独立。
4.一致性:事务操作前后,数据总量不变
3)事务的隔离级别
多个事务之间隔离,相互独立的。
9.DCL管理用户
1)管理用户
1.添加用户 create user '用户名'@'主机名' identified by '密码'; 2.修改用户密码 update user set password = password('新密码') where user='用户名'; set password for '用户名'@'主机名'=password('新密码'); 3.查询用户 user mysql; select * from user; 4.删除用户 drop user '用户名'@'主机名';
2)授权
1.查询权限 show grants for '用户名'@'主机名'; 2.授予权限 grant 权限列表 on 数据库.表名 to '用户名'@'主机名'; all *.* 3.撤销权限 revoke 权限列表 on 数据库.表名 from '用户名'@'主机名';