数据库操作

一、数据库的核心概念

  1. 数据库( Database
    • 数据的逻辑容器,用于分类管理数据。
    • 示例:一个电商系统可能包含 user_db(用户数据)、order_db(订单数据)等。
  2. 表( Table
    • 结构化数据的集合,由行(记录)和列(字段)组成。
    • 设计原则:遵循数据库范式(如第一范式:字段不可再分)。
  3. 索引( Index
    • 提高查询速度的数据结构,但会增加写操作的开销。
    • 类型:主键索引、唯一索引、普通索引、全文索引。

二、 SQL 语句分类

  1. DDL Data Definition Language
    • 定义数据库结构:CREATE, ALTER, DROP。
    • 示例:

ALTER TABLE users ADD INDEX idx_created_at (created_at); -- 添加索引

  1. DML Data Manipulation Language
    • 操作数据:INSERT, UPDATE, DELETE, SELECT。
    • 示例:

UPDATE users SET status = 'inactive' WHERE last_login < '2023-01-01';

  1. DCL Data Control Language
    • 控制权限:GRANT, REVOKE。
    • 示例:

GRANT SELECT, INSERT ON sales.* TO 'report_user'@'%';

  1. TCL Transaction Control Language
    • 管理事务:COMMIT, ROLLBACK, SAVEPOINT

三、数据库操作

  1. 创建数据库

CREATE DATABASE database_name;

  1. 删除数据库

DROP DATABASE database_name;

  1. 切换数据库

USE database_name;


四**、表操作**

  1. 创建表

CREATE TABLE users (

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(50) NOT NULL,

email VARCHAR(100) UNIQUE,

age INT DEFAULT 18,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

  1. 删除表

DROP TABLE users;

  1. 修改表结构

-- 添加列

ALTER TABLE users ADD COLUMN address VARCHAR(200);

-- 删除列

ALTER TABLE users DROP COLUMN age;

-- 修改列类型

ALTER TABLE users MODIFY COLUMN name VARCHAR(100);

  1. 查看表结构

DESC users;


五**、数据操作(** CRUD

  1. 插入数据

INSERT INTO users (name, email, age)

VALUES ('张三', 'zhangsan@example.com', 25);

  1. 查询数据

-- 查询所有字段

SELECT * FROM users;

-- 条件查询

SELECT name, email FROM users WHERE age > 20;

-- 排序

SELECT * FROM users ORDER BY created_at DESC;

-- 分页

SELECT * FROM users LIMIT 10 OFFSET 0; -- 1 页,每页 10

-- 聚合函数

SELECT COUNT(*) AS total_users FROM users;

SELECT AVG(age) FROM users;

-- 多表连接( JOIN

SELECT orders.id, users.name

FROM orders

LEFT JOIN users ON orders.user_id = users.id;

  1. 更新数据

UPDATE users

SET age = 26, email = 'new_email@example.com'

WHERE id = 1;

  1. 删除数据

DELETE FROM users WHERE id = 1;

-- 清空表(谨慎使用!)

TRUNCATE TABLE users;


六**、索引优化**

  1. 创建索引

CREATE INDEX idx_name ON users(name);

CREATE UNIQUE INDEX idx_email ON users(email);

  1. 删除索引

DROP INDEX idx_name ON users;


七**、事务管理**

START TRANSACTION;

-- 执行操作(如插入、更新)

INSERT INTO orders (user_id, amount) VALUES (1, 100);

UPDATE users SET balance = balance - 100 WHERE id = 1;

-- 提交或回滚

COMMIT; -- 确认操作

ROLLBACK; -- 撤销操作


八.用户与权限

  1. 创建用户

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';

  1. 授予权限

GRANT SELECT, INSERT ON database_name.* TO 'new_user'@'localhost';

  1. 撤销权限

REVOKE DELETE ON database_name.* FROM 'user'@'localhost';


九.备份与恢复

  1. 备份数据库

mysqldump -u username -p database_name > backup.sql

  1. 恢复数据库

mysql -u username -p database_name < backup.sql


十**、进阶操作**

  1. 存储过程

DELIMITER //

CREATE PROCEDURE GetUser(IN userId INT)

BEGIN

SELECT * FROM users WHERE id = userId;

END //

DELIMITER ;

-- 调用存储过程

CALL GetUser(1);

  1. 视图

CREATE VIEW user_summary AS

SELECT id, name, email FROM users WHERE age > 18;

相关推荐
TDengine (老段)1 小时前
连接 TDengine 遇到报错 “failed to connect to server, reason: Connection refused” 怎么办?
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
李慕婉学姐2 小时前
Springboot黄河文化科普网站5q37v(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
Cabbage_acmer2 小时前
MySQL期中考试突击!
数据库·mysql
Lu Yao_2 小时前
Redis 缓存
数据库·redis·缓存
小桥流水人家哇3 小时前
性能测试单场景测试时,是设置并发读多个文件,还是设置不同的用户读不同的文件?
数据库·性能测试技巧
表示这么伤脑筋的题我不会3 小时前
Oracle 21C 部署ogg踩过的坑
数据库·oracle
你不是我我3 小时前
【Java 开发日记】MySQL 与 Redis 如何保证双写一致性?
数据库·redis·缓存
望获linux3 小时前
【实时Linux实战系列】实时 Linux 在边缘计算网关中的应用
java·linux·服务器·前端·数据库·操作系统
fredinators3 小时前
数据库专家
大数据·数据库
fredinators4 小时前
数据库flask访问
数据库·oracle·flask