MySQL

基本的命令行操作

mysql -uroot -p		--链接用户名为 root 的数据库

update mysql.user set authentication_string=password("123456") where user='root' and Host='localhost';	--修改用户密码,本质就是修改语句,信息存在mysql数据库的user表中
flush privileges;	--刷新权限

------------

show databases;		--查看所有的数据库

use school			--切换数据库,use + 数据库名

show tables;		--查看数据库中所有的表

describe 表名;		--查看表中所有的数据

create databases 数据库名;	--创建一个数据库

exit;				--退出链接

操作数据库

简单了解

  • MYSQL 关键字不区分大小写
  • 如果你的数据库名或者表名是特殊字符就需要加上 `` 环绕
--创建数据库
CREATE DATABASE IF NOT EXISTS learn_test

--删除数据库
DROP DATABASE IF EXISTS learn_test

--使用数据库
USE `learn_test`	--`环绕`

列类型

数值

image-20220404095115554

字符串

image-20220404095346556

时间日期

image-20220404095420246

null

  • 没有值、未知
  • 注意不要使用null进行运算,没有意义

字段属性

Unsigned

  • 无符号的整数
  • 该字段不能声明为负数

zerofill

  • 0填充的
  • 不足的位数用0来填充

自增

  • 在上一条记录的基础上 + 1
  • 通常来设置主键,必须是整数类型
  • 可以自定义设计逐渐的初始值和步长

非空

  • 设置为非空,该字段不赋值会报错

默认

  • 设置默认值
  • 不指定该列的值则初始值就是默认值

每一个表都需要有的字段

  • id --- 主键
  • version --- 乐观锁
  • is_delete --- 伪删除
  • gmt_create --- 创建时间
  • gmt_update --- 更新时间

获取SQL语句

SHOW CREATE DATABASE 数据库名字	--获取建库SQL语句
SHOW CREATE TABLE 表名字	--获取建表SQL语句
DESC 表名字	--显示表的结构 

数据表的类型

  • INNODB 默认使用
  • MYISAM 早些年使用的

image-20220405105321666

物理空间存在的位置

  • 所有数据库文件都存在data目录下
  • 本质还是文件存储

修改删除表

修改

ALTER TABLE 表名 RENAME AS 新表名		--修改表名
ALTER TABLE 表名 ADD 字段名 字段属性		 --添加新字段
ALTER TABLE 表名 MODIFY 字段名 字段属性	 --修改约束
ALTER TABLE 表名 CHANGE 字段名 新字段名 新字段属性	--重命名字段

删除

ALTER TABLE 表名 DROP 字段名				--删除字段
DROP TABLE IF EXISTS 表名				   --如果存在标则删除表

注意事项

  • 字段名使用``包裹
  • SQL大小写不敏感,但是建议使用小写,方便查看
  • 所有的符号全部用英文

MySQL 数据管理

外键

仅了解

  • 一般不在数据库级别使用外键约束
  • 一般用程序实现外键
  • 一切外键概念必须在应用层解决

DML语言

全部记住

  • 数据操作语言
--增
INSERT INTO 表名 (字段名) VALUES (数据)

--删
DELETE FROM 表名 WHERE 判断条件		--如果没有指定条件会删除所有的列
TRUNCATE 表名		--清空表

--改
UPDATE 表名 SET 字段名=新数据 WHERE 判断条件	--如果没有指定条件会更改左右的列
  • WHERE 后面可以跟的判断语句

image-20220405133124998

  • DELETE和TRUNCATE的区别
    • 相同点:都删除数据而不删除表结构
    • 不同点
      • TRUNCATE 重新设置 自增列 计数器会归零
      • TRUNCATE 不会影响事务

image-20220405134147162

DQL语言

  • 所有的查询操作都用它 SELECT
  • 简单、复杂的查询都能做
  • 数据库中最核心的语言,最重要的语句
  • 使用频率最高
--查询所有
SELECT * FROM 表名

--查询指定字段
SELECT 字段名 FROM 表名
SELECT DISTINCT 字段名 FROM 表名	--去重查询

--取别名
SELECT 字段名 AS 字段别名 FROM 表名 AS 表别名

--函数 -> CONCAT(a,b) 凭借字符串
SELECT CONCAT('姓名:',字段名) AS 字段别名 FROM 表名

--奇怪的用法
SELECT VERSION()	--查询系统版本
SELECT 1000-7 AS 别名	--计算
SELECT @@auto_increment_increment	--查询自增的步长

模糊查询

-- % 任意个数量的字符
-- _ 一个字符
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '张%'
-- IN 有其中的某个值
SELECT 字段名 FROM 表名 WHERE 字段名 IN (a,b,c)

联表查询

image-20220405144136967

  • 例子

image-20220405145145120

image-20220405150004333

  • 多加一张表也是类似的操作

image-20220405150616961

自链接

仅了解

  • 自己的表和自己的表链接,核心:一张表拆成两张一样的表

  • 例子

image-20220405152314436

分页和排序

  • 排序
    • 降序 :后面补上 ORDER BY 表名 DESC
    • 升序 :后面补上ORDER BY 表名 ASC
  • 分页
    • 限制查询的范围
    • LIMIT a,b 查询从 a 开始的 b 条数据

语法

子查询

  • 本质:在 WHERE 语句中嵌套一个查询语句
  • 就是在 WHERE 中使用 SELECT 语句来获得查询条件

image-20220406095833928

函数

  • 基本函数
-- 数学函数
SELECT ABS()		--绝对值
SELECT CEILING()	--上取整
SELECT FLOOR()		--下取整
SELECT RAND()		--返回一个 0 ~ 1之间的随机数
SELECT SIGN()		--判断一个数字的符号,负数返回 -1,整数返回 1

-- 字符串函数
SELECT CHAR_LENGTH		--获得字符串长度
SELECT CONCAT(a,b)			--拼接字符串
SELECT INSERT()			--查询、替换
SELECT LOWER()			--转小写
SELECT UPER()			--转大写
SELECT INSTR()			--查询字串第一次出现的位置
SELECT REPLACE()		--替换字符串
SELECT SUBSTR()			--返回指定的子串
SELECT REVERSE()		--反转字符串
  • 聚合函数

image-20220406104115599

  • 了解 MD5 加密

事务


  1. SQL 执行 A 给 B 转账
  2. SQL 执行 B 收到 A 的钱

将一组SQL放在一个批次中去执行

ACID原则

原子性

  • 要么都成功,要么都失败

一致性

  • 事务前后的数据完整性要保证一致

隔离性

  • 事务的隔离性是多个用户访问数据库的时候,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,事务之间要相互隔离

持久性

  • 事务一旦提交则不可逆,被持久化到数据库中

事务隔离可能出现的问题

脏读

  • 指一个事务读取了另一个事务未提交的数据

不可重复读

  • 在一个事务内读取表中的某一行数据,多次读取结果不同

虚读

  • 在一个事务内读取到了其他事务插入的数据,导致前后读取不一致

MySQL中的事务

image-20220406194430681

索引

  • 通过索引可以更方便的获取内容

分类

  • 主键索引 PRIMARY KEY

    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引 UNIQUE KEY

    • 避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引
  • 常规索引 KEY / INDEX

    • 默认的
  • 全文索引 FullText

    • 在特定的数据库引擎下才有

    现在好像都有了

    • 快速定位数据

索引原则

  1. 索引不是越多越好
  2. 不要对经常变动的数据加索引
  3. 小数据量的表不需要加索引
  4. 索引一般加在常用来查询的字段上

索引的数据结构

Hash 类型的索引

B-Tree :InnoDB 默认的数据结构

权限管理和备份

权限管理

  • 建议用可视化面板管理

备份

为什么要备份:

  • 保证重要的数据不丢失
  • 数据转移

MySQL 数据备份的方式

  • 直接拷贝物理文件
  • 在可视化工具中手动导出
  • 使用命令行导出

image-20220407114943020

数据库设计

软件开发中,关于数据库的设计

  • 分析需求
  • 概要设计:设计关系图 E-R 图

设计数据库的步骤

image-20220407115327803

三大范式

为什么需要数据规范化?

  • 信息重复
  • 更新异常
  • 插入异常
  • 删除异常

第一范式

  • 要求每一列都是不可分割的原子数据项

第二范式

  • 前提:满足第一范式
  • 每张表只做一件事情
    • 确保每一列都和主键相关而不是主键的一部分相关

第三范式

  • 前提:满足第一和第二凡是
  • 确保数据表中的每一列的数据都和主键直接相关而不是间接相关

规范性和性能的问题

关联查询的表不得超过三张

  • 考虑商业化的需求和目标,成本,用户体验
  • 实际中数据库的性能更加重要
  • 在规范性能的问题的时候,需要适当考虑规范性
  • 故意给某些表增加一些冗余的字段,从多表查询编程单表查询
posted @ 2022-04-07 12:06  Xuuxxi  阅读(39)  评论(0编辑  收藏  举报