当前位置:首页 > 技术 > 正文内容

MySQL数据库基础与核心操作指南

访客 技术 2026年6月25日 1

数据库基本概念

数据库是按照特定数据结构组织、存储和管理数据的系统,它是在计算机中长期存储的、有组织的、可共享的数据集合。

数据库类型分类

  • 网状数据库:如通用汽车公司的IDS系统,采用节点方式存储
  • 层次数据库:如IBM的IMS系统,使用树状结构存储
  • 关系型数据库:如Oracle、DB2、MySQL、SQL Server,以表格形式存储,通过关联关系实现数据访问
  • 非关系型数据库:如MongoDB、Redis,多采用键值对存储方式

MySQL概述

MySQL是由瑞典MySQL AB公司开发的关系型数据库管理系统,现隶属于Oracle公司,是市场上最流行的开源关系型数据库之一。

环境配置

Windows系统配置:

  • 创建系统变量MYSQL_HOME:C:\Program Files\MySQL\MySQL Server 5.7
  • 在PATH变量中添加:%MYSQL_HOME%\bin

登录MySQL:

mysql -uroot -p密码
-- 或者
mysql -uroot -p
-- 然后输入密码

核心目录结构

  • bin目录:可执行命令文件
  • lib目录:库文件
  • include目录:头文件
  • share目录:字符集和语言信息

配置文件说明

配置文件路径:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

  • default-character-set:客户端字符集
  • character-set-server:服务端字符集
  • port:端口号
  • default-storage-engine=INNODB:默认存储引擎

SQL语言基础

SQL(结构化查询语言)是用于管理关系数据库的标准语言,主要包含增删改查操作(CRUD)。

数据库基本操作

# 查看所有数据库
SHOW DATABASES;

# 创建数据库
CREATE DATABASE mydb1;
CREATE DATABASE mydb2 CHARACTER SET gbk;
CREATE DATABASE IF NOT EXISTS mydb2;

# 查看数据库信息
SHOW CREATE DATABASE mydb2;

# 修改数据库编码
ALTER DATABASE mydb2 CHARACTER SET utf8;

# 删除数据库
DROP DATABASE mydb1;

# 查看当前数据库
SELECT DATABASE();

# 使用数据库
USE mydb2;

数据查询操作

基础查询语法

# 查询指定列
SELECT employee_id, first_name, email FROM t_employees;

# 查询所有列
SELECT * FROM t_employees;

# 列运算
SELECT employee_id, first_name, salary*12 FROM t_employees;

# 列别名
SELECT employee_id AS '编号', first_name AS '姓名', salary*12 AS '年薪' FROM t_employees;

# 去重查询
SELECT DISTINCT manager_id FROM t_employees;

排序查询

# 单列排序
SELECT employee_id, first_name, salary FROM t_employees ORDER BY CONVERT(salary, DECIMAL) ASC;

# 多列排序
SELECT employee_id, first_name, salary FROM t_employees ORDER BY salary DESC, employee_id DESC;

条件查询

# 等值查询
SELECT employee_id, first_name, salary FROM t_employees WHERE salary = 11000;

# 逻辑运算
SELECT employee_id, first_name, salary FROM t_employees WHERE salary = 11000 AND commission_pct = 0.30;

# 范围查询
SELECT employee_id, first_name, salary FROM t_employees WHERE salary BETWEEN 6000 AND 10000;

# NULL值查询
SELECT employee_id, first_name, salary, commission_pct FROM t_employees WHERE commission_pct IS NULL;

# 枚举查询
SELECT employee_id, first_name, salary, department_id FROM t_employees WHERE department_id IN (70, 80, 90);

# 模糊查询
SELECT employee_id, first_name, salary, department_id FROM t_employees WHERE first_name LIKE 'L%';

分支查询

SELECT employee_id, first_name, salary, department_id,
CASE
    WHEN salary >= 10000 THEN 'A'
    WHEN salary >= 8000 AND salary < 10000 THEN 'B'
    WHEN salary >= 6000 AND salary < 8000 THEN 'C'
    WHEN salary >= 4000 AND salary < 6000 THEN 'D'
    ELSE 'E'
END AS level
FROM t_employees;

时间函数

SELECT SYSDATE();           -- 当前系统时间
SELECT CURDATE();           -- 当前日期
SELECT CURTIME();           -- 当前时间
SELECT WEEK(SYSDATE());     -- 当前周数
SELECT YEAR('2021-3-16');   -- 指定年份
SELECT DATEDIFF('2021-2-2', '2020-2-2'); -- 间隔天数

字符串函数

SELECT CONCAT('My', 'S', 'QL');                    -- 字符串连接
SELECT INSERT('这是数据库', 3, 2, 'MySQL');        -- 字符串替换
SELECT LOWER('MYSQL');                             -- 转小写
SELECT UPPER('mysql');                             -- 转大写
SELECT SUBSTRING('JavaMySQLOracle', 5, 5);         -- 字符串截取

聚合函数

SELECT SUM(salary) FROM t_employees;    -- 求和
SELECT AVG(salary) FROM t_employees;    -- 平均值
SELECT MAX(salary) FROM t_employees;    -- 最大值
SELECT MIN(salary) FROM t_employees;    -- 最小值
SELECT COUNT(employee_id) FROM t_employees; -- 计数

分组查询

SELECT department_id, COUNT(employee_id) FROM t_employees GROUP BY department_id;
SELECT department_id, AVG(salary) FROM t_employees GROUP BY department_id;

限定查询

SELECT * FROM t_employees LIMIT 0, 5;   -- 前5条记录
SELECT * FROM t_employees LIMIT 3, 10;  -- 从第4条开始的10条记录

子查询

SELECT * FROM t_employees WHERE salary > (SELECT salary FROM t_employees WHERE first_name = 'Bruce');
SELECT * FROM t_employees WHERE department_id IN (SELECT department_id FROM t_employees WHERE last_name = 'King');

连接查询

SELECT * FROM t_employees e INNER JOIN t_departments d ON e.department_id = d.department_id;
SELECT * FROM t_employees e LEFT JOIN t_departments d ON e.department_id = d.department_id;

DML数据操作

插入数据

INSERT INTO t_jobs (job_id, job_title, min_salary, max_salary) 
VALUES ('java_le', 'java_lecturer', 2500, 9000);

更新数据

UPDATE t_employees SET salary = 25000 WHERE employee_id = '100';
UPDATE t_employees SET job_id = 'ST_MAN', salary = 3500 WHERE employee_id = '135';

删除数据

DELETE FROM t_employees WHERE employee_id = '135';
DELETE FROM t_employees WHERE first_name = 'Peter' AND last_name = 'Hall';

清空表

TRUNCATE TABLE t_countries;

数据表操作

创建表

CREATE TABLE subject (
    subjectId INT,
    subjectName VARCHAR(20),
    subjectHours INT
) CHARSET=utf8;

修改表结构

ALTER TABLE subject ADD gradeId INT;                    -- 添加列
ALTER TABLE subject MODIFY subjectName VARCHAR(10);     -- 修改列
ALTER TABLE subject DROP gradeId;                       -- 删除列
ALTER TABLE subject CHANGE subjectHours classHours INT; -- 修改列名
ALTER TABLE subject RENAME sub;                         -- 修改表名

删除表

DROP TABLE sub;

约束机制

主键约束

CREATE TABLE subject (
    subjectId INT PRIMARY KEY,
    subjectName VARCHAR(20),
    subjectHours INT
) CHARSET=utf8;

唯一约束

CREATE TABLE subject (
    subjectId INT PRIMARY KEY,
    subjectName VARCHAR(20) UNIQUE,
    subjectHours INT
) CHARSET=utf8;

自动增长

CREATE TABLE subject (
    subjectId INT PRIMARY KEY AUTO_INCREMENT,
    subjectName VARCHAR(20) UNIQUE,
    subjectHours INT
) CHARSET=utf8;

外键约束

CREATE TABLE speciality (
    id INT PRIMARY KEY AUTO_INCREMENT,
    specialName VARCHAR(20) UNIQUE NOT NULL
) CHARSET=utf8;

CREATE TABLE subject (
    subjectId INT PRIMARY KEY AUTO_INCREMENT,
    subjectName VARCHAR(20) UNIQUE NOT NULL,
    subjectHours INT DEFAULT 20,
    specialId INT NOT NULL,
    CONSTRAINT fk_subject_specialId FOREIGN KEY(specialId) REFERENCES speciality(id)
) CHARSET=utf8;

事务处理

START TRANSACTION;
UPDATE account SET money = money - 1000 WHERE id = 1;
UPDATE account SET money = money + 1000 WHERE id = 2;
COMMIT;
-- 或者出错时
ROLLBACK;

权限管理

CREATE USER 'zhangsan' IDENTIFIED BY '123';
GRANT ALL ON companydb.* TO 'zhangsan';
REVOKE ALL ON companydb.* FROM 'zhangsan';
DROP USER 'zhangsan';

视图操作

CREATE VIEW t_empInfo AS 
SELECT employee_id, first_name, last_name, email, salary FROM t_employees;

SELECT * FROM t_empInfo WHERE employee_id = '101';

DROP VIEW t_empInfo;

SQL语言分类

  • DQL:数据查询语言(SELECT)
  • DDL:数据定义语言(CREATE、ALTER、DROP)
  • DML:数据操作语言(INSERT、UPDATE、DELETE)
  • TPL:事务处理语言(COMMIT、ROLLBACK)
  • DCL:数据控制语言(GRANT、REVOKE)
返回列表

上一篇:Flink MySQL CDC 连接器基础配置与实现

没有最新的文章了...

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。