客户让我给她写个爬虫-数据库语言

36 阅读4分钟

客户让我给她写个爬虫

SQL 语法基础:从入门到实践

引言

在开发高德地图商场数据爬虫项目时,我们需要使用 SQL 来操作 MySQL 数据库。SQL(Structured Query Language)是用于管理关系型数据库的标准语言。本文将介绍 SQL 的基础语法,帮助你快速掌握数据库操作。

一、SQL 基础概念

1.1 SQL 分类

  • DDL(数据定义语言):创建、修改、删除数据库对象
  • DML(数据操作语言):增删改查数据
  • DCL(数据控制语言):管理用户权限
  • TCL(事务控制语言):管理事务

1.2 常用数据类型

  • 数值类型:INT、DECIMAL、FLOAT
  • 字符串类型:VARCHAR、CHAR、TEXT
  • 日期时间:DATETIME、TIMESTAMP
  • 布尔类型:BOOLEAN

二、数据库操作

2.1 创建数据库

CREATE DATABASE mall_crawler
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

2.2 使用数据库

USE mall_crawler;

2.3 删除数据库

DROP DATABASE mall_crawler;

三、表操作

3.1 创建表

CREATE TABLE mall_info (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    mall_id VARCHAR(64) NOT NULL,
    name VARCHAR(255) NOT NULL,
    address VARCHAR(512),
    phone VARCHAR(64),
    business_hours VARCHAR(255),
    rating DECIMAL(2,1),
    latitude DECIMAL(10,6),
    longitude DECIMAL(10,6),
    city VARCHAR(64),
    district VARCHAR(64),
    category VARCHAR(64),
    description TEXT,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_mall_id (mall_id),
    KEY idx_city (city),
    KEY idx_district (district)
);

3.2 修改表

-- 添加列
ALTER TABLE mall_info ADD COLUMN status TINYINT DEFAULT 1;

-- 修改列
ALTER TABLE mall_info MODIFY COLUMN phone VARCHAR(32);

-- 删除列
ALTER TABLE mall_info DROP COLUMN status;

3.3 删除表

DROP TABLE mall_info;

四、数据操作

4.1 插入数据

-- 单条插入
INSERT INTO mall_info (mall_id, name, address, city)
VALUES ('123456', '万达广场', '北京市朝阳区', '北京');

-- 批量插入
INSERT INTO mall_info (mall_id, name, address, city)
VALUES
    ('123457', '大悦城', '北京市朝阳区', '北京'),
    ('123458', '王府井', '北京市东城区', '北京');

4.2 更新数据

-- 更新单条记录
UPDATE mall_info
SET address = '北京市朝阳区建国路88号'
WHERE mall_id = '123456';

-- 批量更新
UPDATE mall_info
SET status = 0
WHERE city = '北京';

4.3 删除数据

-- 删除单条记录
DELETE FROM mall_info WHERE mall_id = '123456';

-- 批量删除
DELETE FROM mall_info WHERE city = '北京';

-- 清空表
TRUNCATE TABLE mall_info;

4.4 查询数据

-- 基本查询
SELECT * FROM mall_info;

-- 条件查询
SELECT name, address, phone
FROM mall_info
WHERE city = '北京' AND rating >= 4.5;

-- 排序
SELECT * FROM mall_info
ORDER BY rating DESC, create_time DESC;

-- 分页
SELECT * FROM mall_info
LIMIT 10 OFFSET 0;

-- 分组统计
SELECT city, COUNT(*) as mall_count, AVG(rating) as avg_rating
FROM mall_info
GROUP BY city
HAVING mall_count > 10;

-- 多表关联
SELECT m.name, m.address, d.district_name
FROM mall_info m
JOIN district_info d ON m.district = d.district_code;

五、高级查询

5.1 子查询

-- 使用子查询
SELECT * FROM mall_info
WHERE rating > (SELECT AVG(rating) FROM mall_info);

-- IN子查询
SELECT * FROM mall_info
WHERE city IN (SELECT city FROM city_info WHERE province = '北京');

5.2 联合查询

-- UNION
SELECT name, address FROM mall_info
UNION
SELECT name, address FROM historical_mall_info;

5.3 窗口函数

-- 排名
SELECT
    name,
    rating,
    RANK() OVER (ORDER BY rating DESC) as rank
FROM mall_info;

六、索引使用

6.1 创建索引

-- 创建普通索引
CREATE INDEX idx_name ON mall_info(name);

-- 创建唯一索引
CREATE UNIQUE INDEX uk_phone ON mall_info(phone);

-- 创建联合索引
CREATE INDEX idx_city_district ON mall_info(city, district);

6.2 删除索引

DROP INDEX idx_name ON mall_info;

七、事务处理

7.1 事务示例

-- 开始事务
START TRANSACTION;

-- 执行操作
UPDATE mall_info SET status = 0 WHERE city = '北京';
INSERT INTO mall_log (mall_id, operation) VALUES ('123456', 'UPDATE');

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;

八、性能优化建议

8.1 查询优化

  1. 使用合适的索引
  2. 避免使用 SELECT *
  3. 使用 EXPLAIN 分析查询
  4. 优化 WHERE 条件
  5. 合理使用 JOIN

8.2 索引优化

  1. 遵循最左前缀原则
  2. 避免冗余索引
  3. 考虑索引的选择性
  4. 注意索引的维护成本

结语

SQL 是数据库操作的基础,掌握 SQL 语法对于开发数据库应用至关重要。本文介绍了 SQL 的基础语法和常用操作,希望能帮助你更好地使用 MySQL 数据库。在实际开发中,建议根据具体需求选择合适的 SQL 语句,并注意查询性能的优化。