颠覆认知的MySQL全解析:安装、连接到SQL三大核心语句全掌握

250 阅读20分钟

一、MySQL介绍和安装

一、MySQL简介

什么是 MySQL?

MySQL 是目前最流行的开源关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发(现属于 Oracle)。它使用结构化查询语言(SQL)进行数据的访问和管理,具备高性能、高可靠性和易使用等特点,广泛应用于 Web 开发、数据分析、ERP 系统等各种场景。

MySQL 的核心特点:
  • 开源免费:大多数功能免费开放,可商用;
  • 跨平台支持:可在 Windows、Linux、macOS 等系统运行;
  • 高性能和可扩展性:适用于中小型项目也能支撑大型系统;
  • 安全性强:提供用户权限管理和数据加密机制;
  • 与流行语言无缝集成:支持 PHP、Java、Python、Node.js 等。

二、MySQL 安装流程(以 Windows 为例)

1:下载安装包
  1. 访问官网: 👉 dev.mysql.com/downloads/
  2. 选择 “MySQL Installer for Windows” 下载适合你操作系统的安装程序(推荐使用带有 GUI 的 Full 版本)。
image.png
2:启动安装程序
  • 双击运行安装包
  • 选择安装类型(推荐 Server only)其他的可以自行学习了解
  • 安装仅安装mysql服务
image.png image.png

继续执行

image.png

执行后点击next

image.png

直到出现界面, 这里表示用哪个协议链接,端口号哪个,默认即可

image.png

继续next 默认强类型密码就行

image.png

继续next 设置密码可以自己搭配系统会提示强弱 add user可以新建其他用户,这里看你需要。我这里继续next Linxiroot.123

image.png

继续next即可直到最后出现下一个界面

image.png

出现最后一个页面点击执行即可

image.png

然后出现finish按钮,出现这个界面

image.png

后续我不需要进行配置就直接略过next了,然后再点击finish

image.png

默认已经启动中,但是可以查看

image.png
安装完成

image.png

可以使用这个来查看数据库;输入密码后可以输入show databases;来查看

image.png
MySQL默认的数据库:
  • information_schema:信息数据库,其中包括MySQL在维护的其他数据库、表、列、访问权限等信息;
  • performance_schema:性能数据库,记录着MySQLServer数据库引擎在运行过程中的一些资源消耗相关的信息;
  • mysql:用于存储数据库管理者的用户信息、权限信息以及一些日志信息等
  • sys:相当于是一个简易版的performance schema,将性能数据库中的数据汇总成更容易理解的形式;


三、安装过程中的常见问题及解决方法

问题可能原因解决方法
无法连接到 MySQL 服务服务未启动在“服务”中手动启动 MySQL
忘记 root 密码权限问题重置密码或重新初始化数据库
端口被占用3306端口被占用修改为其他端口,如 3307,并在配置中同步调整

二、MySQL连接和GUI

验证 MySQL 是否安装成功

方法一:命令行登录

这个方式需要先进行环境变量配置 image.png

配置后验证一下

image.png
mysql -u root -p

输入密码后,如果进入 MySQL 提示符,则说明安装成功。

方法二:使用 GUI 工具(navicat)

打开工具,配置连接参数(主机名、端口、用户名、密码),点击“连接”即可。

三、SQL语句和数据类型

在数据库管理中,SQL(结构化查询语言)是用于与关系型数据库交互的标准语言。SQL语句允许用户进行数据操作、查询、更新、删除等操作。

1、SQL语句的常用规范:

  • 通常关键字使用大写的,比如CREATE、TABLE、SHOW等等:
  • 一条语句结束后,需要以;结尾
  • 如果遇到关键字作为表明或者字段名称,可以使用反引号包裹;

2、SQL语句的基本结构

SQL语句一般包括以下几类操作:

  1. 数据查询(SELECT)
  2. 数据插入(INSERT)
  3. 数据更新(UPDATE)
  4. 数据删除(DELETE)
  5. 创建表(CREATE TABLE)
  6. 修改表结构(ALTER TABLE)
  7. 删除表(DROP TABLE)

3、常见的SQL数据类型

在SQL中,每个列都有一个数据类型,它决定了该列可以存储什么类型的数据。以下是一些常见的数据类型:

1. 数值类型

  • INT: 整数类型。可以存储没有小数部分的数字。
  • DECIMAL(p, s): 精确的定点数,p表示总位数,s表示小数位数。
  • FLOAT: 浮动小数点数。
  • DOUBLE: 双精度浮动小数点数,精度高于FLOAT。

2. 字符串类型

  • CHAR(n): 固定长度字符串,长度为n
  • VARCHAR(n): 可变长度字符串,最多存储n个字符。
  • TEXT: 用于存储较长的文本数据。
  • LONGTEXT: 用于存储非常大的文本数据。

3. 日期和时间类型

  • DATE: 存储日期,格式为YYYY-MM-DD
  • TIME: 存储时间,格式为HH:MM:SS
  • DATETIME: 存储日期和时间,格式为YYYY-MM-DD HH:MM:SS
  • TIMESTAMP: 用于存储时间戳,通常用于记录数据的修改时间。

4. 布尔类型

  • BOOLEAN: 用于存储TRUEFALSE值。

5. 二进制类型

  • BLOB: 存储二进制数据(如图片、文件等)。

6. 其他数据类型

  • ENUM: 枚举类型,用于限制列的值只能是预定义的一组值中的一个。
  • SET: 用于存储一组独立的值,可以包含多个值,但每个值只能选择一次。

4、常见表约束

表约束(Table Constraints)是数据库中用于定义表中数据完整性规则的约束条件。它们确保数据的有效性、一致性和可靠性。表约束可以在创建表时定义,也可以在表创建后通过修改表来添加。

1. 主键约束(PRIMARY KEY)

主键约束用于唯一标识表中的每一行数据。一个表只能有一个主键,且主键列中的每个值必须唯一且不能为空(NOT NULL)。

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

2. 外键约束(FOREIGN KEY)

外键约束用于确保表之间的引用完整性。它保证在一个表中的外键值存在于另一个表的主键或唯一键列中。

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    employee_id INT,
    order_date DATE,
    FOREIGN KEY (employee_id) REFERENCES employees(employee_id)
);

3. 唯一约束(UNIQUE)

唯一约束保证表中的某一列或某几列的值是唯一的,不会出现重复值。与主键不同,唯一约束允许列中有 NULL 值(不同数据库可能对 NULL 的处理有所不同)。

CREATE TABLE employees (
    email VARCHAR(100) UNIQUE,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

4. 检查约束(CHECK)

检查约束用于限制列中值的范围或特定条件。它确保数据符合某些预设条件。

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    age INT CHECK (age >= 18)
);

5. 非空约束(NOT NULL)

非空约束确保某一列不能包含 NULL 值。它通常用于保证必要字段(例如主键、外键等)不为空。

CREATE TABLE employees (
    employee_id INT NOT NULL,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL
);

6. 默认值约束(DEFAULT)

默认值约束用于在插入数据时,如果某列没有指定值,则为该列提供一个默认值。

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    hire_date DATE DEFAULT CURRENT_DATE
);

7. 复合约束(Composite Constraints)

复合约束是指多个列一起形成约束条件。例如,组合主键或唯一约束,它们确保组合列的值在整个表中是唯一的。

CREATE TABLE orders (
    order_id INT,
    product_id INT,
    PRIMARY KEY (order_id, product_id)
);

8. 索引约束(INDEX)

虽然索引并不是严格意义上的约束,但它们用于提高查询性能。索引可以自动或手动创建,通常在需要经常查询的列上创建索引。

CREATE INDEX idx_employee_name ON employees (last_name, first_name);

8. 自动递增(AUTO_INCREMENT)

AUTO_INCREMENT 是一种常用的数据库特性,用于自动为某一列生成唯一的数字值。通常,它用于主键列(例如,ID 列),这样每次插入新记录时,数据库会自动为该列生成一个唯一的、递增的整数值,而无需手动提供该值。

CREATE TABLE employees (
    employee_id INT AUTO_INCREMENT,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    PRIMARY KEY (employee_id)
);

这些表约束帮助维护数据的完整性和一致性,在设计数据库时非常重要。不同数据库管理系统(如 MySQL、PostgreSQL、SQL Server 等)可能在语法和细节上有所差异,但基本概念是一致的。

四、SQL语句-DDL语句

DDL(Data Definition Language)是用于定义和修改数据库结构的语言部分,主要包括创建、修改、删除数据库对象,如表、视图、索引等。 DDL(Data Definition Language,数据定义语言)是SQL的一个子集,用于定义、修改和删除数据库中的结构性对象,如表、视图、索引等。常见的DDL语句包括 CREATEALTERDROP 等,它们通常不涉及数据的操作,而是用于数据库结构的定义和修改。

常见的DDL语句:

  • CREATE:用于创建数据库对象。
  • ALTER:用于修改数据库对象。
  • DROP:用于删除数据库对象。
  • TRUNCATE:用于删除表中的所有数据。
  • RENAME:用于重命名数据库对象。
  • COMMENT:用于为数据库对象添加注释。

1. CREATE 语句

CREATE 语句用于创建新的数据库对象,如数据库、表、视图、索引等。它是数据库的最基本的定义语句。

示例:
  • 创建数据库

    CREATE DATABASE school;
    --推荐使用下面这一种方式因为上面已经存在数据库的话会提示报错。
    CREATE DATABASE IF NOT EXISTS test_study;
    --你也可以执行创建时候编码格式一般就是默认即可。
    
  • 创建表

    CREATE TABLE students (
        student_id INT PRIMARY KEY,
        first_name VARCHAR(50),
        last_name VARCHAR(50),
        birth_date DATE
    );
    
  • 创建索引

    CREATE INDEX idx_student_name
    ON students (last_name, first_name);
    
  • 创建视图

    CREATE VIEW student_view AS
    SELECT student_id, first_name, last_name
    FROM students
    WHERE birth_date > '2000-01-01';
    

2. ALTER 语句

ALTER 语句用于修改已经存在的数据库对象的结构,比如增加、删除列,修改列的数据类型等。

示例:
  • 添加列

    ALTER TABLE students
    ADD email VARCHAR(100);
    
  • 删除列

    ALTER TABLE students
    DROP COLUMN email;
    
  • 修改列的数据类型

    ALTER TABLE students
    MODIFY COLUMN first_name VARCHAR(100);
    
  • 重命名表

    ALTER TABLE students
    RENAME TO alumni;
    

3. DROP 语句

DROP 语句用于删除数据库中的对象。执行 DROP 后,数据和结构会永久丢失,因此在使用时需要非常小心。

示例:
  • 删除数据库

    DROP DATABASE school;
    --推荐加上条件更完善
    DROP DATABASE IF EXISTS test_study;
    
  • 删除表

    DROP TABLE students;
    
  • 删除索引

    DROP INDEX idx_student_name;
    
  • 删除视图

    DROP VIEW student_view;
    

4. TRUNCATE 语句

虽然 TRUNCATE 语句不是严格意义上的DDL语句,但它常被归类于DDL,因为它主要用于删除表中的所有数据,而不涉及数据的逐行删除。它比 DELETE 快,因为它不生成日志和触发器。

示例:
TRUNCATE TABLE students;

5. 其他 DDL 语句

  • RENAME 语句:重命名数据库对象(如表、列等)。

    RENAME TABLE old_table TO new_table;
    
  • COMMENT 语句:为数据库对象添加注释。

    COMMENT ON COLUMN students.first_name IS '学生的名字';
    

6. 总结

DDL语句是数据库管理中必不可少的部分,主要负责数据库对象的定义、修改和删除。与DML(数据操作语言)不同,DDL主要操作数据库结构,而非数据本身。

五、SQL语句-DML语句

DML(Data Manipulation Language,数据操作语言)

DML语句允许用户查询、插入、更新和删除数据库中的数据。DML语句的执行不直接影响数据库的结构(如表、索引等),只会影响数据本身。

常见的DML语句有以下几种:

  1. SELECT — 查询数据
  2. INSERT — 插入数据
  3. UPDATE — 更新数据
  4. DELETE — 删除数据

下面将分别介绍这些DML语句。


1. SELECT 语句

SELECT语句用于从一个或多个表中查询数据,可以通过不同的条件进行筛选和排序。

示例:
SELECT * FROM employees;

这条语句查询employees表中的所有数据。

常见用法:
  • 查询指定列:
SELECT name, salary FROM employees;
  • 带条件的查询:
SELECT * FROM employees WHERE department = 'HR';
  • 排序查询结果:
SELECT * FROM employees ORDER BY salary DESC;
  • 限制返回的记录数:
SELECT * FROM employees LIMIT 10;

2. INSERT 语句

INSERT语句用于向数据库表中插入新的数据行。

示例:
INSERT INTO employees (name, department, salary)
VALUES ('John Doe', 'IT', 60000);
批量插入数据:
INSERT INTO employees (name, department, salary)
VALUES 
  ('Alice Smith', 'Finance', 70000),
  ('Bob Johnson', 'HR', 55000),
  ('Charlie Brown', 'IT', 65000);

3. UPDATE 语句

UPDATE语句用于更新表中已存在的数据。

示例:
UPDATE employees 
SET salary = 75000 
WHERE name = 'John Doe';

这条语句将employees表中name为"John Doe"的记录的salary更新为75000。

更新多个字段:
UPDATE employees
SET salary = 80000, department = 'Marketing'
WHERE name = 'Alice Smith';
扩展

如果我们希望修改完数据后,直接可以显示最新的更新时间:

ALTER TABLE employees ADD  `update_time` TIMESTAMP 
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

4. DELETE 语句

DELETE语句用于从表中删除一条或多条数据记录。

示例:
DELETE FROM employees WHERE name = 'John Doe';

这条语句会删除employees表中name为"John Doe"的记录。

删除所有数据:
DELETE FROM employees;

注意DELETE会删除记录,但不会删除表结构;如果需要删除表结构,应该使用DROP语句。


DML语句的事务控制

在执行DML语句时,通常会涉及到事务(Transaction)的概念。事务是一组要么全部执行,要么全部不执行的操作。SQL提供了事务控制语句,帮助确保数据的完整性和一致性:

  • COMMIT:提交事务,使得所有更改持久化。
  • ROLLBACK:回滚事务,撤销自上次提交以来的所有更改。
  • SAVEPOINT:设置事务中的保存点,可以在之后进行回滚。
示例:
BEGIN;

UPDATE employees SET salary = 90000 WHERE name = 'Charlie Brown';

-- 发现错误,撤销
ROLLBACK;

小结

DML语句是数据库操作的核心,它提供了对数据库数据的增、删、改、查功能。掌握DML语句的使用,可以帮助你高效地进行数据库的管理和操作。在实际应用中,DML语句通常与事务控制一起使用,以保证数据操作的安全性和一致性。

六、SQL语句-DQL语句(重要)

DQL(Data Query Language)是SQL中的一种子语言,DQL语句是进行数据库查询操作的核心部分

DQL主要包含 SELECT 语句,它允许用户从数据库表中检索数据,可以根据条件筛选数据,排序,限制返回的数据数量等。

常见的DQL操作如下:

  • SELECT:查询数据
  • FROM:指定数据来源的表
  • WHERE:设置查询条件
  • ORDER BY:对结果进行排序
  • GROUP BY:对结果进行分组
  • HAVING:对分组后的数据进行筛选

常用的DQL操作

  1. 简单查询 使用 SELECT 语句从一个表中查询所有数据。

    SELECT * FROM employees;
    

    这里,* 表示查询该表中的所有列。

  2. 查询指定列 如果只想查询表中的部分列,可以指定列名。

    SELECT name, age, salary FROM employees;
    
  3. 条件查询 使用 WHERE 子句来筛选符合条件的数据。

    SELECT * FROM employees WHERE age > 30;
    

    该语句将查询年龄大于30岁的员工。

  4. 逻辑运算符 ANDORNOT 运算符可以组合多个条件进行查询。

    SELECT * FROM employees WHERE age > 30 AND salary > 5000;
    
  5. 排序查询 使用 ORDER BY 子句对查询结果进行排序。可以使用 ASC(升序)或 DESC(降序)指定排序方式。

    SELECT * FROM employees ORDER BY salary DESC;
    

    该查询会按薪水降序排序员工。

  6. 限制返回结果的数量 使用 LIMIT 子句来限制返回的结果行数。

    SELECT * FROM employees LIMIT 5;
    

    该查询将返回前5条员工数据。

  7. 分组查询 使用 GROUP BY 子句来对数据进行分组,并且通常结合 COUNTSUMAVG 等聚合函数一起使用。

    SELECT department, COUNT(*) FROM employees GROUP BY department;
    

    该查询将按部门分组,统计每个部门的员工数量。

  8. 过滤分组结果 使用 HAVING 子句来对分组后的数据进行进一步筛选。注意,HAVING 是对 GROUP BY 子句后的结果进行筛选的,而 WHERE 是对原始数据进行筛选的。

    SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) > 10;
    

    该查询将返回员工人数超过10人的部门。

  9. 联合查询 使用 UNIONUNION ALL 将多个查询结果进行合并。UNION 会去重,而 UNION ALL 会返回所有结果,包括重复的。

    SELECT name FROM employees WHERE age > 30
    UNION
    SELECT name FROM employees WHERE salary > 5000;
    
  10. 子查询 子查询是嵌套在主查询中的查询语句,可以用于复杂查询。

    SELECT name FROM employees WHERE department = (SELECT department FROM employees WHERE name = 'John');
    

    该查询将返回与员工 'John' 同一部门的所有员工的姓名。

DQL语句的示例

示例1:查询某一特定条件的数据
SELECT name, age FROM employees WHERE salary > 6000;

这个查询会返回所有薪水超过6000的员工的姓名和年龄。

示例2:查询并排序数据
SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 10;

这个查询会返回薪水最高的前10位员工。

示例3:使用聚合函数
SELECT department, AVG(salary) AS average_salary FROM employees GROUP BY department;

该查询会按部门分组,并计算每个部门的平均薪水。

示例4:使用HAVING子句过滤分组数据
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department HAVING COUNT(*) > 5;

这个查询会返回员工数量大于5的部门。

四、总结

DQL语句主要用于从数据库中查询数据,常见的查询操作包括选择列、添加条件、排序、分组、限制结果等。通过灵活使用 SELECT 语句和不同的子句,可以实现各种复杂的数据查询需求。在实际工作中,理解并掌握这些DQL操作,可以帮助我们更高效地获取和分析数据。

七 、SQL语句-DCL语句

DCL(Data Control Language):数据控制语言;对数据库、表格的权限进行相关访问控制操作,

常见的 DCL 语句包括 GRANTREVOKE

1. GRANT 语句

GRANT 语句用于将权限授予用户或角色。可以授予的权限包括数据库操作权限(如:SELECT、INSERT、UPDATE、DELETE)以及数据库结构权限(如:CREATE、ALTER、DROP)。

1.1 GRANT 语法
GRANT 权限类型 ON 数据库对象 TO 用户;
  • 权限类型:指定授予用户的权限类型,例如 SELECTINSERTUPDATEDELETE 等。
  • 数据库对象:指定授予权限的对象,通常是数据库、表、视图等。
  • 用户:指定要授予权限的数据库用户。
1.2 示例
  • 授予 SELECT 权限给用户

    GRANT SELECT ON employees TO 'john'@'localhost';
    
  • 授予用户对表的所有权限

    GRANT ALL PRIVILEGES ON employees TO 'admin'@'localhost';
    
  • 授予用户多个权限

    GRANT SELECT, INSERT, UPDATE ON employees TO 'manager'@'localhost';
    
  • 授予用户权限,并使其立即生效

    GRANT SELECT ON *.* TO 'user1'@'localhost';
    FLUSH PRIVILEGES;
    
  • 授予对所有数据库的所有权限

    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
    

    这条语句授予 admin 用户对所有数据库的所有权限,并且 WITH GRANT OPTION 允许用户将这些权限再授予其他用户。

2. REVOKE 语句

REVOKE 语句用于撤销之前授予的权限。与 GRANT 语句相反,REVOKE 会撤销对数据库用户的访问权限。

2.1 REVOKE 语法
REVOKE 权限类型 ON 数据库对象 FROM 用户;
  • 权限类型:要撤销的权限类型。
  • 数据库对象:指定撤销权限的对象。
  • 用户:指定要撤销权限的用户。
2.2 示例
  • 撤销用户对表的 SELECT 权限

    REVOKE SELECT ON employees FROM 'john'@'localhost';
    
  • 撤销多个权限

    REVOKE SELECT, INSERT ON employees FROM 'manager'@'localhost';
    
  • 撤销对所有数据库的所有权限

    REVOKE ALL PRIVILEGES ON *.* FROM 'admin'@'localhost';
    
  • 撤销权限后刷新权限表

    REVOKE ALL PRIVILEGES ON *.* FROM 'user1'@'localhost';
    FLUSH PRIVILEGES;
    

3. SHOW GRANTS 语句

SHOW GRANTS 语句用于显示当前数据库用户的权限。通过该语句,管理员可以查看某个用户在数据库中的所有权限。

3.1 SHOW GRANTS 语法
SHOW GRANTS FOR 用户;
3.2 示例
SHOW GRANTS FOR 'admin'@'localhost';

此语句将返回用户 admin 在数据库中的所有权限列表。

4. 权限的类型

常见的权限类型包括:

  • SELECT:允许查询数据库表。
  • INSERT:允许在表中插入数据。
  • UPDATE:允许更新表中的数据。
  • DELETE:允许删除表中的数据。
  • CREATE:允许创建新的数据库对象(如表、视图、索引等)。
  • DROP:允许删除数据库对象(如表、视图等)。
  • ALTER:允许修改数据库对象(如修改表结构)。
  • INDEX:允许创建或删除索引。
  • EXECUTE:允许执行存储过程或函数。
  • ALL PRIVILEGES:授予所有权限。

5. WITH GRANT OPTION

在授予权限时,可以使用 WITH GRANT OPTION 来允许授予者将其拥有的权限再次授予给其他用户。只有具备此选项的用户才能继续授予其他用户权限。

示例:
GRANT SELECT, INSERT ON employees TO 'user1'@'localhost' WITH GRANT OPTION;

该语句授予 user1 用户对 employees 表的 SELECTINSERT 权限,并允许 user1 将这些权限授予其他用户。

6. FLUSH PRIVILEGES

在修改用户权限(例如使用 GRANTREVOKE)后,通常需要执行 FLUSH PRIVILEGES 来刷新权限缓存,使得新的权限立即生效。

示例:
FLUSH PRIVILEGES;

7. DCL 语句的作用

  • 权限控制:DCL 语句主要用于数据库安全管理,确保不同用户对数据库的访问权限合理分配,防止数据泄露、篡改等问题。
  • 数据访问控制:通过授予或撤销特定权限,可以控制用户可以执行哪些操作,如查询数据、插入数据、删除数据等。
  • 灵活性WITH GRANT OPTION 使得权限管理更为灵活,允许用户将自己获得的权限转授权给其他用户。

8. 总结

  • DCL 语句主要包括 GRANTREVOKE,用于控制数据库用户的权限。
  • GRANT:授予权限,能够指定用户对数据库对象的访问权限。
  • REVOKE:撤销权限,用于取消用户对某个数据库对象的访问权限。
  • 权限管理:DCL 语句是确保数据库安全、避免非法访问和操作的重要工具。

使用 DCL 语句时,数据库管理员应谨慎授予权限,确保每个用户仅能访问其需要的数据和功能,避免权限过大导致潜在的安全风险。