MySQL基础篇学习
基础
数据库管理系统(DBMS)是包含数据库的系统。DBMS是一个软件,用于创建、管理、查询和更新数据库。数据库本身是由DBMS创建和管理的结构化数据集合。
常用的数据库系统有:
- 关系型数据库:MySQL, Oracle, SQL Server,
- 非关系型数据库:MongoDB, Cassandra, Redis, Couchbase, Neo4j
关系型数据库(RDBMS):
- 关系型数据库是基于关系模型的数据库,使用表、行和列来存储数据。
- 数据之间通过预定义的键(通常是主键和外键)进行关联。
。 - MySQL, Oracle, SQL Server, PostgreSQL等。
非关系型数据库(NoSQL):
-
非关系型数据库不遵循传统的关系模型。
-
数据以键值对、文档、列族或图形结构存储。
-
MongoDB(文档存储)、Cassandra(列族存储)、Redis(键值存储)、Neo4j(图形存储)等。
关系型数据库(RDBMS)适用场景:
-
需要复杂查询和事务处理的应用。
-
数据结构化,且关系复杂。
-
数据一致性和完整性要求高。
-
例如:银行系统、
非关系型数据库(NoSQL)适用场景: -
需要高性能、高可扩展性的应用。
-
数据结构不固定或非常复杂。
-
不需要复杂的事务处理。
-
例如:社交媒体、实时分析、日志处理、缓存等。
主键(Primary Key):
-
主键是数据库表中的一个或多个字段的组合,用于唯一标识表中的每一行。
-
主键的值必须是唯一的,并且不能为NULL。
MySQL中的主键生成方式: -
自增(AUTO_INCREMENT):MySQL为每行自动分配一个唯一的数字。
-
手动生成:手动为每条记录指定一个唯一值。
vs访问数据库
- 属性 c 常规 包含目录 server include
- 链接器 常规 附加库目录 server lib
- 输入 依赖库 libmysql/lib
命令行操作数据库
mysql -u root -p
MYSQL数据类型
-
tinyint 小整数值
-
smallint 大整数数值
-
float 单精度浮点数值
-
double 双精度浮点数值
-
char 定长字符串
-
varchar 变长字符串
-
tinytext 短文本字符串
-
data 日期值 YYYY-MM-DD
-
time 时间值或持续时间值 HH:MM:SS
-
year 年份值 YYYY
DDL 数据定义语言
数据库操作
-
查询所有数据库
SHOW DATABASES;
-
查看当前数据库
SELECT DATABASE();
-
创建数据库
CREATE DATABASE [IF EXISTIS]数据库名 [DEFAULT CHARSET 字符集] ;
-
删除数据库
DROP DATABASE[IF EXISTS] 数据库名;
-
切换数据库
USE 数据库名;
-
查询当前数据库所有表
SHOW TABLES;
表操作
-
查询表结构
DESC 表名;
-
查询创建表语句
SHOW CREATE TABLE 表名;
-
创建表
CREATE TABLE 表名(字段 字段类型 [COMMENT 注释])[COMMENT 注释];
-
删除表
DROP TABLE 表名;
-
删除表内容
TRUNCATE ;
-
修改表名 ALTER TABLE 表名 RENAME TO 新表名
字段操作
-
修改字段
ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释];
-
修改字段数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
-
修改数据类型和字段名称
ALTER TABLE 表明 CHANGE 旧字段名 新字段名 新类型(长度)[COMMENT 注释];
-
删除字段
ALTER TABLE 表名 DROP 字段名;
DML 数据操作语言
添加数据 INSERT
INSERT INTO 表名(字段)VALUES(值);
修改数据 UPDATA
UPDATA 表名 SET 字段名=值 [WHERE 条件];
删除数据 DELETE
DELETE FROM 表名 WHERE 条件;
DQL 数据查询语言
-
SELECT 字段列表
-
FROM 表名列表
-
WHERE 条件列表
-
in 在其中之一
-
not like
-
%表示任何字符出现任意次数
-
_表示单个字符
-
[]表示一个字符集
-
-
-
GROUP BY 分组字段列表
-
HAVING 分组后条件列表
-
ORDER BY 排序字段列表
-
字段 默认升序 加 DESC 是降序
-
between and 前闭后闭
-
-
LIMIT 分页参数
- limit 起始索引 每页展示记录数
-
DISTINCT 数据去重
多表查询
-
一对多
-
部门 – 员工
-
多的一边建立外键,指向另一方的主键
-
多对多
- 学生 – 课程
- 中间表,至少两个外键分别关联两个主键
-
一对一
- 用户 用户详情
- 任意一方加入外键 设置外键为唯一约束 UNIQUE
-
笛卡尔查询
- 两张表所有组合情况
- 消除 WHERE 表名.字段 = 表名.字段
-
内连接 相当于查询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 表1 别名A JOIN 表1 别名B ON 条件
-
DCL 数据库权限
管理用户
- 查询用户
-
- USE mysql;
- SELECT *FROM user;
- 创建用户
-
- CREATE USER 用户名@主机名 IDENTIFIED BY密码;
- 修改用户密码
- ALTER USER 用户名@主机名 INENTIFIED 原密码 BY 新密码;
- 删除用户
- DROP USER 用户名@主机名;
- 任意主机名 %
约束
- 主键 PRIMARY KEY
- 自动增长 AUTO_INCREMENT
- 不为空 NOT NULL
- 唯一 UNIQUE
- 默认为1 DEFAULT
外键约束
ALTER TABLE 表名 ADD CONSITRINT 外键名称 FOREIGN KEY (外键字段名)REFERENCES 主表(主表列名)
内置函数
字符串截取 substring(字符串,起始位置,截取字符数)
字符串拼接 concat (字符串1,字符串2…)
字母大写 upper(字符串)
DATE_FORMAT(NOW(), ‘%d/%m/%Y’) AS formatted_date;
事务
事务会把所有操作作为一个整体一起向系统提交或撤销操作星球 这些操作要么同时成功要么同时失败
事务操作
查看 设置事务
SELECT @@autocommit;
SET @@AUTOCOMMIT=0
设置为手动提交
提交事务COMMIT
回滚事务 ROLLBACK
开启事务 start transction
或 begin
提交事务 commit
回滚事务 rollback
事务四大特性
- 原子性 事务是不可分割的最小单元 要么全部成功 要么全部失败
- 一致性 事务完成时 必须使所有数据都保持一致
- 隔离性 保证事务在不收外部并发操作影响的独立环境
- 持久性 事务一旦提交或回滚 数据库中数据改变持久性
并发事务问题
赃读 一个事务读取到另一个事务还没有提交的数据
不可重复读 一个事务先后读取同一条记录 但两次读取的数据不同
幻读 一个事务按照调教查询数据时 没有对应的数据行 但是在插入数据时 又发现了这条数据的存在
事务隔离级别
隔离级别 | 赃读 | 不可重复读 | 幻读 |
---|---|---|---|
read uncommitted 读未提交 | √ | √ | √ |
read committed 读已提交 | × | √ | √ |
repeatable read(默认) 可重复读 | × | × | √ |
serializable 串行化 | × | × | × |
查看事务隔离级别 SELECT @@transacyion_isolation;
设置事务隔离级别
set [session | global] transaction isolation level { 四种级别 };