IE盒子

搜索
查看: 79|回复: 1

MySQL总结第一部分(使用mysql,事务)

[复制链接]

3

主题

8

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2022-12-28 14:51:23 | 显示全部楼层 |阅读模式
1.MySQL的启动与关闭

1.1方式一:window服务启动MySQL

(1)右键 此电脑->管理
(2)选择服务->找到MySQL服务,右键选择->启动或停止
1.2方式二:DOS命令方式启动

(1)以管理员身份,打开命令行窗口
(2)启动MySQLnet start mysql157
(3)关闭MySQLnet stop mysql157
2.命令行登录数据库

2.1 登录本机


  • mysql -u用户名 -p密码
  • mysql -uroot -p123456
2.2 指定ip登录


  • mysql -h主机ip -u用户名 -p密码
  • mysql -h127.0.0.1 -uroot -p123456
3.SQL通用语法


  • SQL语句可以单行 或者 多行书写,以分号结尾 ;
  • 可以使用空格和缩进来增加语句的可读性。
  • MySql中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写。
  • 注释方式
  • --空格 单行注释
  • /**/多行注释
  • MySQL特有的单行注释
4.SQL的分类

4.1 DDL(Data Definition Language)


  • 数据定义语言
  • 用来定义数据库对象:数据库,表,列 等
4.2 DML(Data Manipulation Language)


  • 数据操作语言
  • 用来对数据库中表的记录进行更新
4.3 DQL(Data Query Language)


  • 数据查询语言
  • 用来查询数据库中表的记录
4.4 DCL(Date Control Language)


  • 数据控制语言
  • 用来定义数据库的访问权限和安全级别, 及创建用户
5.DDL操作

5.1 创建数据库


  • create database 数据库名
  • create database 数据库名 character set 字符集
5.2 查看/选择数据库


  • 切换数据库 use 数据库
  • 查看当前正在使用的数据库 select database()
  • 查看MySql中有哪些数据库 show databases
  • 查看一个数据库的定义信息 show create database 数据库名
5.3 修改数据库


  • 数据库的字符集修改操作 alter database 数据库名 character set 字符集
5.4 删除数据库


  • 从MySql中永久删除某个数据库 drop database 数据库名
5.5 创建表

5.5.1 MySQL的数据类型



5.5.2 创建表


  • CREATE TABLE 表名( 字段名称1 字段类型(长度), 字段名称2 字段类型  最后一列不要加逗号 );
5.5 复制表结构


  • create table 新表名 like 旧表名
5.6 查看表


  • 查看数据表的结构 desc 表名
  • 查看当前数据库中的所有表名 show tables
5.7 删除表


  • 删除表 drop table 表名
  • 判断表是否存在,存在再删除,不存在不执行删除drop table if exists 表名
5.8 修改表

5.8.1 修改表名


  • rename table 旧表名 to 新表名
5.8.2 修改表的字符集


  • alter table 表名 character set 字符集
5.8.3 向表中添加列


  • alter table 表名 add 字段名 字段类型
5.8.4 修改表中列的数据类型或长度


  • alter table modify 字段名称 字段类型
5.8.5 修改列名称


  • alter table 表名 change 旧列名 新列名 类型(长度)
5.8.6 删除列


  • alter table 表名 drop 列名
6. DML操作

6.1 插入数据

6.1.1 插入全部字段,将所有字段名都写出来


  • insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...)
6.1.2 插入全部字段,不写字段名


  • insert into 表名 values(字段值1,字段值2...)
6.1.3 插入指定字段的值


  • insert into 表名(指定字段名...) values(指定字段值)
6.1.4 注意


  • 值的字段必须要对应,个数相同且数据类型相同
  • 值的数据大小,必须在字段指定的长度范围内
  • varchar、char、date类型的值必须使用单引号,或者双引号包裹
  • 如果要插入空值,可以忽略不写,或者插入null
  • 如果插入指定字段的值,必须写上列名
6.2 更改数据

6.2.1 不带条件的修改


  • update 表名 set 列名 = 值
6.2.2 带条件的修改


  • update 表名 set 列名 = 值[where 条件表达式:字段名 = 值]
6.3 删除数据

6.3.1 删除所有数据


  • delete from 表名
  • 要删除表中的所有数据不推荐使用, 有多少条记录 就执行多少次删除操作. 效率低
6.3.2 指定条件 删除数据


  • delete from 表名[where 字段名 = 值]
6.3.3 truncate删除数据


  • truncate table 表名
  • 删除表中的所有数据,先删除整张表, 然后再重新创建一张一模一样的表. 效率高
7. DQL操作

7.1 简单查询


  • select 列名 from 表名
  • select 列名 as 别名 from 表名 as 表别名
7.2  条件查询


  • select 列名 from 表名 where 条件表达式
7.2.1 比较运算符


  • >、<、<=、>=、=、<>、!=
  • between...and...  显示在某一区间的值
  • in(集合) in中的每个数据都会作为一次条件,只要满足条件就会显示
  • like 模糊查询
  • is null 查询某一列为null的值
7.2.2 逻辑运算符


  • and && 多个条件同时成立
  • or || 多个条件任一成立
  • not 不成立,取反
7.3 模糊查询


  • %:匹配任意多个字符串
  • _:匹配一个字符
7.4 排序

7.4.1 单列排序


  • 只按照某一个字段进行排序
  • SELECT 字段名 FROM 表名 [WHERE 字段 = 值] ORDER BY 字段名 [ASC / DESC]
  • ASC 升序排序(默认)   DESC 降序排序
7.4.2 组合排序


  • 同时对多个字段进行排序,如果第一个字段相同,就按照第二个字段进行排序
7.5 聚合函数

7.5.1 count(字段)


  • 统计指定列不为NULL的记录行数
7.5.2 sum(字段)


  • 计算指定列的数值和
7.5.3 max(字段)


  • 计算指定列的最大值
7.5.4 min(字段)


  • 计算指定列的最小值
7.5.5 avg(字段)


  • 计算指定列的平均值
7.6 分组


  • 使用 GROUP BY 语句,对查询的信息进行分组,相同数据作为一组
  • SELECT 分组字段/聚合函数 FROM 表名 GROUP BY 分组字段 [HAVING 条件];
  • 分组时可以查询要分组的字段或者使用聚合函数进行统计操作,*查询其他字段没有意义
7.7 过滤


  • having:对分组后的数据进行过滤,having 后面可以写聚合函数
  • where:进行分组前的过滤,where后面不能写聚合函数
7.8 limit


  • limit是限制的意思,用于 限制返回的查询结果的行数 (可以通过limit指定查询多少行数据)
  • limit 语法是 MySql的方言,用来完成分页
  • SELECT 字段1,字段2... FROM 表名 LIMIT offset , length;
  • offset: 起始行数, 从0开始记数, 如果省略 则默认为 0; length:返回的行数
8.约束


  • 对表中的数据进行进一步的限制,从而保证数据的正确性、有效性、完整性. 违反约束的 不正确数据,将无法插入到表中
8.1主键约束


  • 用来表示数据库中的每一条记录,不可重复,唯一,非空
  • 字段名 字段类型 primary key
  • 通常针对业务去设计主键,每张表都设计一个主键id
  • 主键是给数据库和程序使用的,跟最终的客户无关,所以主键没有意义没有关系,只要能够保证不重复 就好
8.1.1 添加主键约束


  • 创建表的时候添加 字段名 字段类型 primary key 或者primary key(字段名)
  • 通过DDL语句进行设置 ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
8.1.2 删除主键约束


  • 通过DDL语句删除 ALTER TABLE 表名 DROP PRIMARY KEY;
8.1.3 主键的自增


  • AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
8.1.4 修改自增主键自增的起始值


  • AUTO_INCREMENT = 起始值,默认为1
  • delete:只是删除表中所有数据,对自增没有影响。
  • truncate:将整个表删除掉,然后创建一个新的表自增的主键,重新从1开始
8.2 非空约束


  • 某一列不允许为空
  • 字段名 字段类型 not null
8.3 唯一约束


  • 表中的某一列的值不能重复(对null不做唯一的判断)
  • 字段名 字段类型 unique
  • 主键约束与唯一约束的区别
  • 主键约束 唯一且不能够为空
  • 唯一约束 唯一但可以为空
  • 一个表中只能有一个主键,但是可以有多个唯一约束
8.4 外键约束


  • 外键指的是在 从表 中 与 主表 的主键对应的那个字段
  • 使用外键约束可以让两张表之间产生一个对应关系,从而保证主从表的引用的完整性
8.4.1 创建外键约束


  • 新建表时添加:[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
  • 已有表添加:ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主 键字段名);
  • 从表外键类型必须与主表主键类型一致 否则创建失败.
  • 添加数据时, 应该先添加主表中的数据.
8.4.2 删除外键约束


  • alter table 从表 drop foreign key 外键约束名称
  • 删除数据时,应该先删除从表中的数据.
  • 级联删除 ON DELETE CASCADE 创建表时使用
8.5 默认值约束


  • 字段名 字段类型 DEFAULT 默认值
9 .数据库事务


  • 事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有一 条SQL出现异常,整个操作就会回滚,整个业务执行失败
9.1 回滚


  • 即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,滚回到事务开始时的状态。(在提交之前执行)
9.2 MySql事务操作

9.2.1手动提交事务


  • start transaction; 或者 BEGIN; 开启事务
  • commit;提交事务,将事务中所有对数据库的更新都写 到磁盘上的物理数据库中,事务正常结束
  • rollback;:回滚事务,表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中 对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态
  • 执行成功的情况: 开启事务 -> 执行多条 SQL 语句 -> 成功提交事务
  • 执行失败的情况: 开启事务 -> 执行多条 SQL 语句 -> 事务的回滚
9.2.2 自动提交事务


  • 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执 行完毕 自动提交事务,MySQL 默认开始自动提交事务
  • SHOW VARIABLES LIKE 'autocommit'; 查看autocommit状态
  • SET @@autocommit=off 修改自动提交为手动提交,将状态设置为off
9.2.3 事务的四大特性


  • 原子性:每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都 失败
  • 一致性:事务在执行前数据库的状态与执行后数据库的状态保持一致。如:转账前2个人的 总金额 是 2000,转账后 2 个人总金额也是 2000.
  • 隔离性:事务与事务之间不应该相互影响,执行时保持隔离的状态.
  • 持久性:一旦事务执行成功,对数据库的修改是持久的。就算关机,数据也是要保存下来的
9.3 事务的隔离级别

9.3.1 数据的并发访问


  • 一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库. 数据库的相同数据可能被 多个事务同时访问,如果不采取隔离措施,就会导致各种问题, 破坏数据的完整性
9.3.2  并发访问会产生的问题


  • 事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同 一个 数据。可能引发并发访问的问题
  • 脏读 :一个事务读取到了另一个事务中尚未提交的数据
  • 不可重复读: 一个事务中两次读取的数据内容不一致, 要求的是在一个事务中多次读取时数据是一 致的. 这是进行 update 操作时引发的问题
  • 幻读: 一个事务中,某一次的 select 操作得到的结果所表征的数据状态, 无法支撑后续的业务 操作. 查询得到的数据状态不准确,导致幻读,比如 select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无 法插入,此时就发生了幻读。
9.3.3 四种隔离级别


  • ✔ 会出现问题 ✘ 不会出现问题


9.3.4 隔离级别相关命令


  • select @@tx_isolation; 查看隔离级别
  • mysql默认隔离级别为repeatable read
  • set global transaction isolation level 隔离级别名称;
  • 设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化
回复

使用道具 举报

4

主题

14

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 2025-5-14 22:47:38 | 显示全部楼层
好,很好,非常好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表