玩转 MySQL:从基础到进阶

目录

一、数据库基础

1.什么是数据库?

2.数据库发展历程:

3.常见数据库:

4.数据库管理系统 (RDBMS):

二、MySQL 安装与配置

1.安装 MySQL:

2.MySQL 目录结构:

3.基本命令:

三、SQL 语句

1.什么是 SQL?

2.SQL 分类:

3.DDL 操作:

 4.DML 操作:

 5.DCL 操作:

 6.数据查询 (DQL)

6.1基本查询:

6.2条件查询:

6.3模糊查询:

6.4字段控制查询:

6.5排序:

6.6聚合函数:

6.7分组查询:

6.8分页查询:

6.9执行顺序:

 7.完整性约束

7.1约束概念:

7.2约束分类:

7.3主键:

7.4主键自增长:

7.5非空约束:

7.6唯一约束:

7.7外键约束:

7.8删除/更新行为:

 8.多表查询

8.1联合查询:

8.2连接查询:

8.3子查询:

 四、MySQL 系统函数

1.数值型函数:

2.字符串函数:

3.日期和时间函数:

4.流程控制函数:

5.分析函数 (MySQL 8.0+):

五、总结


一、数据库基础

1.什么是数据库

数据库是一个用于存储和管理数据的仓库。它可以帮助我们存储大量数据,方便检索,保持数据的一致性和完整性,并提供安全的数据共享和组合分析功能。

2.数据库发展历程

数据库经历了从磁盘文件存储到层次结构模型、网状结构模型,最终发展成为关系结构模型数据库。MySQL 就是一种关系型数据库,使用二维表格来存储数据。

3.常见数据库

除了 MySQL,还有 Oracle、DB2、SQL Server、Sybase、PostgreSQL 等常见数据库。

4.数据库管理系统 (RDBMS):

RDBMS 是指关系型数据库管理系统,它由数据库和数据库管理员 (DBA) 组成。数据库中包含多个表,表由表结构和表记录组成。

二、MySQL 安装与配置

1.安装 MySQL:

参考 MySQL 官方文档或教程进行安装。

2.MySQL 目录结构:

  • bin 目录:包含可执行文件。
  • data 目录:包含数据存储目录,每个目录代表一个数据库。
  • my.ini 文件:MySQL 配置文件。

3.基本命令:

  • 启动和关闭 MySQL 服务器:net start mysql 和 net stop mysql
  • 客户端登录和退出:mysql -u root -p 和 quit 或 exit

三、SQL 语句

1.什么是 SQL

SQL (Structured Query Language) 是一种结构化查询语言,用于操作关系型数据库。

2.SQL 分类

  • DDL (Data Definition Language): 数据定义语言,用于定义数据库对象,例如创建、删除、修改数据库和表。
  • DML (Data Manipulation Language): 数据操作语言,用于操作数据库记录,例如插入、修改、删除数据。
  • DCL (Data Control Language): 数据控制语言,用于定义访问权限和安全级别。
  • DQL (Data Query Language): 数据查询语言,用于查询数据库记录。

3.DDL 操作

  • 创建数据库CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET 字符集 COLLATE 排序规则字符集]
  • 删除数据库DROP DATABASE [IF EXISTS] 数据库名
  • 修改数据库编码ALTER DATABASE 数据库名 CHARACTER SET 字符集
  • 创建表CREATE TABLE 表名(列名 列类型 [列的特征], ...)
  • 删除表DROP TABLE 表名
  • 修改表ALTER TABLE 表名 ADD/DROP/MODIFY/CHANGE 列名 列类型 [列的特征]
  • 重命名表ALTER TABLE 表名 RENAME TO 新表名
DDL 操作示例:

-- 创建数据库 mydb1,使用 utf8mb4 字符集和 utf8mb4_bin 排序规则
CREATE DATABASE IF NOT EXISTS mydb1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

-- 创建表 stu,包含 sid, sname, age, gender 四个字段
CREATE TABLE stu (
  sid CHAR(6) PRIMARY KEY,
  sname VARCHAR(20) NOT NULL,
  age INT,
  gender VARCHAR(10) NOT NULL
);

-- 插入数据
INSERT INTO stu (sid, sname, age, gender) VALUES ('S_1001', '张三', 20, '男');
INSERT INTO stu (sid, sname, age, gender) VALUES ('S_1002', '李四', 22, '女');

 4.DML 操作

  • 插入数据INSERT INTO 表名(列名1,列名2, ...) VALUES(值1,值2, ...)
  • 修改数据UPDATE 表名 SET 列名1=值1, ... [WHERE 条件]
  • 删除数据DELETE FROM 表名 [WHERE 条件]
DML 操作示例:
-- 查询所有学生信息
SELECT * FROM stu;

-- 更新学生信息
UPDATE stu SET sname='李四', age=23 WHERE sid='S_1002';

-- 删除学生信息
DELETE FROM stu WHERE sid='S_1001';

 5.DCL 操作

  • 查询用户SELECT * FROM mysql.user
  • 创建用户CREATE USER 用户名@地址 IDENTIFIED BY '密码'
  • 给用户授权GRANT 权限1, ..., 权限n ON 数据库.* TO 用户名
  • 撤销授权REVOKE 权限1, ..., 权限n ON 数据库.* FROM 用户名
  • 查看用户权限SHOW GRANTS FOR 用户名
  • 删除用户DROP USER 用户名
  • 修改用户密码USE mysql; UPDATE USER SET authentication_string=PASSWORD('密码') WHERE User='用户名' and Host='IP'; FLUSH PRIVILEGES;
DCL 操作示例:
-- 查询所有用户
SELECT * FROM mysql.user;

-- 创建用户 zhangsan,密码为 123456
CREATE USER zhangsan@localhost IDENTIFIED BY '123456';

-- 给 zhangsan 用户授权,允许访问 mydb1 数据库的所有表
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb1.* TO zhangsan@localhost;

-- 撤销 zhangsan 用户的授权
REVOKE ALL ON mydb1.* FROM zhangsan@localhost;

-- 删除 zhangsan 用户
DROP USER zhangsan@localhost;

 6.数据查询 (DQL)

6.1基本查询

  • 查询所有列SELECT * FROM 表名
  • 查询指定列SELECT 列名1,列名2, ... FROM 表名

6.2条件查询

  • 使用 WHERE 子句添加条件,例如 =!=<><<=>>= 等。
  • 使用 BETWEEN … AND 查询范围。
  • 使用 IN(set) 查询指定集合。
  • 使用 IS NULL 查询 NULL 值。
  • 使用 AND 和 OR 进行逻辑运算。

6.3模糊查询

  • 使用 LIKE 关键字和通配符 % 和 _ 进行模糊匹配。

6.4字段控制查询

  • 使用 DISTINCT 去除重复记录。
  • 使用列名 AS 别名 给列名添加别名。
  • 使用函数进行计算,例如 IFNULL

6.5排序

  • 使用 ORDER BY 子句进行排序,可以指定 ASC (升序)DESC (降序)

6.6聚合函数

  • 使用 COUNT(), MAX(), MIN(), SUM(), AVG() 等函数进行纵向计算。

6.7分组查询

  • 使用 GROUP BY 子句进行分组,可以使用 HAVING 子句进行分组后过滤。

6.8分页查询

  • 使用 LIMIT 子句进行分页,例如 LIMIT 起始索引, 查询记录数

6.9执行顺序

  • FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY > LIMIT。
DCL 部分操作示例:
-- 查询所有用户
SELECT * FROM mysql.user;

-- 创建用户 zhangsan,密码为 123456
CREATE USER zhangsan@localhost IDENTIFIED BY '123456';

-- 给 zhangsan 用户授权,允许访问 mydb1 数据库的所有表
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb1.* TO zhangsan@localhost;

-- 撤销 zhangsan 用户的授权
REVOKE ALL ON mydb1.* FROM zhangsan@localhost;

-- 删除 zhangsan 用户
DROP USER zhangsan@localhost;

 7.完整性约束

7.1约束概念

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

7.2约束分类

  • 非空约束 (NOT NULL)
  • 主键约束 (PRIMARY KEY)
  • 唯一约束 (UNIQUE)
  • 默认约束 (DEFAULT)
  • 外键约束 (FOREIGN KEY)
  • 检查约束 (CHECK)

7.3主键

  • 主键是一行数据的唯一标识,要求非空且唯一。
  • 创建表时可以使用 PRIMARY KEY 关键字指定主键。
  • 主键列的值不能为 NULL,也不能重复。

7.4主键自增长

  • MySQL 提供主键自动增长功能。
  • 创建表时可以使用 AUTO_INCREMENT 关键字指定主键自增长。

7.5非空约束

  • 指定非空约束的列不能没有值。
  • 插入记录时必须给添加了非空约束的列指定值。

7.6唯一约束

  • 保证该字段的所有数据都是唯一、不重复的。
  • 查询数据时可以使用 UNIQUE 索引进行快速检索。

7.7外键约束

  • 用来让两张表的数据之间建立连接,保证数据的一致性和完整性。
  • 创建表时可以使用 FOREIGN KEY 关键字指定外键。

7.8删除/更新行为

  • CASCADE: 级联删除/更新子表记录。
  • SET NULL: 将外键列设置为 NULL。
  • NO ACTION/RESTRICT: 不允许删除/更新父表记录。
完整性约束示例:
-- 创建表 stu,使用 sid 作为主键
CREATE TABLE stu (
  sid CHAR(6) PRIMARY KEY,
  sname VARCHAR(20) NOT NULL,
  age INT NOT NULL,
  gender VARCHAR(10) NOT NULL
);

-- 创建表 emp,使用 empno 作为主键,并设置 deptno 为外键,关联 dept 表的 deptno
CREATE TABLE emp (
  empno INT PRIMARY KEY,
  ename VARCHAR(50) NOT NULL,
  deptno INT,
  FOREIGN KEY (deptno) REFERENCES dept(deptno)
);

 8.多表查询

8.1联合查询

  • 合并多个查询结果集。
  • 使用 UNION 或 UNION ALL 合并结果集,UNION 会去除重复记录,UNION ALL 不会去除重复记录。

8.2连接查询

  • 连接多张表进行查询。
  • 使用 JOIN 关键字连接多张表,包括内连接、外连接(左外连接、右外连接)、自连接。

联合查询和连接查询示例: 

多表查询示例:
-- 查询所有学生信息以及他们所在的部门名称
SELECT stu.*, dept.dname FROM stu JOIN dept ON stu.deptno = dept.deptno;

-- 查询所有销售员信息以及他们的部门和部门经理信息
SELECT emp.*, dept.dname, manager.ename AS manager_name FROM emp JOIN dept ON emp.deptno = dept.deptno
JOIN emp manager ON emp.mgr = manager.empno;

8.3子查询

  • 嵌套查询,即 SELECT 语句中包含 SELECT 语句。
  • 根据子查询结果形式分为标量子查询、列子查询、行子查询、表子查询。

子查询示例: 

子查询示例:
-- 查询工资高于平均工资的员工信息
SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp);

-- 查询所有工资高于部门平均工资的员工信息
SELECT * FROM emp WHERE sal > (
  SELECT AVG(sal) FROM emp e WHERE e.deptno = emp.deptno
);

 四、MySQL 系统函数

1.数值型函数

  • ABS: 求绝对值。
  • SQRT: 求二次方根。
  • MOD: 求余数。
  • CEIL/FLOOR: 向上/向下取整。
  • RAND: 生成随机数。
  • SIGN: 返回参数符号。
  • POW/POWER: 求幂。
  • SIN/ASIN: 求正弦/反正弦值。
  • COS/ACOS: 求余弦/反余弦值。
  • TAN/ATAN: 求正切/反正切值。
  • COT: 求余切值。

2.字符串函数

  • LENGTH: 计算字符串长度。
  • CONCAT: 合并字符串。
  • INSERT: 替换字符串。
  • LOWER/UPPER: 转换大小写。
  • LEFT/RIGHT: 截取字符串。
  • TRIM: 去除空格。
  • REPLACE: 替换字符串。
  • SUBSTRING: 截取字符串。
  • REVERSE: 反转字符串。

3.日期和时间函数

  • CURDATE/CURRENT_DATE: 返回当前日期。
  • CURTIME/CURRENT_TIME: 返回当前时间。
  • NOW/SYSDATE: 返回当前日期和时间。
  • UNIX_TIMESTAMP: 获取 UNIX 时间戳。
  • FROM_UNIXTIME: 将 UNIX 时间戳转换为时间格式。
  • MONTH/MONTHNAME: 获取月份。
  • DAYNAME/DAYOFWEEK: 获取星期几。
  • WEEK: 获取周数。
  • DAYOFYEAR/DAYOFMONTH: 获取年中的天数/月中的天数。
  • YEAR: 获取年份。
  • TIME_TO_SEC/SEC_TO_TIME: 时间转换。
  • DATE_ADD/ADDDATE: 日期相加。
  • DATE_SUB/SUBDATE: 日期相减。
  • ADDTIME/SUBTIME: 时间相加/相减

4.流程控制函数

  • IF: 如果条件为真,则返回结果1,否则返回结果2。
  • IFNULL: 如果被检测值为 NULL,则返回默认值,否则返回被检测值。
  • CASE: 根据不同条件返回不同的结果。

5.分析函数 (MySQL 8.0+):

  • ROW_NUMBER: 为查询结果生成唯一的序号。
  • RANK: 为具有相同值的行生成相同的排名。
  • DENSE_RANK: 为具有相同值的行生成连续的排名。

五、总结:

MySQL 数据库是构建现代 Web 应用程序的核心组成部分,它为我们提供了一种高效、可靠的方式来存储和管理数据。通过学习 MySQL 数据库,我们可以掌握数据定义、数据操作和数据查询的强大功能,并能够运用这些功能构建各种类型的数据库应用程序。

学习 MySQL 数据库,不仅仅是学习一种数据库管理系统,更是学习一种思维方式,一种解决问题的方法。通过学习 MySQL 数据库,我们可以更好地理解数据之间的关系,并能够运用数据库设计范式构建高效、可靠的数据库系统。同时,我们也能够掌握 SQL 语言,一种强大的数据查询和操作工具,它可以帮助我们更有效地处理数据,并从中提取有价值的信息。

 

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值