Mysql数据库介绍
一、Mysql概述
1、介绍
数据库(Database)就是按照数据结构来组织,存储和管理数据的仓库 专业的数据库是专门对数据进行创建,访问,管理,搜索等操作的软件,比起我们自己用文件读写的方 式对象数据进行管理更加的方便,快速,安全
2、Mysql数据库介绍的优点
- 对数据进行持久化的保存
- 方便数据的存储和查询,速度快,安全,方便
- 可以处理并发访问
- 更加安全的权限管理访问机制
3、SQL语言模块介绍
- DDL(定义)
- DML(操作)
- DQL(查询)
- DCL(控制)
4、常用存储引擎
Mysql中用的最多的的储存引擎是MyISAM和InnoDB,两者之间有一定的区别。
- MyISAM
- 不支持事务
- 支持表级锁
- 没有任何索引和主键的表存在
- 保存有表的总行数,如果select count() from table;会直接取出出该值
- 执行大量的SELECT,MyISAM更优
- 不支持外键
- 效率上要优于InnoDB,小型应用可以考虑使用MyISAM
- InnoDB
- 支持事务
- 支持行级锁(但是行级锁依赖于主键)
- 会自动生成一个6字节的主键
- 没有保存表的总行数 (只能遍历)
- 执行大量的INSERT、UPDATE、DELETE,InnoDB更优
- 支持外键
- 在并发很多的情况下,可以考虑使用InnoDB
注意:关于Mysql中的字符编码,utf8mb3:阉割过的utf8字符集,只使用1~3个字节表示字符,MySQL中utf-8是这个,utf8mb4:正宗的utf8字符集,使用1~4个字节表示字符。
二、Mysql数据库基本操作
1、Mysql中的数据类型和运算符
Mysql数据库中的数据类型和运算符与Java中的数据类型大多是一样的,只需要多注意以下几个常用的不同的数据类型即可。
常用字符串数据类型
char //定长串:
vcarchar //变长串
Text //变长文本类型存储
常用数值类型
decimal(5, 2) //表示数值总共5位,小数占2位
float //单精度浮点值
tinyint //1字节(8位) 0-255。-128,127
int 4字节。 //-21亿,21亿。0-42亿
常用日期和时间类型
Date //范围:1000-01-01--9999-12-31 格式:YYYY-MM-DD
time //范围:00:00:00--23:59:59 格式:HH:MM:SS
datetime //8字节1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
2、字段约束
- unsigned 无符号(给数值类型使用,表示为正数,不写可以表示正负数都可以)
- 字段类型后面加括号限制宽度 例如:int(10)
- not null 不能为空,在操作数据库时如果输入该字段的数据为NULL ,就会报错
- default 设置默认值
- primary key主键不能为空,且唯一,一般和自动递增一起配合使用
- auto_increment 定义列为自增属性,一般用于主键,数值会自动加1
- unique 唯一索引(数据不能重复:用户名)可以增加查询速度,但会降低插入和更新速度
3、库操作
show databases; //查看数据库
create database; //创建数据库
default charset=utf8mb4; //库名
drop database 库名; //删除数据库
use 库名; //打开数据库
4、表操作
show tables; //查看表
create table 表名(字段名1 类型,字段名2 类型)engine=innodb default charset=utf8; //创建表
create table if not exists 表名(字段1 类型,字段2 类型); //创建表
drop table 表名; //删除表
desc 表名; //表结构
show create table users; //查看建标语句
alter table 表名 action (add、drop、change|modify、rename as、auto_increment、engine) //修改表结构
5、数据操作(增删改查)
插入
insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
insert into 表名(字段1,字段2,字段3) values(a值1,a值2,a值3),(b值1,b 值2,b值3);
查询
select * from 表名;
select 字段1,字段2,字段3 from 表名;
select * from 表名 where 字段=某个值;
修改
update 表名 set 字段=某个值 where 条件;
update 表名 set 字段1=值1,字段 2=值2 where 条件;
update 表名 set 字段=字段+值 where 条件;
删除
delete from 表名 where 字段=某个值;
5、统计函数(聚合函数)
max() //最大值
min() //最小值
count() //统计数据量
sum() //总和
avg() //平均数
例:
select max(age),min(age),sum(age),avg(age) from users;
select count(*) from users;
6、常用子句
-
like子句(用于模糊搜索)
'%a%'; //包含a '%a'; //以a结尾 'a%'; //以a开头 '_a'; //a前空了一格,空几格就几个下划线
例:
select * from users where name like ‘%五’;
-
Group BY子句
根据指定字段对表格进行分类
例:
select sex,count() from users group by sex;
select classid,sex,count() as num from users group by classid,sex;
-
Having 子句
having时在分组聚合计算后,类似于where。
例:
select classid,count(*) as num from users group by classid having num >=5;
-
Order by 排序
根据指定字段对表中数据进行排序 Asc //升序,默认 Desc //降序
例:
select * from users order by age,id; //先按照age进行排序,age相 同情况下,按照id进行排序
select * from users order by age desc; //从大到小
-
Limit 数据分页
limit n //提取n条数据, limit m,n //跳过m跳数据,提取n条数据
例:
select * from users limit 4,3; //跳过前4条数据,再取3条数据
7、常用函数
文本处理函数
Left() //返回串左边字符
Right() //返回串右边字符
Length() //返回串的长度
Locate() //找出串的一个子串
SubString() //返回子串字符
LTrim() //去掉串左边的空格
RTrim() //去掉串右边的空格
Lower() //将串转换成小写
Upper() //将串转换成大写
Concat() //拼接字符串
日期和时间处理函数
Now() //返回当前的日期和时间
AddTime() //增加一个时间
CurDate() //返回当前日期
CurTime() //返回当前时间
Date() //返回日期时间的日期部分
Time() //返回日期时间的时间部分
DateDiff() //计算两个日期之差
Year() //返回一个日期的年份部分
Month() //返回一个日期的月份部分
Day() //返回一个日期的天数部分
DayOfWeek() //返回星期几
Hour() //返回一个时间的小时部分
Minute() //返回一个时间的分钟部分
Second() //返回一个时间的秒部分
Date_Add() //高度灵活的日期运算函数
Date_Format() //返回格式化的日期或时间串
整数处理函数
Abs() //返回一个数的绝对值
Cos() //返回一个数的余弦值
Sin() //返回一个数的正弦值
Tan() //返回一个数的正切值
Exp() //返回一个数的指数值
Mod() //返回一个数的余数值
Pi() //返回一个圆周率
Rand() //返回一个随机数
Sqrt() //返回一个平方根
三、Mysql数据库高级操作
在学习高级操作之前,我们首先要了解数据库中的表关系的相关知识,主要有一下三种关系:
一对一:一个表中的一个标签对应另一个表中的一个标签,且只能对应一个标签。
一对多:一个表中的一个标签对应另一个表中的多个标签,且关系并不双向。
多对对:一个表中的一个标签对应另一个表中的多个标签,且关系是双向的。
注:如果一个标签是主键,则在另一个表中的对应标签是外键。
在了解表关系后就可以更好的学习高级操作中的子查询与表联结
1、子查询
利⽤⼦查询进⾏过滤,把where⼦句转换为⼦查询, 子查询可以理解为由两个sql基本语句组成,但是这种查询方法效率较低
例:
select cust_name,cust_contact
from customers
where cust_id in (select order_num
from orderitems
where prod_id = ‘TNT2’);
2、表联结
表联结中三种联结方式
-
内部联结:列出所有要查询的标签和包含这些信息的表,使用“,”或使用“join on” 隔开。
例:
select prod_name,vend_name,prod_price,quantity
from orderitems,products,vendors
where products.vend_id = vendors.vend_id
and orderitems.prod_id = products.prod_id
and order_num = 20005;
或
select vend_name,prod_name,prod_price
from vendors
inner join products on vendors.vend_id = products.vend_id; -
自联结:表自己与自己进行联结,原理与内部联结相似,但是要为表重命名两个名字用来区分。
例:
select p1.prod_id,p1.prod_name
from products as p1,products as p2
where p1.vend_id = p2.vend_id and p2.prod_id = ‘DTNTR’; -
外部联结:原理和内部联结相似,不过会以其中一张表为基准,使用“left join on” 或“right join on”隔开。
例:
select customers.cust_id,orders.order_num
from customers
left join orders on customers.cust_id = orders.cust_id;
四、事务
1、事务介绍
数据库的事务(Transaction)是由⼀系列对系统中数据进⾏访问与更新的操作所组成的⼀个程序执⾏逻辑单元。当数据库操作进入事务状态时,只要当前事务并没有进行提交,那么就不会对原来的数据库信息进行修改,这种状态很好的处理了遇到突发事件,造成的对数据库数据的误操作。
2、事务的ACID特性(四大特性)
-
原⼦性(Atomicity)
事务是⼀个不可分割的整体,就像化学中学过的原⼦,是物质构成的基本单位。事务⼀次执⾏过程中,只全部执⾏成功和全部执⾏失败两种状态。
-
⼀致性(Consistency)
⼀个事务在执⾏之前和执⾏之后,数据库都必须处以⼀致性状态。从A账户转账到B账户,不可能因为A账户扣了钱,⽽B账户没有加钱。
-
隔离性(Isolation)
不同的事务并发操作相同的数据时,每个事务都有各⾃完整的数据空间。
-
持久性(Duration)
事务⼀旦提交后,数据库中的数据必须被永久的保存下来。
3、事务的语法
start transaction;/ begin; //开始执行事务
commit; //确认提交事务,使得当前的修改确认
rollback; //使得当前的修改被放弃