04-TiDB SQL基本操作

语法结构与MySQL基本一致

1、分类

SQL 语言通常按照功能划分成以下的 4 个部分:

  • DDL (Data Definition Language):数据定义语言,用来定义数据库对象,包括库、表、视图和索引等。
  • DML (Data Manipulation Language):数据操作语言,用来操作和业务相关的记录。
  • DQL (Data Query Language):数据查询语言,用来查询经过条件筛选的记录。
  • DCL (Data Control Language):数据控制语言,用来定义访问权限和安全级别。
    常用的 DDL 功能是对象(如表、索引等)的创建、属性修改和删除,对应的命令分别是 CREATE、ALTER 和 DROP。

2、查看、创建和删除数据库

TiDB 语境中的 Database 或者说数据库,可以认为是表和索引等对象的集合。

使用 SHOW DATABASES 语句查看系统中数据库列表:

复制代码
SHOW DATABASES;

使用名为 mysql 的数据库:

复制代码
USE mysql;

使用 SHOW TABLES 语句查看数据库中的所有表。例如:

复制代码
SHOW TABLES FROM mysql;

使用 CREATE DATABASE 语句创建数据库。语法如下:

复制代码
CREATE DATABASE db_name [options];

例如,要创建一个名为 samp_db 的数据库,可使用以下语句:

复制代码
CREATE DATABASE IF NOT EXISTS samp_db;

添加 IF NOT EXISTS 可防止发生错误。

使用 DROP DATABASE 语句删除数据库。例如:

复制代码
DROP DATABASE samp_db;

3、创建、查看和删除表

使用 CREATE TABLE 语句创建表。语法如下:

复制代码
CREATE TABLE table_name column_name data_type constraint;

例如,要创建一个名为 person 的表,包括编号、名字、生日等字段,可使用以下语句:

复制代码
CREATE TABLE person (
    id INT(11),
    name VARCHAR(255),
    birthday DATE
    );

使用 SHOW CREATE 语句查看建表语句,即 DDL。例如:

复制代码
SHOW CREATE TABLE person;

使用 DROP TABLE 语句删除表。例如:

复制代码
DROP TABLE person;

4、创建、查看和删除索引

索引通常用于加速索引列上的查询。对于值不唯一的列,可使用 CREATE INDEX 或 ALTER TABLE 语句创建普通索引。例如:

复制代码
CREATE INDEX person_id ON person (id);

或者:

复制代码
ALTER TABLE person ADD INDEX person_id (id);

对于值唯一的列,可以创建唯一索引。例如:

复制代码
CREATE UNIQUE INDEX person_unique_id ON person (id);

或者:

复制代码
ALTER TABLE person ADD UNIQUE person_unique_id (id);

使用 SHOW INDEX 语句查看表内所有索引:

复制代码
SHOW INDEX FROM person;

使用 ALTER TABLE 或 DROP INDEX 语句来删除索引。与 CREATE INDEX 语句类似,DROP INDEX 也可以嵌入 ALTER TABLE 语句。例如:

复制代码
DROP INDEX person_id ON person;
ALTER TABLE person DROP INDEX person_unique_id;

注意:DDL 操作不是事务,在执行 DDL 时,不需要对应 COMMIT 语句。

常用的 DML 功能是对表记录的新增、修改和删除,对应的命令分别是 INSERT、UPDATE 和 DELETE。

5、记录的增删改

使用 INSERT 语句向表内插入表记录。例如:

复制代码
INSERT INTO person VALUES(1,'tom','20170912');

使用 INSERT 语句向表内插入包含部分字段数据的表记录。例如:

复制代码
INSERT INTO person(id,name) VALUES('2','bob');

使用 UPDATE 语句向表内修改表记录的部分字段数据。例如:

复制代码
UPDATE person SET birthday='20180808' WHERE id=2;

使用 DELETE 语句向表内删除部分表记录。例如:

复制代码
DELETE FROM person WHERE id=2;

注意:UPDATE 和 DELETE 操作如果不带 WHERE 过滤条件是对全表进行操作。

DQL 数据查询语言是从一个表或多个表中检索出想要的数据行,通常是业务开发的核心内容。

6、查询数据

使用 SELECT 语句检索表内数据。例如:

复制代码
SELECT * FROM person;

在 SELECT 后面加上要查询的列名。例如:

复制代码
SELECT name FROM person;

±-----+

| name |

±-----+

| tom |

±-----+

1 rows in set (0.00 sec)

使用 WHERE 子句,对所有记录进行是否符合条件的筛选后再返回。例如:

复制代码
SELECT * FROM person WHERE id<5;

常用的 DCL 功能是创建或删除用户,和对用户权限的管理。

7、创建、授权和删除用户

使用 CREATE USER 语句创建一个用户 tiuser,密码为 123456:

复制代码
CREATE USER 'tiuser'@'localhost' IDENTIFIED BY '123456';

授权用户 tiuser 可检索数据库 samp_db 内的表:

复制代码
GRANT SELECT ON samp_db.* TO 'tiuser'@'localhost';

查询用户 tiuser 的权限:

复制代码
SHOW GRANTS for tiuser@localhost;

删除用户 tiuser:

复制代码
DROP USER 'tiuser'@'localhost';
相关推荐
技术宝哥2 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸3 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
不知几秋3 小时前
sqlilab-Less-18
sql
dddaidai1233 小时前
Redis解析
数据库·redis·缓存
数据库幼崽3 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd4 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou4 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh5 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵6 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多7 小时前
Linux——mysql主从复制与读写分离
数据库·mysql