TiDB SQL操作详解:从基础到实践


🌺The Begin🌺点点关注,收藏不迷路🌺

前言

作为一款兼容MySQL的分布式数据库,TiDB提供了完整的SQL支持,使开发者能够轻松迁移和使用。本文将全面介绍TiDB中的SQL基本操作,涵盖DDL、DML、DQL和DCL四大类语句,帮助快速掌握TiDB的SQL使用技巧。

一、数据库管理(DDL)

dbeaver 管理工具连接:
在这里插入图片描述

在这里插入图片描述

安装 MySQL 客户端。如果已安装,则跳过这一步骤。

yum -y install mysql

使用 MySQL 客户端访问 TiDB 数据库,密码为空:

mysql -h 192.168.234.10 -P 4000 -u root

1.1 查看数据库

-- 查看所有数据库
SHOW DATABASES;

-- 示例输出:
-- +--------------------+
-- | Database           |
-- +--------------------+
-- | INFORMATION_SCHEMA |
-- | mysql              |
-- | performance_schema |
-- | test               |
-- +--------------------+

在这里插入图片描述

1.2 使用数据库

-- 切换当前数据库
USE mysql;

-- 查看当前数据库中的表
SHOW TABLES;

在这里插入图片描述

1.3 创建和删除数据库

-- 创建数据库(安全方式)
CREATE DATABASE IF NOT EXISTS samp_db;

USE samp_db;

-- 删除数据库
DROP DATABASE samp_db;

-- 查看数据库创建语句
SHOW CREATE DATABASE samp_db;

二、表操作(DDL)

2.1 创建表

-- 创建包含基本字段的表
CREATE TABLE person (
    id INT,
    name VARCHAR(255),
    birthday DATE,
    email VARCHAR(255),
    PRIMARY KEY (id)
);

-- 查看表结构
DESC person;

-- 查看建表语句
SHOW CREATE TABLE person;

在这里插入图片描述

2.2 修改表结构

-- 添加新列
ALTER TABLE person ADD COLUMN phone VARCHAR(20);

-- 修改列类型
ALTER TABLE person MODIFY COLUMN name VARCHAR(100);

-- 删除列
ALTER TABLE person DROP COLUMN phone;

2.3 索引管理

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

-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON person(email);

-- 查看索引
SHOW INDEX FROM person;

-- 删除索引
DROP INDEX idx_name ON person;

三、数据操作(DML)

3.1 插入数据

-- 完整插入
INSERT INTO person VALUES(1, '张三', '1990-01-15', 'zhangsan@example.com', NULL);

-- 部分插入
INSERT INTO person(id, name) VALUES(2, '李四');

-- 批量插入
INSERT INTO person VALUES
    (3, '王五', '1985-05-20', 'wangwu@example.com', NULL),
    (4, '赵六', '1992-11-30', 'zhaoliu@example.com', NULL);

3.2 更新数据

-- 单条更新
UPDATE person SET email='lisi@example.com' WHERE id=2;

-- 批量更新
UPDATE person SET birthday='2000-01-01' WHERE id>2;

3.3 删除数据

-- 条件删除
DELETE FROM person WHERE id=4;

-- 清空表(危险操作)
DELETE FROM person;

四、数据查询(DQL)

4.1 基础查询

-- 查询所有列
SELECT * FROM person;

-- 查询特定列
SELECT id, name FROM person;

-- 条件查询
SELECT * FROM person WHERE birthday < '1990-01-01';

在这里插入图片描述

4.2 高级查询

-- 排序
SELECT * FROM person ORDER BY birthday DESC;

-- 分页
SELECT * FROM person LIMIT 2 OFFSET 1;

-- 聚合函数
SELECT COUNT(*) as total FROM person;
SELECT MAX(birthday) as latest FROM person;

-- 分组查询
SELECT YEAR(birthday) as birth_year, COUNT(*) 
FROM person 
GROUP BY birth_year;

五、权限管理(DCL)

5.1 用户管理

-- 创建用户
CREATE USER 'app_user'@'%' IDENTIFIED BY 'secure_password';

-- 修改密码
ALTER USER 'app_user'@'%' IDENTIFIED BY 'new_password';

-- 删除用户
DROP USER 'app_user'@'%';

5.2 权限控制

-- 授予权限
GRANT SELECT, INSERT ON samp_db.* TO 'app_user'@'%';

-- 授予所有权限
GRANT ALL PRIVILEGES ON samp_db.* TO 'app_user'@'%';

-- 查看权限
SHOW GRANTS FOR 'app_user'@'%';

-- 撤销权限
REVOKE INSERT ON samp_db.* FROM 'app_user'@'%';

六、TiDB特有功能

6.1 分布式事务

-- 显式事务
BEGIN;
INSERT INTO person VALUES(5, '钱七', '1988-07-07', 'qianqi@example.com');
UPDATE account SET balance = balance - 100 WHERE user_id = 5;
COMMIT;

6.2 分区表

-- 创建范围分区表
CREATE TABLE orders (
    id BIGINT,
    order_date DATE,
    amount DECIMAL(10,2)
PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p0 VALUES LESS THAN (2020),
    PARTITION p1 VALUES LESS THAN (2021),
    PARTITION p2 VALUES LESS THAN (2022),
    PARTITION pmax VALUES LESS THAN MAXVALUE
);

最佳实践

  1. 索引策略

    • 为查询条件中的列创建索引
    • 避免过度索引,影响写入性能
    • 对区分度高的列创建索引
  2. 事务优化

    • 减小事务范围
    • 避免长事务
    • 合理设置事务隔离级别
  3. 性能调优

    -- 使用EXPLAIN分析查询计划
    EXPLAIN SELECT * FROM person WHERE name LIKE '张%';
    

总结

本文详细介绍了TiDB中的SQL操作,从基础的数据库、表管理到复杂查询和权限控制。TiDB的MySQL兼容性使得开发者可以几乎零成本地从MySQL迁移到TiDB,同时享受分布式数据库的扩展性和高可用性优势。

希望这篇指南能帮助您快速上手TiDB的SQL操作。如需了解更多高级功能,请参考TiDB官方文档

在这里插入图片描述


🌺The End🌺点点关注,收藏不迷路🌺
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seal^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值