本文共 6304 字,大约阅读时间需要 21 分钟。
MySQL 是一款流行的关系型数据库管理系统,广泛应用于Web开发、数据分析等领域。本文将从基础到进阶,详细介绍MySQL的使用方法和相关知识点。
MySQL 在安装完成后,默认会自动启动服务。以下是启动和停止 MySQL 的命令:
启动 MySQL
net start mysql80
停止 MySQL
net stop mysql80
注意:请确保 MySQL 服务已经安装并配置正确。
MySQL 提供了多种方式供用户连接数据库,以下是常用的方法:
方法一:MySQL 提供的命令行客户端
使用 MySQL 提供的命令行工具连接数据库。例如:mysql [-h 127.0.0.1] [-p 3306] -u root -p
请注意:-p
选项会提示输入密码。
方法二:系统自带的命令行工具
直接使用系统自带的命令行工具执行 MySQL 命令。例如:mysql -u root -p
在 CentOS 系统中,MySQL 的相关操作可以通过以下命令实现:
登录 MySQL
mysql -u root -p
MySQL 配置文件
MySQL 的配置文件通常位于/etc/my.cnf
,可以用于配置数据库的运行参数,如端口、数据目录等。启动 MySQL
service mysql start
或者:
service mysqld start
或者使用 systemctl:
systemctl start mysqld.service
停止 MySQL
service mysql stop
或者:
service mysqld stop
或者:
systemctl stop mysqld.service
重启 MySQL
service mysql restart
或者:
service mysqld restart
或者:
systemctl restart mysqld.service
查询状态
service mysql status
或者:
service mysqld status
或者:
systemctl status mysqld.service
MySQL 的 SQL 语句分为多种类型,主要包括 DDL、DML、DQL 等。以下是几种基本类型的说明:
注释
--
或 #
/* */
SQL 语句结尾
MySQL 的 SQL 语句一般以分号;
结尾。不区分大小写
MySQL 的 SQL 语句对大小写不敏感,但建议规范编写为大写字母。SQL 语句分类
根据作用可将 SQL 语句分为以下几类:DDL(数据定义语言)
用于定义数据库对象,如数据库、表和字段等。DML(数据操作语言)
用于对数据库表中的数据进行增删改。DQL(数据查询语言)
用于查询数据库中表的记录。DCL(数据控制语言)
用于管理数据库用户和权限。数据库操作
CREATE DATABASE mydatabase;
或者:
DROP DATABASE mydatabase;
表操作
CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(10) NOT NULL UNIQUE, age INT CHECK (age >= 0 AND age <= 120), status CHAR(1) DEFAULT '1', gender CHAR(1)) COMMENT '学生信息表';
字段操作
对字段进行增删改查,例如:ALTER TABLE students ADD column_name DATA_TYPE(长度)【注释】【约束】;
ALTER TABLE students MODIFY column_name NEW_DATA_TYPE(长度);
ALTER TABLE students CHANGE old_column_name new_column_name NEW_DATA_TYPE(长度);
ALTER TABLE students DROP column_name;
表名操作
ALTER TABLE students RENAME TO new_students;
DROP TABLE students;
TRUNCATE TABLE students;
插入数据
INSERT INTO students (name, age, gender) VALUES ('张三', 25, '男');
注意:插入值应与字段顺序一致,字符串和日期数据需用引号括起来。
修改数据
UPDATE students SET name = '李四', age = 30 WHERE id = 2;
注意:默认修改当前行的指定字段值,如果没有 WHERE 条件,默认修改整张表。
删除数据
DELETE FROM students [WHERE 条件];
注意:没有 WHERE 条件,默认删除整张表的数据。删除单个字段值可使用 UPDATE 将其设为 NULL。
基础查询
SELECT * FROM students;
条件查询
SELECT name, age FROM students WHERE gender = '男' AND age > 20;
注意:between
和 and
等条件需小的数字放在前面。
聚合函数
SELECT COUNT(*) FROM students;
注意:所有 NULL 值不参与聚合计算。
分组查询
SELECT COUNT(name), name FROM students GROUP BY name HAVING count > 1;
注意:查询顺序为 WHERE > 聚合函数 > HAVING。
排序查询
SELECT name, age FROM students ORDER BY age DESC, name ASC;
分页查询
SELECT name, age FROM students LIMIT 10 OFFSET 5;
注意:起始索引从 0 开始,可以省略 LIMIT 假设起始索引为 0。
执行顺序
查询语句的执行顺序如下:用户管理
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
注意:主机名可用 %
表示任意地址。
权限控制
GRANT SELECT, INSERT ON mydatabase.* TO 'username'@'localhost';
注意:多个权限用逗号分隔,数据库名和表名可用 *
表示所有。
MySQL 提供了丰富的内置函数,主要包括字符串函数、数值函数、日期函数和流程控制函数等。以下是几种常用函数的示例:
字符串函数
CONCAT('Hello', ' World!');
数值函数
SUM(1 + 2 + 3) = 6;
日期函数
NOW() 返回当前时间和日期;DATETIME('2024-05-15 12:00:00') 解析指定日期时间;
流程控制函数
IF (条件, true_value, false_value);CASE WHEN 条件 THEN 值 END;
约束用于限制表中数据的有效性和完整性,常见约束类型包括非空约束、唯一约束、主键约束、默认约束、检查约束和外键约束。
非空约束
name VARCHAR(10) NOT NULL;
唯一约束
name VARCHAR(10) UNIQUE;
主键约束
id INT PRIMARY KEY AUTO_INCREMENT;
默认约束
status CHAR(1) DEFAULT '1';
检查约束
age INT CHECK (age >= 0 AND age <= 120);
外键约束
CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, student_id INT, student_name VARCHAR(10), FOREIGN KEY (student_id) REFERENCES students(id));
创建表时增加约束
CREATE TABLE teachers ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'id', name VARCHAR(10) NOT NULL UNIQUE COMMENT '姓名', age INT CHECK (age >= 0 AND age <= 120) COMMENT '年龄', status CHAR(1) DEFAULT '1' COMMENT '状态', gender CHAR(1) COMMENT '性别') COMMENT '驾驶表';
对已有表增加约束
ALTER TABLE teachers ADD PRIMARY KEY (id);
ALTER TABLE teachers MODIFY age INT NOT NULL AUTO_INCREMENT;
ALTER TABLE teachers ADD CHECK (age >= 0 AND age <= 120);
外键约束
ALTER TABLE orders ADD CONSTRAINT fk_student FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE ON UPDATE CASCADE;
多表关系分类
多表查询主要分为连接查询和子查询。连接查询包括内连接、外连接和自连接。连接查询
内连接
SELECT * FROM students, teachers WHERE students.id = teachers.id;
或者显式内连接:
SELECT * FROM students INNER JOIN teachers ON students.id = teachers.id;
外连接
SELECT * FROM students LEFT JOIN teachers ON students.id = teachers.id;
或者:
SELECT * FROM students RIGHT JOIN teachers ON students.id = teachers.id;
自连接
SELECT * FROM students AS s WHERE s.name = '张三';
联合查询
SELECT name, age FROM students UNION SELECT name, age FROM teachers;
注意:确保联合查询的字段类型和数量一致,且字段顺序一致。
子查询
子查询分为标量子查询、列子查询、行子查询和表子查询。标量子查询
SELECT COUNT(*) FROM teachers WHERE name = (SELECT name FROM students);
列子查询
SELECT name FROM teachers WHERE name IN (SELECT name FROM students);
行子查询
SELECT name, age FROM teachers WHERE age = (SELECT age FROM students);
表子查询
SELECT * FROM teachers WHERE name IN (SELECT name FROM students);
事务简介
事务是一组操作的集合,确保所有操作要么同时成功,要么同时失败。默认 MySQL 事务是自动提交的。事务特性(ACID)
事务操作
开始事务
START TRANSACTION;
提交事务
COMMIT;
回滚事务
ROLLBACK;
事务的隔离级别
隔离级别决定了事务的安全性和性能。常见的隔离级别包括:读未提交(Read Uncommitted)
最低隔离级别,可能导致脏读。读已提交(Read Committed)
保证事务的读操作看到其他事务的提交结果。可重复读(Repeatable Read)
提高一致性,防止不可重复读。串行化(Serializable)
最高隔离级别,保证事务的严格一致性,但性能较差。并发事务可能导致的问题包括脏读、不可重复读和幻读等。需要合理设置隔离级别以确保数据一致性。
MySQL 体系结构
MySQL 的存储引擎决定了数据存储和索引的方式。默认存储引擎为 InnoDB。存储引擎类型
存储引擎选择
根据应用需求选择合适的存储引擎,InnoDB 是推荐的默认选择。索引概述
索引是优化查询性能的重要工具,但也需要合理设计。索引结构
索引分类
索引语法
CREATE INDEX idx_name ON table_name (column_name);
索引性能分析
SQL 执行频率
通过观察常用 SQL 查询的执行频率来决定是否需要索引。慢查询日志
启用慢查询日志,分析长时间运行的查询并优化索引。explain 执行计划
使用 explain 命令分析查询执行计划,优化索引结构。profiling
通过 profiling 工具分析查询性能,找出性能瓶颈。通过以上内容,可以全面了解 MySQL 的基础和进阶知识,包括启动停止 MySQL、SQL 语句操作、存储引擎选择、索引优化等。MySQL 的学习是一个持续的过程,随着项目需求的变化,可以不断深入探索和优化数据库配置和查询性能。
转载地址:http://tabfk.baihongyu.com/