SQL(Structured Query Language,结构化查询语言)由IBM首次开发,是用于存取、查询、更新数据以及管理关系数据库系统的标准编程语言,广泛应用于各类关系型数据库运维与开发场景。
SQL相关名词及语言分类
核心名词解释
索引:数据库中用于加快数据查询速度的特殊数据结构,类似于书籍的目录,可快速定位目标数据,避免全表扫描,是优化查询性能的核心手段,常见类型有B+树索引、哈希索引等。
数据库:运行数据库应用程序的载体,由硬件(如DELL R760服务器)、系统软件(如CENTOS系统)和数据库软件(如MySQL)组成,本质是一个命名空间或系统目录,对应操作系统中的一个文件夹。
默认数据库:MySQL安装后自带的核心数据库,各有专属用途,具体如下:
information_schema:虚拟库,主要存储系统中各类数据库对象的信息,例如用户表信息、列信息、权限信息、字符编码信息等,不存储实际业务数据。
mysql:授权库,核心用于存储系统用户的权限信息(如用户名、密码、操作权限等),是MySQL权限管理的核心数据库。
sys:主要存储数据库服务器的性能参数,专为数据库管理员(DBA)设计,可便捷获取mem page、io、latch/mutex/lock等各类性能数据,简化性能调优(performance tuning)和故障排查(troubleshooting)操作,例如快速定位两条SQL语句的锁阻塞问题、用户占用的系统资源等。
performance_schema:主要存储数据库服务器的性能参数,核心作用的是监控MySQL运行状态,具体包括:提供进程等待的详细信息(如锁、互斥变量、文件操作信息);保存历史事件汇总信息,为判断MySQL服务器性能提供数据支撑;支持灵活新增、删除监控事件点,可随意调整服务器监控周期。
表:数据库存储数据的基本管理单元,类似于Excel表格,用于有序组织和存储业务数据。
记录(行):表中字段的集合,是存储数据的最小单元,示例:张三,男,23,Linux运维工程师,月薪25K。
字段(列):信息的基本载体,由字段名、字段类型(含长度)、字段约束(可选)三部分组成,示例:姓名,字符类型,不能为空。
数据类型:限定字段存储数据的类型,核心分为三大类:字符型、数字型、日期型,具体用法详见下文链接。
约束:用于限定字段的存储规则,保障数据的完整性和唯一性,常见约束包括唯一约束、非空约束、自动增长约束等。

SQL语言分类
按功能可将SQL语言分为4大类,明确各类语句的核心用途,便于区分和实操记忆:
DDL(Data Definition Language):数据库定义语言,用于定义数据库对象的结构,核心操作对象包括数据库、表、视图、索引、存储过程等,常见语句:CREATE(创建)、DROP(删除)、ALTER(修改)。
DML(Data Manipulation Language):数据操纵语言,用于对表中的数据进行增删改操作,常见语句:INSERT(插入数据)、DELETE(删除数据)、UPDATE(更新数据)。
DQL(Data Query Language):数据查询语言,核心用途是从表中查询所需数据,最核心、最常用的语句为SELECT。
DCL(Data Control Language):数据库控制语言,用于管理数据库的访问权限,常见语句:GRANT(授予权限)、REVOKE(回收权限)。
MySQL数据类型
MySQL的数据类型及完整性约束是数据库设计的基础,直接影响数据存储效率和完整性,详情可参考以下链接文章,涵盖核心数据类型的用法、约束规则及实战注意事项:
DDL-库操作(数据库定义实操)
数据库名命名要求
命名需遵循以下规则,避免出现语法错误和运维隐患:
区分大小写(不同系统可能有差异,建议统一规范);
在同一MySQL实例中,数据库名必须唯一;
不能使用MySQL关键字(如create、select、database等);
不能单独使用数字或特殊符号(如“-”“@”等);
推荐命名方式:使用英文单词(对应业务场景)或拼音,简洁易懂,例如discuz(论坛业务)、school(校园业务)。
核心语法及实操示例(SQL语句大小写均可)
创建业务数据库:语法 CREATE DATABASE 数据库名; 示例:CREATE DATABASE discuz; — 创建名为discuz的业务数据库
查看所有数据库:SHOW DATABASES; — 列出当前MySQL实例中所有的数据库
选择/进入指定数据库:USE 数据库名; — 进入目标数据库,后续操作将针对该数据库执行
查询当前所在数据库:SELECT database(); — 验证当前操作的数据库,避免操作失误
删除数据库(慎用):DROP DATABASE 数据库名; — 彻底删除指定数据库及其中所有数据,无法恢复
数据库实体相关说明(运维重点)
系统中的存储位置:默认路径为 /var/lib/mysql/(可通过SHOW VARIABLES LIKE ‘datadir’; 查看实际路径);
运维操作说明:该目录下存储着数据库的核心数据文件(如ibdata1系统表空间文件、各数据库对应的文件夹及.ibd表数据文件),所有数据库的备份、清理、迁移等运维操作,均需在此目录下执行(注意权限管控,避免误删文件)。
DDL-表操作实践(数据表定义实操)
创表核心目的
表是数据库存储数据的基本单位,承接具体的业务数据;
表由若干个字段(列)组成,每个字段对应一种数据类型,明确存储的数据格式;
核心作用:有序存储数据记录(行),便于后续的查询、更新、删除等操作,实现业务数据的规范化管理。
实操实例1:创建1列的表格(序号表)
核心目标:掌握“创建数据库→进入数据库→创建表→插入数据→查询数据→删除表”的完整流程,熟悉基础语法。
1.创建数据库
mysql> create database haha;
Query OK, 1 row affected (0.00 sec) -- 执行成功提示
2.使用数据库(进入目标库)
mysql> use haha;
Database changed -- 提示已切换至haha数据库
3.创建表格(仅1列:序号id)
-- 语法:CREATE TABLE 表名 (列名 数据类型);
mysql> create table t1 (id int);
Query OK, 0 rows affected (0.00 sec)
4.插入数据(向表中插入1条序号数据)
-- 语法:INSERT INTO 表名 VALUES (字段值);
mysql> insert into t1 values (1);
Query OK, 1 row affected (0.00 sec)
5.查看当前数据库中所有表名
mysql> show tables;
+----------------+
| Tables_in_haha |
+----------------+
| t1 |
+----------------+
1 row in set (0.00 sec) -- 仅存在t1表,创建成功
6.查询表中所有数据
-- 语法:SELECT * FROM 表名; (*表示查询所有列)
mysql> select * from t1;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec) -- 成功查询到插入的数据
7.删除表格(慎用,将彻底删除表及所有数据)
mysql> drop table t1;
Query OK, 0 rows affected (0.00 sec)
实操实例2:创建两列的表格(序号+姓名)
核心目标:掌握多列表格的创建方法,熟悉字符类型(varchar)的基础用法,区分数字与字符类型的插入差异。
1.创建表格(两列:序号id、姓名name)
-- 语法:CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型(长度));
mysql> create table t2 (id int, name varchar(20)); -- name为字符类型,长度限制20个字符
Query OK, 0 rows affected (0.01 sec)
2.查看表结构(验证字段名、数据类型是否正确)
-- 语法:DESC 表名; (DESC是DESCRIBE的缩写)
mysql> desc t2;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | | -- 数字类型,允许为空
| name | varchar(20) | YES | | NULL | | -- 字符类型,允许为空
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
3.查看当前数据库中所有表名
mysql> show tables;
+----------------+
| Tables_in_haha |
+----------------+
| t2 |
+----------------+
1 row in set (0.00 sec)
4.插入数据(重点:数字不加引号,字符必须加英文引号)
-- 语法:INSERT INTO 表名 VALUES (列1值, 列2值);
mysql> insert into t2 values (1,"zhangsan"); -- name字段用英文双引号包裹
Query OK, 1 row affected (0.00 sec)
5.查询表中所有数据
mysql> select * from t2;
+------+----------+
| id | name |
+------+----------+
| 1 | zhangsan |
+------+----------+
1 row in set (0.00 sec)
实操实例3:创建多列业务表格(学生信息表)
核心目标:结合业务场景,创建多列表格,使用enum枚举类型限制字段值,掌握批量插入数据的基础方法。
实例需求
创建数据库school,在该数据库中创建表student1,表格结构及示例记录如下:
| 字段名 | 字段名 | 字段名 | 字段名 | 说明 |
|---|---|---|---|---|
| id | name | sex | age | 字段说明 |
| 1 | tom | m | 23 | 示例记录1 |
| 2 | jack | m | 21 | 示例记录2 |
| 3 | alice | f | 19 | 示例记录3 |
核心语法:create table 表名(字段名1 类型, 字段名2 类型, 字段名3 类型, 字段名4 类型);
1.创建数据库school
mysql> create database school;
Query OK, 1 row affected (0.00 sec)
2.进入school数据库
mysql> use school;
Database changed
3.创建student1表(4列,sex字段用enum枚举类型限制值)
-- enum('m','f'):限制sex字段仅能输入'm'(男)或'f'(女),保障数据一致性
mysql> create table student1( id int, name varchar(20), sex enum('m','f'), age int );
Query OK, 0 rows affected (0.00 sec)
4.查看表名及表结构(验证创建结果)
-- 查看表名
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| student1 |
+------------------+
1 row in set (0.00 sec)
-- 查看表结构
mysql> desc student1;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | enum('m','f') | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
5.向表中插入多条记录
-- 语法:INSERT INTO 表名 VALUES (字段值1,字段值2,字段值3,字段值4);
mysql> insert into student1 values (1,'zhangsan','m',33);
Query OK, 1 row affected (0.01 sec)
mysql> insert into student1 values (2,'lisi','f',20);
Query OK, 1 row affected (0.01 sec)
mysql> insert into student1 values (1,'wangwu','m',40);
Query OK, 1 row affected (0.00 sec)
6.查看表中所有记录(验证插入结果)
mysql> select * from student1;
+------+----------+------+------+
| id | name | sex | age |
+------+----------+------+------+
| 1 | zhangsan | m | 33 |
| 2 | lisi | f | 20 |
| 1 | wangwu | m | 40 |
+------+----------+------+------+
3 rows in set (0.00 sec)
注意:查看表结构和查看表内容是两个完全不同的操作,切勿混淆:
查看表结构(desc 表名):用于验证表的字段名、数据类型、约束等配置,确认表格创建是否符合需求;
查看表内容(select * from 表名):用于查看表中实际存储的数据记录,验证插入、更新等操作的结果。