Skip to main content

SQL 基本操作

成功部署 EloqSQL 集群之后,便可以连接数据库执行相应的 SQL 语句。由于 EloqSQL 兼容 MySQL,用户可以使用 MySQL 客户端连接 MonograhDB,并且可以直接执行相应的 SQL 语句(注意:部分 Mysql 语句不支持,具体可见与 Mysql 兼容性对比

分类

SQL 语言的功能通常分为以下四个部分:

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

查看、创建和删除数据库

EloqSQL 中的数据库与 MySQL 语境中定义的基本一致,Database(数据库)可以被定义为一个由表、索引以及其他相关对象组成的集合。

  • 使用 SHOW DATABASES 语句查看系统中数据库列表:
SHOW DATABASES;
  • 使用名为 mysql 的数据库,mysql 数据库是 MySQL 系统数据库之一,它在 MySQL 服务器安装过程中会自动生成。mysql 数据库中保存着 MySQL 服务器的系统信息和元数据,用于管理和维护 MySQL 服务器的各种配置和状态信息。:
USE mysql;

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

SHOW TABLES FROM mysql;

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

CREATE DATABASE db_name [options];

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

CREATE DATABASE IF NOT EXISTS mono;

在 SQL 中,IF NOT EXISTS是一种条件语句,用于在执行CREATE TABLECREATE INDEX等 DDL 语句时,判断是否已经存在同名的表或索引,从而避免出现重复创建对象的错误

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

DROP DATABASE mono;

注意

数据库删除后,其中所有的表、视图、存储过程、触发器、事件等对象都将被永久删除,因此在执行 DROP DATABASE 语句之前,应该先备份所有重要的数据。

创建、查看和删除表

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

CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
...
PRIMARY KEY (one or more columns)
);

以下是一个示例,用于创建一个名为"students"的表,包含 id、name、age 和 gender 四个列:

CREATE TABLE students (
id INT ,
name VARCHAR(50) ,
age INT CHECK (age >= 18 AND age <= 60),
gender ENUM('Male', 'Female')
);

上述示例中,age 列必须大于等于 18 岁且小于等于 60 岁,gender 列的取值必须为'Male'或'Female'。

使用 SHOW CREATE 或者DESC语句查看表结构,即 DDL。例如:

SHOW CREATE TABLE students;
DESC students;

SHOW CREATEDESC都是 SQL 中用于查看表结构的命令,但它们的作用和输出结果有所不同:

  • SHOW CREATE 语句用于查询指定表的创建语句,即查看创建该表的 SQL 语句。它可以显示表的所有结构信息,包括表的名称、列名、数据类型、约束条件等。输出结果是一个包含创建表的完整语句的字符串。
  • DESC 命令用于查询表的列信息,即查看指定表的列名、数据类型、默认值、约束条件等。输出结果是一个表格,其中包含每个列的名称、数据类型、是否可以为 NULL、键类型和默认值。 使用 DROP TABLE 语句删除表。例如:
DROP TABLE students;

创建、查看和删除索引

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

CREATE INDEX idx_id ON students (id);

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

CREATE UNIQUE INDEX idx_unique_id ON students (id);

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

SHOW INDEX FROM students;

使用 DROP INDEX 语句来删除索引。例如:

DROP INDEX idx_id ON students;

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

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

记录的增删改

记录(Record)是指表中的每一行数据,也称为行(Row)或元组(Tuple)。每个记录包含表中所有列的数据,一般用于表示某个实体或对象的属性值。

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

INSERT INTO students VALUES(101,'tom',20,'Male');

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

INSERT INTO students(id,name) VALUES(102,'bob');

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

update students set age=21 where id=102;

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

DELETE FROM students WHERE id=102;

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

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

查询数据

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

SELECT * FROM studnets;

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

SELECT name FROM students;
+------+
| name |
+------+
| tom |
+------+
1 rows in set (0.00 sec)

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

SELECT * FROM studnets WHERE id=101;

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

创建、授权和删除用户

使用 CREATE USER 语句创建一个用户 monouser,密码为 10001

CREATE USER 'monouser'@'localhost' IDENTIFIED BY '10001';

授权用户 monouser 可检索数据库 mono 内的表:

GRANT SELECT ON mono.* TO 'monouser'@'localhost';

查询用户 monouser 的权限:

SHOW GRANTS for monouser@localhost;

删除用户 monouser

DROP USER 'monouser'@'localhost';

创建存储过程和函数

存储过程是一组预先编写好的 SQL 语句集合,可以接受输入参数并返回输出参数,用于执行一系列的数据库操作, 可以修改数据库中的数据。存储过程通常被保存在数据库服务器中,可以被多次调用执行。存储过程可以包含条件判断、循环、事务控制等逻辑结构,具有灵活的控制流程和较高的性能优势。 针对 students 表,可以创建如下的存储过程,用于向 students 表格中插入一条新的学生记录

CREATE PROCEDURE insert_student(
IN student_id INT,
IN student_name VARCHAR(50),
IN student_age INT,
IN student_gender ENUM('Male', 'Female')
)
BEGIN
INSERT INTO students (id, name, age, gender) VALUES (student_id, student_name, student_age, student_gender);
END;

上述存储过程接收四个参数,分别表示学生的 ID、姓名、年龄和性别,然后使用 INSERT INTO 语句将这些参数值插入到 students 表格中。 例如,可以使用以下命令调用 insert_student 存储过程,并向 students 表格中插入一条新的学生记录:

CALL insert_student(1, '张三', 20, 'Male');

函数是一段可重用的 SQL 代码,通常用于计算并返回一个结果,不会修改数据库中的数据。函数可以接收输入参数,并返回一个值作为结果。函数可以在 SQL 语句中直接使用,也可以在存储过程中被调用执行。函数可以实现一些简单的数学计算、字符串处理、日期处理等功能,也可以实现一些复杂的业务逻辑计算 针对 students 表,可以创建如下的函数,用于计算学生的出生年份。可以使用以下 SQL 语句创建一个名为get_student_birth_year的函数

CREATE FUNCTION get_student_birth_year(student_id INT) RETURNS INT
BEGIN
DECLARE birth_year INT;
SELECT YEAR(NOW()) - age INTO birth_year FROM students WHERE id = student_id;
RETURN birth_year;
END;

例如,可以使用以下命令调用 get_student_birth_year 函数,并计算学生 ID 为 1 的出生年份:

SELECT get_student_birth_year(1);