• 数据库分类

    关系型数据库

    行列,

    列如Mysql,oracle

    通过表和表之间,行和列之间的关系进行数据的存储

    非关系型数据库:

    Redis,MongDb

    以对象存储,同过对象的自身属性来决定

    表与表的关系

    一对一,一对多,多对多

外键特点

从表外键的值是对主表主键的引⽤。

从表外键类型,必须与主表主键类型⼀致。

声明外键约束语法

alter table 从表 add [constraint][外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);

SQL联合查询(内联,左联,右联,全联)

内联inner join,左联 left outer join,右联right outer join,全联,full outer join

建立临时表,

临时表只在当前链接可见,关闭连接时候,会自动删除并释放所有控件‘

此表可供你当次链接的操作里查询.

create temporary table 临时表名称

select 表字段名称 from 表名称

分页查询

limit 0,3: 从0开始查,查三条

约束:对表中的数据进行限定从而保证数据的有效性和完整性。

分类:主键约束:primary key

非空约束:not Null

唯一约束:unique

外键约束:foreign key

非空约束:

自动增长:使用auto_increment,可以来完成值的自动增长

添加主键约束并且完成,主键的自动增长。

多表之间的关系
一对一
一对多
多对多
数据库设计的范式
概念:设计数据库时候,需要遵循的一次要求
第一范式:每一列都是不可分割的原子数据项
第二范式:第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 第三范式:需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。



内连接查询

​ 查询员工表的名称,性别,部门表的名称

select
t1.name,--员工表姓名
t1.sex,
t2.name--部门表的姓名
from empt1,dept t2
where
t1.deptid = t2.id

显示内连接

  1. ​ 语法:select 字段列表 from 表1 inner join 表2 on 条件

    外连接查询

    左外连接

    ​ 语法:select 字段列表 from 表1 left join 表2 on 条件

    ​ 查询的是左表所有的所有数据以及其交集部分

    右外连接:

    语法:select 字段列表 from 表1 left join 表2 on 条件

    ​ 查询的是左表所有的所有数据以及其交集部分

    子查询

    ​ 查询中嵌套查询,称之为子查询

    子查询的不同情况

    1.子查询的结果是单行单列

    子查询可以作为条件,运用运算符去判断

    2.子查询的结果是多行单列

    ​ 子查询可以作为为条件,使用运算符in来判断

    select * from emp where dep_id in(select id from dept where name = '财务部' or name = '市场部');

    3.子查询的结果是多行多列

    ​ 子查询可以作为一张虚拟表

事务

1.事务的基本介绍

​ 1.概念:

​ 如果一个包含多个步骤的业务操作,被事务管理,要么同时成功,要么失败

​ 可以确保数据的操作安全

​ 2.操作

​ 1.开启事务:start transaction

​ 2.事务回滚:rollbsck(事务出现问题就回滚)

​ 3.事务提交:commit(事务没有问题就提交)

​ 4.MySQL数据库中的事务是默认自动提交

​ 一条DML(增删改)语句会自动提交一次事务

​ 事务提交的两种方式,

​ 1.自动提交

​ MySQL就是自动提交的

​ 一条DML语句会自动提交一次事务

​ 2.手动提交

​ 需要先开启事务,再提交

​ *修改事务的默认提交方式

​ 查看当前事务的默认提交方式:

select @@autocommit;--- 1代表自动提交,0代表手动提交
修改默认提交方式
set @@autocommit = 0/1

​ 2.事务的四大特征:

​ 1.原子性:是不可分割的最小操作单位;

​ 2.持久性:如果事务一旦提交或者回滚之后数据库会发生持久化的保存数据

​ 3.隔离性:多个事务之间,相互独立.

​ 4.一致性:事务操作前后,数据总量不变.

​ 事务的隔离级别:

​ 概念:多个事务之间隔离的,相互独立的,但是如果多个事务操作同一批数据,则会英法一些问题,设置不同的隔离级别就可以解决问题.

​ 存在问题:

​ 1.脏读:一个事务,读取到另外一个事务中没有提交的数据

​ 2.不可重复读(虚读):同一个事物中,两次读取到的数据不一样

​ 3.幻读:一个事务操作数据表所有记录,另一个事务添加了一条数据,则第一个事务查询不到到自己的修改

​ 隔离级别:

​ 1.read uncommitted:读未提交

​ 产生的问题:脏读,不可重复读,幻读

​ 2.read committed:读已提交(Oracle)

​ 产生的问题,脏读,不可重复读,幻读

​ 3.repeatable read :可重复读(Mysql 默认)

​ 产生的问题:幻读

​ 4.serializable:串行化

​ 可以解决所有问题

​ 注意:隔离级别从小到大安全性越来越高,但是效率越来越低

今年面试时候被问到数据库事务是什么,一脸懵逼,重新补习一下

  结合以上,数据库事务就是多个数据库表的操作被一个事务管理要么同时成功,要么同时失败。

数据库事务的四大特性:原子性(不可分割的最小操作单位),隔离性(事务之间相互独立),持久性(修改后就一直保存在磁盘当中),一致性(事务操作前后数据总量不变)

MySql学习---数据库基本类型,事务,多表查询的更多相关文章

  1. MYSQL - 外键、约束、多表查询、子查询、视图、事务

    MYSQL - 外键.约束.多表查询.子查询.视图.事务 关系 创建成绩表scores,结构如下 id 学生 科目 成绩 思考:学生列应该存什么信息呢? 答:学生列的数据不是在这里新建的,而应该从学生 ...

  2. MySQL创建数据库 easyShopping,包括area表、goods表、customer表、orders表、ordersdetall表、test表

    MySQL创建数据库 easyShopping,包括area表.goods表.customer表.orders表.ordersdetall表.test表 商品表表结构: 字段名 说 明 类 型 长 度 ...

  3. 百万年薪python之路 -- MySQL数据库之 MySQL行(记录)的操作(二) -- 多表查询

    MySQL行(记录)的操作(二) -- 多表查询 数据的准备 #建表 create table department( id int, name varchar(20) ); create table ...

  4. 五、Django学习之基于对象的跨表查询

    五.Django学习之基于对象的跨表查询 正向与反向查询 关键在于ForeignKey字段写的位置.例如下面这段代码, 关系属性(字段)写在哪个类(表)里面,从当前类(表)的数据去查询它关联类(表)的 ...

  5. 高性能MySql学习笔记——锁、事务、隔离级别(转)

    为什么需要锁? 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作 ...

  6. MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)

    转载. https://blog.csdn.net/mysteryhaohao/article/details/51669741 锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是 ...

  7. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引

    一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...

  8. MySQL数据库(4)- 多表查询、可视化工具Navicat的使用、设计模式MVC

    一.多表查询 准备工作:创建两张表,部门表(department).员工表(employee),代码和表格如下: # 创建表 create table department( id int, name ...

  9. mysql数据库补充知识2 查询数据库记录信息之单表查询

    一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...

随机推荐

  1. 【uva 247】Calling Circles(图论--Floyd 传递闭包+并查集 连通分量)

    题意:有N个人互相打了M次电话,请找出所有电话圈(Eg.a→b,b→c,c→d,d→a 就算一个电话圈)并输出.(N≤25,L≤25,注意输出格式) 解法:由于N比较小所有n^2或n^3的复杂度都没有 ...

  2. zoj3777 Problem Arrangement(状压dp,思路赞)

    The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward i ...

  3. 迪杰斯特拉+拆点 Deliver the Cake - HDU 6805

    题意: t组输入,给你n个点m条边.你需要输出从s点到t点的最短距离,然后是m条边,每条边输入信息为: a,b,c 表示从a点到b点的一个无向边长度为c 每一个点会有一个属性L.R或M 如果a和b一个 ...

  4. Codeforces Round #643 (Div. 2) B. Young Explorers (思维,贪心)

    题意:给你一组人\(a\),现在要将这些人进行分组,对于\(i\),只有某一组的人数\(\ge a_{i}\)时,\(i\)才可以加入这个组,问最多能够有多少组,(不必将所有人都选用). 题解:我们将 ...

  5. 动态链接库(DLL)的创建和使用

    最近想做个记录日志的C++库,方便后续使用.想着使用动态库,正好没用过,学习下.概念这里不赘述.学习过程中碰到的几点,记录下来.学习是个渐进的过程,本文也是一个逐渐完善的过程. 一.Static Li ...

  6. ElasticSearch 集群 & 数据备份 & 优化

    ElasticSearch 集群相关概念 ES 集群颜色状态 ①. - 红色:数据都不完整 ②. - 黄色:数据完整,但是副本有问题 ③. - 绿色:数据和副本全都没有问题 ES 集群节点类型 ①. ...

  7. C++程序代码优化的方法

    1.选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多.数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组 ...

  8. CSS :nth-of-type() bug

    CSS :nth-of-type() bug .tools-hover-box-list-item { pointer-events: auto; box-sizing: border-box; di ...

  9. Web 网站安全测试 & 渗透测试

    Web 网站安全测试 & 渗透测试 Penetration Testing learning path 建一个测试环境来进行渗透测试 安装 Kali Linux -渗透测试操作系统 在虚拟机中 ...

  10. Paint Tool SAI

    Paint Tool SAI PC 绘画工具 https://en.wikipedia.org/wiki/Paint_Tool_SAI refs https://www.systemax.jp/en/ ...