导图社区 Mysql数据库学习笔记
这是我的mysql学习笔记,主要是基础篇入门的各项指令等,具体是看的黑马程序员的mysql视频,然后边学边自己整理出来的,希望对大家有帮助。
编辑于2023-09-23 20:23:32 湖南MYSQL 基础
概述
数据库
存储数据的仓库,有组织的对数据进行存储
数据库管理系统
操控和管理的软件
SQL
数据库语言系统
数据模型
客户端
通过DBMS
操作数据库,表
关系型数据库(RDBMS)
建立在关系模型的基础上,由多张相互连接的二维表组成的数据库
特点
使用表存储数据,格式统一便于维护
使用SQL语言操作,标准统一使用方便
示例
SQL
通用语法
单行或者多行书写,以分号结尾
可以使用空格或者缩进来增强语句可读性
MySQL数据库的SQL语句不区分大小写,关键词建议使用大写
注释
单行
--
#
多行
/* */
分类
DDL
Data Definition Languange
数据定义语言,定义数据库对象(库,表,字段
具体操作
数据库操作
查询
查看所有数据库
SHOW DATABASES;
查询当前使用数据库
SELECT DATABASE();
创建
创建时若需要支持中文,在创建设置 defaiult charset utf8mb4;
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]
删除
DROP DATABASE [IF EXISTS] 数据库名;
使用
USE 数据库名;
表操作
查询所有表
SHOW TABLES;
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;
数据类型
数值类型
字符串类型
日期时间类型
表创建
CREATE TABLE [IF NOT EXISTS] `表名`( '字段名' 列类型 [属性] [索引] [注释], '字段名' 列类型 [属性] [索引] [注释],...... '字段名' 列类型 [属性] [索引] [注释] )[表的类型][字符集设置][注释]
表修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
删除字段
ALTER TABLE 表名 DROP 字段名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
表删除
删除表
DROP TABLE [IF EXISTS] 表名;
删除指定表并重新创建该表
TRUNCATE TABLE 表名;
DML
Data Manipulation Language
数据操作语言,对表中数据进行增删改
具体操作
添加数据
给指定字段添加数据
INSERT INTO 表名(字段名1,字段名2,,) VALUES(值1,值2,...);
给全部字段添加数据
INSERT INTO 表名 VALUES(值1,值2,,);
批量添加数据
INSERT INTO 表名(字段名1,字段名2,,) VALUES(值1,值2,...)(值1,值2,...)(值1,值2,...);
INSERT INTO 表名 VALUES(值1,值2,...)(值1,值2,...)(值1,值2,...);
注意
插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串和日期型数据应该包含在引号中。
插入的数据大小,应该在字段的规定范围内
修改数据
UPDATE 表名 SET 字段名1=值1,字段名2=值2,,,[WHERE 条件];
没有where就是全表操作
删除数据
DELETE FROM 表名 [where 条件];
DQL
Data Query Language
数据查询语言,用来查询表中记录
具体操作
基本查询
查询多个字段
查询指定字段返回
SELECT 字段1,字段2,字段3,,FROM 表名;
查询所有字段
SELECT * FROM 表名;
设置别名
SELECT 字段1[AS 别名1],字段2[AS 别名2],,,FROM 表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
条件查询(where
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
聚合函数(count、max、min、avg、sum
将一系列函数作为一个整体,进行纵向计算
常见聚合函数
count
max
min
avg
sum
语法
SELECT 聚合函数(字段列表) FROM 表名;
所有null值不计入计算
分组查询(group by
语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
与where区别
执行时机不同
where是分组前过滤,不满足where条件,不参与分组,而having是分组后对结果进行过滤
判断条件不同
where不能对聚合函数进行判断,而having可以
注意
执行顺序:where>聚合函数>having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
排序查询(order by
语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;
排序方式
ASC,升序 (默认
DESC,降序
分页查询(limit
语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,(显示)记录数;
执行顺序
DCL
Data Control Language
数据控制语言,用来创建数据库用户,控制数据库访问权限
具体操作
管理用户
查询用户
USE mysql;
SELECT * FROM user;
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
主机名是localhost
本地用户可以访问
主机名是%
任意用户可以访问
修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户
DROP USER '用户名'@'主机名';
权限控制
查询权限
SHOW GRANTS FOR '用户名'@'主机名';
授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
函数
字符串函数
数值函数
日期函数
流程函数
约束
概念
作用于表中字段上的规则,用于 限制存储在表中的数据
目的
保证数据库中数据的正确性、有效性和完整性
分类
外键约束
添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
多表查询
多表关系
进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系
一对多(多对一)
多对多
一对一
目标
从多张表中查询数据
笛卡尔积
在数学中,两个集合A和集合B的所有组合情况(在多表查询时,需要消除无效的笛卡尔积)
连接查询
内连接
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件…;
显式内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件…;
外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
自连接
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件…;
自连接查询可以是内连接查询,也可以是外连接查询,注意一定要给自连接的两个表起别名
联合查询
就是把多次查询的结果合并起来,形成一个新的查询结果集
SELECT 字段列表 FROM 表A… UNION [ALL] SELECT 字段列表 FROM 表B…;
注意
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致
union all不去重,union去重
子查询
概念
嵌套SELECT语句,称为嵌套查询,又称子查询
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
根据结果分类
标量子查询
返回结果是单个值
列子查询
返回的是一列
行子查询
返回的是一行
查询的元素需要用括号括起来
表子查询
返回的是多行多列
事务
概念
是一组操作的集合,是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求,要么同时成功,要么同时失败
操作
查看/设置事务提交方式
SELECT @@autocommit;
SET @@autocommit = 0;
开启事务
START TRANSACTION;或者BEGIN;
提交事务
COMMIT;
回滚事务
ROLLBACK;
四大特性
原子性
事务是不可分割的最小操作单元,要么全部成功,要么全部失败
一致性
事务完成时,必须使所有的数据都保持一致状态
隔离性
数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性
事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
并发事务问题
脏读
一个事务读到另外一个事务还没有提交的数据
不可重复读
一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
幻读
一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”
事务隔离级别
查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
设置事务隔离级别
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATALBE READ | SERIALIZABLE};
注意
事务隔离级别越高,数据越安全,但是性能越低