2.2 数据库的增删改查与常见数据库函数

插入/添加数据

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');  -- 插入单条记录
INSERT INTO users (name, email) VALUES 
    ('Charlie', 'charlie@example.com'),
    ('David', 'david@example.com');  -- 插入多条记录
INSERT INTO users (name, email) 
SELECT name, email FROM old_users WHERE age > 20;  -- 从其他表复制

查询数据

SELECT * FROM users;  -- 查询所有记录
SELECT name, email FROM users;  -- 查询指定字段
SELECT DISTINCT name FROM users;  -- 去重查询
SELECT * FROM users WHERE age > 20 ORDER BY name DESC;  -- 带条件和排序
SELECT * FROM users LIMIT 10;  -- 限制结果集大小

删除数据

DELETE FROM users WHERE id = 1;  -- 删除单条记录
DELETE FROM users WHERE age > 30;  -- 带条件删除
DELETE FROM users;  -- 删除所有记录

更新数据

UPDATE users SET email = 'new@example.com' WHERE id = 1;  -- 更新单条记录
UPDATE users SET age = age + 1 WHERE name LIKE 'A%';  -- 带条件更新
UPDATE users SET age = 25 WHERE id IN (1, 2, 3);  -- 使用IN运算符
UPDATE users SET age = 25 WHERE age BETWEEN 20 AND 30;  -- 使用BETWEEN运算符

多表操作

跨表操作属于对选择数据的进阶操作。在数据表设计过程中,为了避免将所有数据都存在一个数据表中,往往一张事物表存储的信息是唯一的,如电商业务中:用户基本信息表,商品基本信息表,订单表,库存表等,在实际业务分析中,如某次购买活动中的购买用户画像分析,就需要同时提取到订单表信息和用户基本信息进行关联分析,这时候就需要通过跨表关联进行数据的提取和汇总。
常见的跨表关联,主要以join的形式出现,但也有时会将某张表作为where内条件进行使用。

SELECT u.name, o.order_id 
FROM users u 
JOIN orders o ON u.id = o.user_id;  -- 内连接
SELECT u.name, o.order_id 
FROM users u 
LEFT JOIN orders o ON u.id = o.user_id;  -- 左连接

常见函数

时间函数

在处理mysql数据时,由于数据表基本存储的都是事件信息,所以需要根据分析需求去计算不同事件信息之间的时间关系,时间函数就变得尤为重要。时间函数主要包括时间提取/转换和时间计算两个方向。

  • 时间提取/转换函数
  1. 常见的时间提取函数主要包括:
函数 意义 例子
NOW() 返回当前日期和时间 '2025-12-17 14:11:29'
CURRENT_TIMESTAMP() 等同于NOW() CURRENT_TIMESTAMP() → '2025-12-17 14:11:29'
SYSDATE() 返回当前日期和时间 SYSDATE() → '2025-12-17 14:11:29'
LOCALTIME() 返回当前日期和时间 LOCALTIME() → '2025-12-17 14:11:29'
LOCALTIMESTAMP() 返回当前日期和时间 LOCALTIMESTAMP() → '2025-12-17 14:11:29'
  1. 时间日期函数
函数 意义 例子
CURDATE() 返回当前日期 CURDATE() → '2025-12-17'
CURRENT_DATE() 等同于CURDATE() CURRENT_DATE() → '2025-12-17'
  1. 日期时间格式化
函数 意义 例子
DATE_FORMAT(date, format) 格式化日期时间 DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') → '2025-12-17 14:11:29'
UNIX_TIMESTAMP() 返回当前时间戳 UNIX_TIMESTAMP() → 1734432689
FROM_UNIXTIME(timestamp) 时间戳转日期时间 FROM_UNIXTIME(1734432689) → '2025-12-17 14:11:29'
  • 时间/日期计算

主要是计算天数间隔,如注册距今天数,最近一次购买距今天数,或者两次购买时间间隔天数等,为后续分组分析做数据提取计算。

函数 意义 例子
TIMESTAMPDIFF(unit, start_time, end_time) 计算时间差(精确到秒) TIMESTAMPDIFF(MINUTE, '2025-12-17 14:00:00', NOW()) → 11
DATEDIFF(end_date, start_date) 计算日期差(天) DATEDIFF('2025-12-18', CURDATE()) → 1
ADDDATE(date, INTERVAL expr type) 日期加减 ADDDATE(CURDATE(), INTERVAL 1 DAY) → '2025-12-18'
SUBDATE(date, INTERVAL expr type) 日期减法 SUBDATE(CURDATE(), INTERVAL 1 HOUR) → '2025-12-17 13:11:29'

字符处理函数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容