电视剧
sql数据库教程(SQL入门实战手册从零到一掌握数据库连接、建表、增删改查全流程)

以下详细介绍SQL基础命令,包含连接、数据库操作、表操作、数据操作、查询优化等全流程,仅供参考:


一、数据库连接管理

1. 命令行连接

mysql -u [用户名] -p[密码] -h [主机地址] [数据库名]
  • 作用:建立客户端与MySQL服务器的通信连接
  • 参数
    • -u:指定认证用户名(必需)
    • -p:密码输入提示符(交互式更安全)
    • -h:远程服务器IP(默认localhost)
    • 末尾数据库名:直接进入指定库
  • 返回值
    • 成功:显示mysql>命令行提示符
    • 失败:返回错误代码(如ERROR 1045密码错误)

安全连接示例

# 安全连接(回车后输入密码)mysql -u admin -p -h 192.168.1.100# 连接并直接使用shop_db数据库mysql -u root -p shop_db

2. 连接工具操作(Navicat)

  • 图形界面填写四要素:
  • graph LR
    A[服务器地址] --> B[端口3306]
    C[用户名] --> D[密码]
  • 连接测试:通过"Test Connection"验证配置

二、数据库层级操作

1. 创建数据库

CREATE DATAbase [IF NOT EXISTS] 数据库名[CHARACTER SET 字符集] [COLLATE 排序规则];
  • 作用:在数据库系统中划分独立存储空间
  • 关键参数
    • IF NOT EXISTS:避免重复创建报错
    • utf8mb4:推荐字符集(支持emoji)
    • utf8mb4_unicode_ci:通用排序规则
  • 物理表现:在data目录创建同名文件夹

示例

-- 创建电商数据库CREATE DATAbase IF NOT EXISTS shop_dbCHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci;

2. 查看与切换数据库

SHOW DATAbaseS;  -- 列出所有数据库USE 数据库名;     -- 设置当前工作库
  • 权限控制:用户只能看到有权限的数据库
  • 当前库标识:Database changed提示

操作演示

-- 查看所有数据库(含系统库)mysql> SHOW DATAbaseS;+--------------------+| Database           |+--------------------+| information_schema || shop_db            || mysql              |+--------------------+-- 进入shop_db库mysql> USE shop_db;Database changed

三、数据表操作

1. 创建表结构

CREATE TABLE 表名 (  列名1 数据类型 [约束条件] [COMMENT '注释'],  列名2 数据类型 [约束条件],  ...) [ENGINE=存储引擎] [CHARSET=字符集];

核心元素

元素类型

常见值

作用说明

数据类型

INT/VARCHAr(255)/DATETIME

定义列存储格式

主键约束

PRIMARY KEY

唯一标识行(不可重复)

自增属性

AUTO_INCREMENT

自动生成唯一ID

唯一约束

UNIQUE

禁止重复值(如身份证号)

枚举类型

ENUM('男','女')

限定取值范围

默认值

DEFAULT CURRENT_TIMESTAMP

自动填充默认值

建表示例

CREATE TABLE users (  id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',  username VARCHAr(50) NOT NULL UNIQUE COMMENT '用户名',  email VARCHAr(100) NOT NULL COMMENT '邮箱',  gender ENUM('男','女') NOT NULL COMMENT '性别',  reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间') ENGINE=InnoDB CHARSET=utf8mb4;

2. 表结构维护

添加字段

ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [FIRST|AFTER 列名];
  • 定位参数
    • FIRST:插入到首列
    • AFTER 列名:插入到指定列后

修改字段

-- 修改数据类型ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型;-- 重命名字段ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 数据类型;

示例操作

-- 添加手机号字段(在email后)ALTER TABLE users ADD COLUMN mobile CHAr(11) COMMENT '手机号' AFTER email;-- 修改用户名字段长度ALTER TABLE users MODIFY COLUMN username VARCHAr(70);

四、数据操作核心命令

1. 插入数据

-- 全字段插入INSERT INTO 表名 VALUES (值1, 值2, ...);-- 指定字段插入INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);-- 批量插入INSERT INTO 表名 (列1, 列2) VALUES   (值1a, 值2a),  (值1b, 值2b);

注意事项

  • 自增字段无需插入
  • NOT NULL字段必须提供值
  • 枚举值必须从选项中选取

实战示例

-- 单条插入INSERT INTO users (username, email, gender) VALUES ('jack', 'jack@example.com', '男');-- 批量插入商品数据INSERT INTO products (name, price, stock) VALUES  ('iPhone 14', 5999, 100),  ('MacBook Pro', 12999, 50),  ('AirPods Pro', 1499, 200);

2. 查询数据

SELECt [DISTINCT] 列1, 列2 AS 别名 FROM 表名 [WHERe 条件] [GROUP BY 分组列] [HAVINg 分组条件] [ORDER BY 排序列 [ASC|DESC]] [LIMIT 行数];

核心子句

子句

作用

常用运算符

WHERe

行级过滤

=, >, <, LIKE, IN, BETWEEN

GROUP BY

分组统计

常配合COUNT/SUM/AVG使用

HAVINg

分组后过滤

类似WHERe但作用于组

ORDER BY

结果排序

ASC升序/DESC降序

LIMIT

限制返回行数

实现分页功能

查询示例

-- 基础查询SELECt id, username, email FROM users;-- 条件过滤SELECt * FROM products WHERe price > 5000 AND stock < 100;-- 模糊搜索SELECt * FROM users WHERe username LIKE '张%';-- 分页查询SELECt * FROM orders ORDER BY order_date DESC LIMIT 10 OFFSET 20;

3. 更新数据

UPDATe 表名 SET 列1=新值1, 列2=新值2 [WHERe 条件] [ORDER BY 列] [LIMIT 行数];

关键要点

  • 必须加WHERe条件:避免全表更新
  • 原子性保证:单条UPDATE是原子操作
  • 性能影响:大表更新建议分批执行

安全更新示例

-- 修改特定用户邮箱UPDATE users SET email = 'new@example.com' WHERe id = 1001;-- 商品涨价10%(仅库存>50的)UPDATE products SET price = price * 1.1 WHERe stock > 50;

4. 删除数据

DELETE FROM 表名 [WHERe 条件] [ORDER BY 列] [LIMIT 行数];

与DROp的区别

命令

作用范围

是否可恢复

DELETE

删除数据行

binlog可恢复

DROP

删除整个表结构

不可恢复

安全删除示例

-- 删除30天前的日志DELETE FROM access_log WHERe access_time < NOW() - INTERVAL 30 DAY;-- 清空表数据(更高效)TRUNCATE TABLE temp_data;

五、高级查询技巧

1. 多表连接查询

连接类型对比

连接类型

语法

结果说明

内连接

INNER JOIN / JOIN

仅返回匹配行

左连接

LEFT JOIN

左表全量+右表匹配

右连接

RIGHT JOIN

右表全量+左表匹配

全外连接

MySQL需UNIOn实现

返回所有匹配和不匹配行

连接查询示例

-- 查询订单及用户信息SELECt   o.order_id,   o.amount,  u.username,  u.emailFROM orders oJOIN users u ON o.user_id = u.idWHERe o.status = 'PAID';-- 左连接保留未分类商品SELECt   p.product_name,  c.category_nameFROM products pLEFT JOIN categories c ON p.cat_id = c.cat_id;

2. 分组聚合统计

SELECt   分组列,   COUNT(*) AS 总数,  AVG(数值列) AS 平均值,  MAX(数值列) AS 最大值FROM 表名GROUP BY 分组列HAVINg 统计条件;

执行顺序

SQL入门实战手册从零到一掌握数据库连接、建表、增删改查全流程nerror="javascript:errorimg.call(this);">

graph LRA[FROM] --> B[WHERe] B --> C[GROUP BY]C --> D[HAVINg] D --> E[SELECt]

统计示例

-- 按性别统计用户数SELECT   gender AS 性别,  COUNT(*) AS 用户数FROM usersGROUP BY gender;-- 月销售额>10万的月份SELECt   DATE_FORMAT(order_date, '%Y-%m') AS 月份,  SUM(amount) AS 总销售额FROM ordersGROUP BY 月份HAVINg 总销售额 > 100000;

六、权限管理与数据安全

1. 用户权限控制

-- 创建用户CREATE USER '用户名'@'访问来源' IDENTIFIED BY '密码';-- 授权GRANT 权限列表 ON 数据库.表 TO '用户'@'来源';-- 撤销权限REVOKE 权限 ON 数据库.表 FROM '用户'@'来源';-- 删除用户DROp USER '用户名'@'访问来源';

权限类型

  • 数据操作:SELECT, INSERT, UPDATE, DELETE
  • 结构管理:CREATE, ALTER, DROP
  • 管理权限:GRANT OPTION, SUPER

权限配置示例

-- 创建应用用户(允许内网访问)CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'SecurePass123!';-- 授予shop_db的读写权限GRANT SELECT, INSERT, UPDATE ON shop_db.* TO 'app_user'@'192.168.1.%';-- 查看用户权限SHOW GRANTS FOR 'app_user'@'192.168.1.%';

2. 数据备份恢复

逻辑备份(mysqldump)

# 全库备份mysqldump -u root -p --databases shop_db > shop_db_full.sql# 单表备份mysqldump -u root -p shop_db products > products.sql

物理备份方案

  • 企业级:MySQL Enterprise Backup
  • 开源方案:Percona XtraBackup

恢复数据

# 命令行恢复mysql -u root -p shop_db < backup.sql# 登录后恢复mysql> source /path/to/backup.sql

七、实战案例:电商系统操作

1. 数据准备

-- 创建商品表CREATE TABLE products (  product_id INT PRIMARY KEY AUTO_INCREMENT,  name VARCHAr(100) NOT NULL,  price DECIMAL(10,2) NOT NULL,  stock INT DEFAULT 0,  category ENUM('电子','服装','食品'));-- 插入示例数据INSERT INTO products (name, price, category) VALUES  ('华为P50', 4999.00, '电子'),  ('耐克运动鞋', 899.00, '服装'),  ('三只松鼠礼盒', 198.00, '食品');

2. 常用操作示例

商品管理

-- 上架新商品INSERT INTO products (name, price, category)VALUES ('iPad Pro', 6799.00, '电子');-- 调整价格UPDATE products SET price = price * 0.9 WHERe category = '电子';-- 下架无库存商品DELETE FROM products WHERe stock = 0;

数据查询

-- 按类别统计平均价格SELECt   category AS 类别,  AVG(price) AS 平均价格,  COUNT(*) AS 商品数FROM productsGROUP BY category;-- 查询电子类商品(价格降序)SELECt * FROM products WHERe category = '电子'ORDER BY price DESC;

八、SQL操作避坑指南

1. 常见错误处理

错误代码

原因

解决方案

1064

SQL语法错误

检查引号/逗号/关键字拼写

1146

表不存在

检查表名大小写

1054

列不存在

检查列名或别名

1292

数据类型转换错误

检查数据格式是否匹配

2. 性能优化建议

  1. 索引策略:-- 低效 ❌
    SELECt * FROM users WHERe YEAR(reg_date) = 2023;

    -- 高效 ✅
    SELECt * FROM users
    WHERe reg_date BETWEEN '2023-01-01' AND '2023-12-31';
  2. 在WHERe/JOIN条件列创建索引
  3. 避免在索引列使用函数
  4. 避免全表扫描
  5. 使用LIMIT分页
  6. 避免SELECT *只取必要字段
  7. 批量操作优化:-- 批量插入优于单条循环
    INSERT INTO logs (message) VALUES ('msg1'),('msg2'),('msg3');

    -- 批量更新减少连接次数
    UPDATE products
    SET price = CASE product_id
    WHEN 1001 THEN 99.9
    WHEN 1002 THEN 129.9
    END
    WHERe product_id IN (1001,1002);

九、数据类型对照表

类型分类

MySQL类型

存储内容

示例值

整数

TINYINT

小整数(-128~127)

100


INT

标准整数(±21亿)

2000000

小数

DECIMAL(10,2)

精确小数

999999.99


FLOAT

单精度浮点

3.1415

字符串

CHAr(10)

定长字符串

'ABC'(补空格)


VARCHAr(255)

变长字符串

'可变长度文本'

日期时间

DATE

日期

'2023-07-05'


DATETIME

日期+时间

'2023-07-05 14:30:00'

二进制

BLOB

二进制大对象

图片/文件

特殊类型

ENUM('Y','N')

枚举值

'Y'


JSON

JSON文档

'{"name":"Jack"}'


总结与学习路径

SQL操作四阶段

  1. 基础操作:连接→建库→建表→增删改查
  2. 结构设计:数据类型选择→约束优化→索引策略
  3. 高级查询:多表连接→分组聚合→子查询优化
  4. 管理维护:用户权限→备份恢复→性能调优

推荐学习路径

  1. 熟练掌握单表CRUD操作
  2. 理解JOIN和GROUP BY的工作原理
  3. 掌握EXPLAIN分析查询执行计划
  4. 在生产环境前充分测试SQL语句

提示:所有SQL操作建议先在测试环境验证,使用事务包裹关键操作(START TRANSACTION / ROLLBACK),并定期进行数据库备份。


顶一下()     踩一下()

热门推荐

发表评论
0评