一 mysql的基本数据类型

二 mysql中查询

2.1.where与having的区别

1.都是对条件进行筛选;

2.where是分组前对设置条件筛选;having是对分组后的数据进行过滤筛选

3.where 后面不能使用聚合函数;having后面可以跟聚合函数。

2.2 查询完整语法

select
        字段列表
    from
        表名列表
    where
        条件列表
    group by
        分组字段
    having
        分组之后的条件
    order by
        排序
    limit
        分页限定

2.3 约束

约束: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。

2.3.1 非空约束:

not null,值不能为null

1. 创建表时添加约束
        CREATE TABLE stu(
            id INT,
            NAME VARCHAR(20) NOT NULL -- name为非空
        );
    2. 创建表完后,添加非空约束
        ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

3. 删除name的非空约束
        ALTER TABLE stu MODIFY NAME VARCHAR(20);

2.3.2  唯一约束  unique

1. 创建表时,添加唯一约束
        CREATE TABLE stu(
            id INT,
            phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束
        
        );
        * 注意mysql中,唯一约束限定的列的值可以有多个null

2. 删除唯一约束
    
        ALTER TABLE stu DROP INDEX phone_number;
    
    3. 在创建表后,添加唯一约束
        ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

2.3.3 主键约束

1. 注意:
        1. 含义:非空且唯一
        2. 一张表只能有一个字段为主键
        3. 主键就是表中记录的唯一标识

2. 在创建表时,添加主键约束
        create table stu(
            id int primary key,-- 给id添加主键约束
            name varchar(20)
        );

3. 删除主键
        -- 错误 alter table stu modify id int ;
        ALTER TABLE stu DROP PRIMARY KEY;

4. 创建完表后,添加主键
        ALTER TABLE stu MODIFY id INT PRIMARY KEY;

5. 自动增长:
        1.  概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

2. 在创建表时,添加主键约束,并且完成主键自增长
        create table stu(
            id int primary key auto_increment,-- 给id添加主键约束
            name varchar(20)
        );

3. 删除自动增长
        ALTER TABLE stu MODIFY id INT;
        4. 添加自动增长
        ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

2.3.4 外键约束

1. 在创建表时,可以添加外键
        * 语法:
            create table 表名(
                ....
                外键列
                constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
            );

2. 删除外键
        ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

3. 创建表之后,添加外键
        ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

创建部门表:

create table  tb_department(
id int(5) primary key auto_increment ,
dp_name varchar(50))

创建员工表:

create table tb_yuangong(
id int(5) primary key auto_increment,
emp_name varchar(50),
depart_id int(5),
constraint fk_depart_id foreign key (depart_id) references tb_department(id)
)

2.3.5 级联操作

1. 添加级联操作
            语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 
                    FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE  ;
        2. 分类:
            1. 级联更新:ON UPDATE CASCADE 
            2. 级联删除:ON DELETE CASCADE

设置级联操作:

ALTER TABLE tb_yuangong DROP FOREIGN KEY fk_depart_id;

ALTER TABLE tb_yuangong ADD CONSTRAINT fk_depart_id FOREIGN KEY (depart_id) REFERENCES tb_department(id) ON UPDATE CASCADE ON DELETE CASCADE;

将主表的id为1设置为5,查看从表

可以看到自动更新为id为5,

总结:级联操作主表发生修改,删除,从表也跟着改动。

2.4 范式

第一范式: 强调的是原子性;要求各个列不可再分解。

第二范式:强调的是唯一性;消除各个列之间的部分依赖

第3范式:情调的是冗余性;字段不存在多余,即消除传递依赖。

数据库逻辑设计之三大范式通俗理解,一看就懂,书上说的太晦涩 - 知乎

2.5 备份

进入到mysql数据库的安装目录的bin目录下: mysqldump -uroot -p  数据库名称 >  存储路径

使用命令行将mysql数据库导入导出操作_健康平安的活着的专栏-CSDN博客

2.6 事务

2.6.1 事务的性质

一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。
    2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据。
    3. 隔离性:多个事务之间。相互独立。
    4. 一致性:事务操作前后,数据总量不变

多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。

2.6.2 事务的隔离级别

1.事务的并发问题:

1.脏读:一个事务,读取到另一个事务中没有提交的数据,如:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

2.不可重复读(虚读):在同一个事务中,两次读取到的数据不一样,如:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

3幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。如幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

2.事务的隔离级别: 1.读未提交,2.不可重复读 3.可重复读,4.串行化

1.read uncommitted(读提交)

可以看到未提交的数据(脏读),举个例子:别人说的话你都相信了,但是可能他只是说说,并不实际做。

事务隔离级别为读提交时,写数据只会锁住相应的行

2.read committed(不可重复读)

读取提交的数据。但是,可能多次读取的数据结果不一致(不可重复读,幻读)。用读写的观点就是:读取的行数据,可以写。(没有锁,可以随意的修改写操作)

3.repeatable read(MySQL默认隔离级别,可重复读)

可以重复读取,但有幻读。读写观点:读取的数据行不可写,但是可以往表中新增数据。在MySQL中,其他事务新增的数据,看不到,不会产生幻读。采用多版本并发控制(MVCC)机制解决幻读问题。

事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。

4.serializable

可读,不可写。像java中的锁,写数据必须等待另一个事务结束。

事务隔离级别为串行化时,读写数据都会锁住整张表

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

https://www.cnblogs.com/study-makes-me-happy/articles/8989412.html

MySQL的四种事务隔离级别 - 花弄影 - 博客园

mysql的一些基本常识(约束 、事务,事务隔离级别)相关推荐

  1. mysql隔离级别 isolation_MySQL事务和隔离级别

    本文以MySQL数据库为蓝本进行讲解- 一 事务是什么 事务'封装'了一系列操作,使得这一系列操作变成了一个最小的工作单元,也可以理解为打包.压缩一起带走-,一起退回- 我理解的事务是:对现实世界中的 ...

  2. mysql重复读导致余额不对_我所理解的MySQL之四:事务、隔离级别及MVCC

    mysql教程栏目介绍MySQL相关的事务.隔离级别及MVCC. MySQL 系列的第四篇,主要内容是事务,包括事务 ACID 特性,隔离级别,脏读.不可重复读.幻读的理解以及多版本并发控制(MVCC ...

  3. MySQL数据库引擎、数据事务与隔离级别

    MySQL数据库引擎 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEA ...

  4. 从根儿上理解MySQL | 事务的隔离级别与MVCC

    目录 事务简介 事务的概念 MySQL中事务的语法 事务的隔离级别 事务并发执行遇到的问题 MySQL中支持的四种隔离级别 MVCC原理 版本链 ReadView MVCC小结 事务简介 事务的概念 ...

  5. 第七周 Java语法总结之数据库大全_DDL_DML_DQL_约束_备份与还原_表的关系_三大范式_多表查询(内连接_外连接_子查询)_musql事务_隔离级别

    文章目录 数据库 DDL语句:数据库定义语句 1.库的增删查改 1.查询当前mysql下所有的数据库 2.创建数据库 3.查看创建数据库的默认的字符集(了解) 4.修改数据库的字符集(了解) 5.删除 ...

  6. MySQL事务学习 -- 隔离级别

    6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况. 更新丢失 ...

  7. mysql隔离级别加锁情况_MySQL数据库事务各隔离级别加锁情况--read committed amp;amp; MVCC...

    上节回顾 上篇记录了我对MySQL 事务 隔离级别read uncommitted的理解. 这篇记录我对 MySQL 事务隔离级别 read committed & MVCC 的理解. 前言 ...

  8. mysql事务隔离级别 花_MySQL事务的隔离级别

    为什么要有事务? 当需要对一个数据表进行一系列多个操作的情况下,为了防止这些操作中一部分操作成功,而另一部分操作失败,从而导致数据不正确,我们就需要事务来控制了. 当两个人或者多个人同时操作同一条数据 ...

  9. Mysql的事务事务的特征事务的隔离级别

    目录 事务 事务的(ACID)特征 事务的隔离级别 事务 事务的概念: 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么 ...

  10. 必须懂的 MySQL 的事务与隔离级别

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:微信支付的软件架构,牛逼!个人原创+1博客:点击前往,查看更多 出处:哈基石 链接:https://segmen ...

最新文章

  1. oracle nvl用法
  2. 【数据挖掘】神经网络 后向传播算法( 向后传播误差 | 输出层误差公式 | 隐藏层误差公式 | 单元连接权值更新公式 | 单元偏置更新公式 | 反向传播 | 损失函数 | 误差平方和 | 交叉熵 )
  3. Endian Bitfiled
  4. 通过yum安装Nginx
  5. UML学习-活动图创建
  6. 大型网站服务器 pdf,大型网站服务器容量规划[PDF][145.25MB]
  7. Fence(CF-324F)
  8. javaWeb校园宿舍管理解析(二)
  9. perl语言数据类型
  10. 定时让电脑进入休眠状态
  11. 为什么阿里规定需要在事务注解 @Transactional 中指定 rollbackFor?这...
  12. 如何将浮点数点左边的数每三位添加一个逗号,如12000000.11转化为『12,000,000.11』...
  13. 目标追踪论文之狼吞虎咽(2):在线被动攻击学习
  14. lodop 小票排版_Lodop打印小票
  15. 园林景观cad_景观广场及绿化设计(附CAD平面图)
  16. web前端面试题(关于闭包)
  17. java公众号图片上传_调用微信公众号接口上传图片素材
  18. 我的Python心路历程 第十期 (10.12 股票实战可视化之分位数)
  19. 系统安全性之认证技术
  20. 导入三方库是出现NotFount

热门文章

  1. 计算机和网络设备的辐射强,计算机网络设备信息辐射泄漏与抑制
  2. 磁盘分区MBR和GPT格式详解(Linux)
  3. 在UTF-8下写字库
  4. 计算机的6个发展阶段,现代计算机发展的6个阶段
  5. 七彩cms云转码_七彩CMS视频转码 2019云转码彻底开源系统版本号
  6. 因子图优化原理(iSAM、iSAM2论文解析)
  7. STM32F103C8T6核心开发板下,通过TIM3和TIM4输出PWM波形实现2个 LED呼吸灯的效果
  8. PhotoShop CS4快捷键大全
  9. 〖全域运营实战白宝书 - 高转化文案速成篇③〗- 高打开率标题型文案的10大黄金法则
  10. python 银行_python 银行系统