Mysql基础。
之前学SQL server的时候简单学过SQL的一点基础,Mysql就直接从外键约束开始继续学。
外键约束:foreign key
让表与表产生关系,从而保证数据的正确性。
1、在创建表时添加外键:
create table ...(
......
外键列,
constraint 外键名称 foreign key (外键列名称)references 主表名(主表列名)
)
2、删除外键:
alter table ... drop foreign key 外键名。
3、添加外键:
alter table ... add constraint 外键名称 foreign key (外键列名称)references 主表名(主表列名)
级联操作:
1、添加级联操作:
语法:alter table 表名 add constraint 外键名称 foreign key (外键列名称)references 主表名 (主表列名)on update cascade on delete cascade 级联更新和删除
多表关系:
1、一对多:在多的一方建立外键,指向一的主键。
2、多对多:需要借助第三张中间表,中间表至少包含两个字段作为中间表的外键,指向两张表的 主键
3、一对一:任意一方添加【唯一外键】指向另一方的主键。
范式:
1、第一范式(1NF):每一列都是不可分割的原子数据项。
2、第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在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。
例如:学号-->系名,系名-->系主任
*码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这 个属性(属性组)为该表的码。
* 主属性:码属性组中所有的属性 *非主属性,出去码属性的属性。
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖。
多表查询:
多表查询产生的是笛卡儿积,会有无用数据,所以得消除无用数据
1、内链接查询。
1、隐式内链接:Select 列名 from 表一,表二 where 主键有关的条件
2、显式内链接:Select 列名 from 表一 join 表二 on 主键有关的条件
2、外连接查询。
1、左外连接:Select 列名 from 表一 left join 表二 on 主键有关的条件
查询的是左表所有数据以及其交集部分。
2、右外连接:Select 列名 from 表一 right join 表二 on 主键有关的条件
查询的是右表所有数据以及其交集部分。
3、子查询。
查询中嵌套查询。
子查询的不同情况:
1、单列单行:作为条件,用运算符判断。
2、单列多行:作为条件,:in
3、多列多行:作为一张虚拟表,放在列里。
事务:
1、事务的基本介绍:
* :如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时 失败。(张三转账给李四....)
* :操作:1、开启事务: start transaction
2、回滚:rollback
3、提交:commit
* :事务提交的方式:1、自动提交:mysql就是自动提交的,一条DML语句自动提交一次事务
2、手动提交:需要先开启事务,再提交。
* :修改事务的默认提交方式: 1、查看事务提交方式 SELECT @@autocommit; 1-自动提交
2、修改:set @@autocommit = 0 ;
2、事务的四大特征:
* 原子性:是不可分隔的最小单位,要么同时成功要么同时失败。
* 持久性:当事务提交或回滚后,数据库会持久保存数据。
* 隔离性:多个事务之间,相互独立。
* 一致性:事务操作前后,数据总量不变。
3、事务的隔离级别。
DCL:管理用户,授权。
Mysql基础。的更多相关文章
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- 【夯实Mysql基础】记一次mysql语句的优化过程
1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...
- MySQL基础(非常全)
MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...
- mysql 基础篇5(mysql语法---数据)
6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...
- MySQL 基础语句
MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...
- MySQL:基础—数据分组
MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...
- MySQL基础学习总结
1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...
- MySQL基础(五)——视图
MySQL基础(五)--视图
- MySQL基础(四)——索引
MySQL基础(四)--索引
随机推荐
- qt中窗体全屏
原文地址:https://www.cnblogs.com/wiessharling/p/3750461.html 近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一 ...
- HashMap和HashTable本质性的区别
一,HashMap 1.HashMap是键值对key-value形式双列集合.它的底层存储原理是哈希表. 2.对应HashMap采用哈希表存储键值对元素的方式. HashMap.put(key,val ...
- 二分类问题F-score评判指标(转载)
分类模型的评价指标Fscore 小书匠深度学习 分类方法常用的评估模型好坏的方法. 0.预设问题 假设我现在有一个二分类任务,是分析100封邮件是否是垃圾邮件,其中不是垃圾邮件有65封,是垃圾邮件有3 ...
- display:none和visibility:hidden
w3school学习网:https://www.w3school.com.cn/tiy/t.asp?f=hdom_style_display_none display: none----将元素的显示设 ...
- <每日 1 OJ> -LeetCode20. 有效的括号
题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可 ...
- Spring Boot启动命令参数详解及源码分析
使用过Spring Boot,我们都知道通过java -jar可以快速启动Spring Boot项目.同时,也可以通过在执行jar -jar时传递参数来进行配置.本文带大家系统的了解一下Spring ...
- 高度随每片内容的高度变化的swiper react-native-unfixed-height-swiper
高度随每片内容的高度变化的swiper react-native-unfixed-height-swiper 内容可以文本 图片 视频 本例里面的为文本 使用方式1. npm i react-n ...
- 第三节:EF Core上下文DbContext相关配置和生命周期
一. 配置相关 1. 数据库连接字符串的写法 (1).账号密码:Server=localhost;Database=EFDB01;User ID=sa;Password=123456; (2).win ...
- 安装Windows10出现无法识别磁盘时的解决方案
由于前些日子对deepin系统比较感兴趣,一时兴起把备用机刷成了deepin,奈何还是过分依赖windows下的软件,又不得不再刷回Win10. 但由于Linux支持的磁盘格式与Windows不同,在 ...
- Java的内存需要划分成为5个部分:
Java的内存需要划分成为5个部分: 1.栈(Stack):存放的都是方法中的局部变量.方法的运行一定要在栈当中运行. 局部变量:方法的参数,或者是方法{}内部的变量 作用域:一旦超出作用域,立从栈内 ...