目录
一.本文焦点:
二.数据库常用数据类型
三.对数据库操作
四.对数据库中的表操作
五.条件表达
六. 表查询操作进阶
1.多表连接查询
1)交叉连接查询
2)内连接(取两表交集)
3)外连接
4)自连接
2.多表联合查询
3.子查询
七. 约束
1.not null
2. unique
3.primary key
4.default
编辑 5. foreign key
八.索引
1.创建索引
2.查看索引
3.删除索引
九.事务
事务的特性
事务中的问题
1.脏读
2.不可重复读
3.幻读
事务隔离级别:
一.本文焦点:
通过MySQL数据库自带客户端对数据库的操作及相关拓展
使用MySQL版本:5.7.27.0
二.数据库常用数据类型
整型浮点型
字符型
日期和时间类型
如上可见:timestamp大小为4字节到2038年存储数据就满了,所以到时有很多程序系统可能会出Bug小编提醒你到时一定要注意,特别是坐飞机之类的。
三.对数据库操作
增:
create database (if not exists)数据库名 charsetutf8;
if not exists 的使用防止执行多条数据时此处数据库已经存在报错从而导致以下代码不再执行。
此处注意手动指定字符集为utf8,java默认字符集不支持中文。
但MySQL中utf8只是残本不支持表情等,Utf8mb4是完全体。
拓展:在Java中说到字符编码一般是unicode,而字符串编码一般是utf8,java内部自动实现转换。
删:
drop database 数据库名;
查:
查看当前库:
show databases;
改:
首先指定要进行操作的数据库:
然后对其进行添加表之类的操作.
四.对数据库中的表操作
增:
在当前库中添加表:
create table 表名(列名 数据类型,列名 数据类型........);
sql中列名一定在数据类型之前
在表中添加(插入)数据:
单行插入:
insert into 表名 (输入创建表时的对应数据);
多行插入:
insert into 表名(列名)values (对应数据);
desc 表名;
查看表结构
查:
查看当前库中的表
show databases;
select 要查看列名 from 表名;
*为通配符表示全部列
删:
drop table 表名;(整表删除)
delete from 表名 要删除的行满足的条件;
如果没有条件表中数据全部删除但是表仍然存在
改:
update 表名 set 对列操作的表达式 满足更改的条件;
where 后跟的就是条件
五.条件表达
采用where后跟条件的形式
条件表达符号:
算数运算:
比较运算:
特别注意null参与的运算:
逻辑运算:
where可与很多其它语句进行搭配使用 :
六. 表查询操作进阶
1.多表连接查询
1)交叉连接查询
select 要查询的列 from 表1,表2;
结果进行笛卡尔积,但是存在很多无效数据,可通过where条件等筛选
2)内连接(取两表交集)
select * from student (inner)join class on 筛选条件;
3)外连接
左(右)外连接(左(右)表及两者交集部分)
4)自连接
自连接需要对表起别名,这里就要使用as
一个表自己和自己进行笛卡尔积
select 要操作的列 from 表名 as 别名,同一个表名as 别名;
2.多表联合查询
select * from 表名 where 条件 union select * from 表名 where 条件;(自动去重)
select * from 表名 where 条件 union all select * from 表名 where 条件;(不自动去重)
3.子查询
select * from 表名 where 条件(select 与条件匹配的列 from 表名);
七. 约束
1.not null
使用not null指定列不能为空
2. unique
指定列不可重复
3.primary key
not null 与 unique 的结合体
主键唯一但可以有多列共同形成联合主键
4.default
指定列为空时设置默认值
5. foreign key
关联其它表的主键或唯一键
此时进行删表操作只能先删除子表然后再删除父表,且自表受约束列数据必须存在于父表中
八.索引
1.创建索引
受unique,primary key,unique,foreign key 约束的键自带索引
create index 索引名 on 表名 (列名);
2.查看索引
show index from 表名;
3.删除索引
对自己创建的索引进行删除
drop index 索引名 on 表名;
九.事务
以一个人写代码另一人读代码为例
写代码为事务,读写的人写出的代码也是一个事务。
事务的特性
1.事务具有原子性,事务内的代码不可拆分,若执行中段则会触发自动回滚(rollback)
2.事务具有持久性,事务一旦提交对数据的修改是储存在硬盘中的是永久的
3.事务具有隔离性,并发执行的事务之间不会相互干扰
4.事务具有一致性,所谓一致性,指的是数据处于一种有意义的状态,这种状态是语义上的而不是语法上的。最常见的例子是转帐。例如从帐户A转一笔钱到帐户B上,如果帐户A上的钱减少了,而帐户B上的钱却没有增加,那么我们认为此时数据处于不一致的状态。
事务中的问题
以上述读写代码为例介绍事务中的问题
1.脏读
写代码的人写的同时读的人在旁边记,中途读的人离开,而写的人对已经写的代码进行修改,等读的人读时发现和原来的并不一致。
2.不可重复读
写代码的人写的时读的人不读,而是等写的人写完之后提交到码云之后读的人再进行读,此时写的人又将代码修改提交,此时读的人发现两次代码不一样。
3.幻读
写代码的人写时不能读,读的人写时不能修改此代码,但是写的人又在其它文件上写了代码并提交,此时读代码的人读的结果集发生改变。
事务隔离级别
- 读未提交:READ-UNCOMMITTED
- 读已提交:READ-COMMITTED
- 可重复读:REPEATABLE-READ
- 串行:SERIALIZABLE
由下到上事务并发性逐渐下降。