JavaWeb开发学习笔记--MySQL

MySQL案例学习

函数:

  • if(表达式 tvalue, fvalue)  当表达式为true时,取值为tvalue,当表达式为false时,取值fvalue
  • case expr when value1 then result1 [when value 2 then value2 ...][else result] end

多表设计 

一对多(多对一)

一般把一的一方叫做父表,把多的一方叫做子表。

外键约束:解决多表数据之间的一致性和完整性问题。

创建外键的两种语法

-- 创建表时指定
create tablt 表名(
        字段名 数据类型,
        ...
        [constraint] [外键名称] foreign key(外键字段名) references 主表(字段名)
);

-- 建完表之后,添加外键
alter table 表名 add constrain 外键名称 foreign key(外键字段名) references 主表(字段名);
alter table tb_emp    
    add constraint tb_enp_fk_dept_id
        foreign key (dept_id) references
tb_dept (id);

物理外键:

使用foteign key定义外键关系另外一张表

缺点:
  • 影响增,删,改的效率(需要检查外键关系)
  • 仅用于单节点数据库,不适用于分布式,集群场景
  • 容易引发数据库的死锁问题,消耗性能

(推荐)逻辑外键:

 在业务层逻辑中,解决外键关联

一对一

多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率。

在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)

多对多 

建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

 

多表查询

笛卡尔积:两个集合的所有组合情况

在·多表查询时,需要消除无效的笛卡尔积

select * from tb_emp,tb_dept where tb_emp.dept_id = tb_dept.id;

连接查询

内连接:

查询A、B表交集部分数据

-- 隐式内连接
select 字段列表 from 表1,表2 where 条件...;

-- 起别名
select e.name, d.name from tb_emp e , tb_dept d where e.dept_id = d.id;

-- 显式内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件...;

外连接:

左外连接

查询左表所有数据(包括两张表交集部分数据)

select 字段列表 from 表1 left [outer] join 表2 on 连接条件...;
右外连接

查询右表所有数据(包括两张表交集部分数据)

select 字段列表 from 表1 right [outer] join 表2 on 连接条件...;

子查询

SQL语句中嵌套select语句

子查询外部的语句可以是insert/update/select的任何一个,最常见的是select

select * from t1 where column1 = (select column1 from t2...);

标量子查询

子查询返回的结果为单个值(数字、字符串、日期等)

常见的操作符:= <> > >= < <=

列子查询

子查询返回的结果为一列

常用操作符:in、not in

行子查询

子查询返回的结果为一行

常用操作符:= <> in not in

select * from tb_emp where entrydate = (select entrydate from tb_emp where name = '韦一笑') and job = (select job from tb_emp where name = '韦一笑');

select * from tb_emp where (entrydate,job) = (select entrydate,job from tb_emp where name = '韦一笑';

表子查询

子查询返回的结果为多行多列

常用操作符:in

先分析用到的表,然后分析表之间的关系,考虑条件和组合

事务

是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,也就是说,这些操作要么都成功,要么一起失败。

  • 默认MySQL的事务是自动提交的:当执行一条DML语句,MySQL会立即隐式地提交事务。
-- 开启事务:
start transaction;
begin;
-- 提交事务:
commit;
-- 回滚事务
rollback;

四大特性

原子性

事务是不可分割的最小单元,要么全部成功,要么全部失败

一致性

事务完成时,必须所有的数据都保持一致状态

隔离性

数据库系统提供的隔离机制,保证事务在不收外部并发操作影响的独立环境下运行

持久性

事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

你可能感兴趣的:(JavaWeb开发学习笔记,学习,笔记)