一篇文章入门MySQL数据库

一,MySQL数据库

MySQL 是一款非常流行的开源关系型数据库管理系统(RDBMS),它被广泛应用于各种网站和应用软件中。MySQL 提供了高性能、高可靠性和易用性,支持 SQL(Structured Query Language)语言标准,用于管理结构化的数据

1.特点

特点描述
开放源代码MySQL 是一个开源项目,任何人都可以免费下载和使用它的源代码来构建自己的版本
跨平台MySQL 支持多种操作系统,包括 Windows、Linux 和 macOS 等
安全性MySQL 提供了一系列的安全特性,如用户权限管理、加密连接等
性能优化MySQL 具有良好的性能,并且可以通过配置调整来进一步优化
支持多种存储引擎MySQL 支持多种存储引擎,如 InnoDB、MyISAM 和 Memory 等,每种引擎都有其特定的功能和优势
可扩展性MySQL 可以轻松地通过添加更多硬件资源来扩展其容量和性能
备份与恢复MySQL 提供了多种备份和恢复解决方案,以确保数据安全

2.数据类型

(1)数值类型

数据类型大小有符号范围(SIGNED)无符号范围(UNSIGNED)描述
TINYINT1 byte[-128, 127][0, 255]小整数值
SMALLINT2 bytes[-32768, 32767][0, 65535]大整数值
MEDIUMINT3 bytes[-8388608, 8388607][0, 16777215]小整数值
INT4 bytes[-2147483648, 2147483647][0, 4294967295]大整数
BIGINT8 bytes[-2^63, 2^63-1][0, 2^64-1]极大整数
FLOAT4 bytes[-3.402823466 E+38, 3.402823466351 E+38]0和[1.175494351 E-39, 3.402823466 E+38]单精度浮点数值
DOUBLE8 bytes[-1.7976931348623157 E+308, 1.7976931348623157 E+308]0和[2.2250738585072014 E-308, 1.7976931348623157 E+308]双精度浮点数值
DECIMAL依赖于M(精度,即整个数值的长度)和D(标度的值,即小数的位数)依赖于M(精度,即整个数值的长度)和D(标度的值,即小数的位数)小数值(精确定点数)

(2)字符串类型

类型大小描述
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过255个字符的二进制数据
TINYTEXT0-255 bytes短文本字符串
BLOB0-65535 bytes二进制形式的长文本数据
TEXT0-65535 bytes长文本数据
MEDIUMBLOB0-16777215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16777215 bytes中等长度文本数据
LONGBLOB0-4294967295 bytes二进制形式的极大文本数据
LONGTEXT0-4294967295 bytes极大文本数据

(3)日期类型

类型大小范围格式描述
DATE31000-01-01 至 9999-12-31YYYY-MM-DD日期值
TIME3-838:59:59 至 838:59:59HH:MM:SS时间值或持续时间
YEAR11901 至 2155YYYY年份值
DATETIME81000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值,是一个时间戳

二,SQL(Structured Query Language)

SQL全称Structured Query Language,一种专门用来与数据库沟通的语言。被设计用于查询、更新和管理关系型数据库管理系统(RDBMS)

1.SQL通用语法

(1)SQL可以分成单行或者多行书写,以分号结尾
(2)SQL语句可以使用空格或缩进来增强语句的可读性
(3)SQL语句关键字不区分大小写,建议关键字使用大写
(4)注释语法

--单行注释

/*
多行注释
*/

2.SQL语句的分类

(1)DDL

Data Definition Language,数据定义语言,用来定义数据库对象,如数据库,表,字段

1)数据库操作
-- 查询所有数据库
SHOW DATABASES;
-- 查询当前数据库
SELECT DATABASE();
-- 查询指定数据库的创建语句
SHOW CREATE DATABASE 数据库名称;
-- 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
-- 删除数据库
DROP DATABASE[IF EXISTS] 数据库名称;
-- 使用数据库
USE 数据库名;
2)表操作
-- 查询所有表
SHOW TABLES;
-- 查询表结构
DESC 表名;
-- 查询指定表的建表语句
SHOW CREATE TABLE 表名;
-- 创建表
CREATE TABLE 表名(
	字段1 字段1类型 [约束] [COMMENT 字段1注释],
	字段2 字段2类型 [约束] [COMMENT 字段2注释],
	... ...
)[ENGINE = 存储引擎类型] [COMMENT 表注释];
-- 删除表
DROP TABLE 表名;

(2)DML

Data Manipulation Language,数据操作语言,用来对数据库表中的数据进行增删改

1)插入数据

注:插入数据时,指定的字段顺序需要与值的顺序是一一对应的 。字符串和日期型数据应该包含在引号内。插入的数据大小,应该在字段规定的范围内

-- 指定字段插入一条数据
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (1,2, ...);
-- 全部字段插入数据
INSERT INTO 表名 VALUES (1,2, ...);
-- 指定字段批量插入数据
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (1,2, ...),(1,2, ...);
-- 全部字段批量插入数据
INSERT INTO 表名 VALUES (1,2, ...),(1,2, ...);
2)修改数据
UPDATE 表名 SET 字段1 =1, 字段名2 =2, ...[WHERE条件];
3)删除数据
DELETE FROM 表名 [WHERE 条件]

(3)DQL

Data Query Language,数据查询语言,用来查询数据库中表的记录
DQL语句执行顺序:FROM,WHERE,GROUP BY [HAVING],SELECT,ORDER BY,LIMIT

1)WHERE子句操作符
运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN … AND …在某个范围之内
IN(…)在IN之后的列表中的值,多选一
LIKE 占位符模糊匹配(例如:_陪陪单个字符,%匹配任意个字符)
IS NULL是NULL
AND 或 &&
OR 或 ||
NOT 或 |
2)聚合函数

聚合函数:将一列数据作为一个整体,进行纵向计算
注:所有NULL值不参与聚合函数运算

聚合函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和
3)单表查询
-- 基本语法
SELECT
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP BY
	分组字段列表
HAVING
	分组后条件列表
GROUP BY
	排序字段列表
LIMIT 
	分页参数
	
-- 基本查询
SELECT [DISTINCT] 字段1[AS 别名1], 字段2[AS 别名1],... FROM 表名;
-- 条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
-- 分组查询
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
-- 排序查询:ASC升序,DESC降序,如果是多字段排序,当前面字段值相同时,才会根据后面字段进行排序
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式, 字段2 排序方式...;
-- 分页查询,起始索引是从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
4)多表查询

多表查询(JOIN)

(4)DCL

Data Control Language,数据库控制语言,用来创建数据库用户,控制访问数据库权限

1)管理用户

任何主机可以使用%通配

-- 查询用户
USE mysql;
SELECT * FROM user;
-- 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
-- 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY 新密码;
-- 删除用户
DROP USER '用户名'@'主机名';
2)权限控制
权限说明
ALL, ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE更新数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表

数据库和表可以使用*通配,例如所有数据库和表用*.*

-- 查询权限
SHOW GRANTS FOR  '用户名'@'主机名';
-- 授予权限
GRANT 权限列表 ON 数据库.表名 TO '用户名'@'主机名';
-- 撤销权限
REVOKE 权限列表 ON 数据库.表名 FROM '用户名'@'主机名';

三,常用内置函数

1.字符串函数

函数功能
CONCAT(S1,S2,…)将S1,S2…拼接成一个字符串
LOWER(str)将字符串str全部转为小写
UPPER(str)将字符串str全部转为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD (str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str,start,len)返回从字符串str从start位置起的len个长度字符串

2.数值函数

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x, y)返回x/y的模
RAND()返回0~1内的随机数
ROUND(x, y)求参数x的四舍五入的值,保留y位小数

3.日期函数

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1, date2)返回起始时间date1和结束时间date2之间的天数

4.流程函数

在SQL语句中实现条件筛选,从而提高语句的效率

函数功能
IF(value, t, f)如果value为true,则返回t,否则返回f
IFNULL(value1, value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN [val1] THEN [res1] … ELSE [default] END如果val1为true,返回res1,…否则返回default默认值
CASE [expr] WHEN [val1] THEN [res1] … ELSE [default] END如果expr的值等于val1,返回res1,…否则返回default默认值

四,约束

约束是作用于表中字段上的规则,用于限制存储在表中的数据,保证数据库中数据的正确,有效性和完整性

1.常见约束

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一的、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,若果未指定该字段的值,则采用默认值DEFAULT
检查约束(8.0.16版本之后)保证字段满足某一个条件CHECK
外键约束用于让两张表的数据建立连接,保证数据的一致性和完整性FOREIGN KEY

2.SQL示例

CREATE TABLE employee{
	id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键且自增',
	name VARCHAR(10) NOT NULL UNIQUE COMMENT '姓名不能为null且唯一',
	age INT CHECK (age > 0 && age < 100) COMMENT '年龄大于0小于100',
	dept_id INT DEFAULT 1 COMMENT '部门id默认为1',
	CONSTRAINT fk_emp_dept_id FOREIGN KEY dept_id REFERENCES department(id)
} COMMENT '员工表';

-- 表创建完成后再添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY dept_id REFERENCES department(id);

3.外键约束的删除/更新行为

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则也删除/更新外键在子表中的记录
SET NULL当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(注:需允许外键的值为null)
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值(注:Innodb不支持)
ALTER TABLE 表名 ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY dept_id REFERENCES department(id) ON UPDATE 行为 ON DELETE 行为;

五,事务

事务是一组操作的集合,是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求。这些操作要么同时成功,要么同时失效
MySQL数据库事务是默认提交的

1.事务操作

-- 查看/设置事务提交方式,0为未开启,1为开启
SELECT @@autocommit;
SET @@autocommit = 0;
-- 开启事务
START TRANSACTION;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;

2.事务的特性

特性说明
原子性 Atomicity事务是不可分割的最小操作单元,要么全部成功,要么全部失效
一致性 Consistency事务完成时,必须使所有的数据都保持一致状态
隔离性 Isolation数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性 Durability事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

3.并发事务问题

问题描述
脏读一个事务读到另一个事务还没提交的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同
幻读一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在

4.事务隔离级别

隔离级别脏读不可重复读幻读
读未提交 Read uncommitted可能出现可能出现可能出现
读已提交 Read commited不会可能出现可能出现
可重复读 Repeatable Read (MySQL默认级别)不会不会可能出现
串行化 Serializable不会不会不会
-- 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
-- 设置事务隔离级别
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE}
  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码届艺术家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值