MatrixOne 的 SQL 基本操作
MatrixOne 兼容 MySQL,你可以使用 MySQL 客户端或其他方式连接 MatrixOne。参加 MySQL 兼容性和客户端连接 MatrixOne 服务。
什么是 SQL 语言?
SQL (Structured Query Language: 结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
MatrixOne 的 SQL 都分为哪几类?
SQL 语言通常按照功能划分成以下的 6 个部分:
- 
DDL (Data Definition Language):数据定义语言,用来定义数据库对象,包括库、表、视图等。例如,
CREATE,ALTER,和DROP等。 - 
DML (Data Manipulation Language):数据修改语言,用来修改和业务相关的记录。例如,
SELECT,DELETE,或INSERT等。 - 
DQL (Data Query Language):数据查询语言,用来查询经过条件筛选的记录。例如,
SELECT...FROM...[WHERE]这种多个子句组合而成的 SQL 语句。 - 
TCL(Transaction Control Language):事务控制语言,用于事务管控。例如,
COMMIT,ROLLBACK,或SET TRANSACTION等。 - 
DCL (Data Control Language):数据控制语言,用来分配与回收资源,创建和阐述用户与角色,授权和回收权限。例如,
CREATET ACCOUNT,DROP ACCOUNT,或GRANT等。 - 
其他:在 MatrixOne 中,其他类型的管理语言是指与数据没有直接关联,对数据库参数、资源分配的获取与修改的总称。例如,
SHOW,SET variable,或KILL等。 
查看、创建和删除数据库
MatrixOne 中的数据库是表的集合。
- 查看数据库列表,使用 
SHOW DATABASES语句: 
SHOW DATABASES;
- 新建一个名称为 dbdemo 的数据库,使用 
CREATE DATABASE db_name [options];语句,例如: 
CREATE DATABASE dbdemo;
或:
CREATE DATABASE IF NOT EXISTS dbdemo;
添加 IF NOT EXISTS 条件可以防止错误。
- 使用命名为 dbdemo 的数据库,使用如下语句:
 
USE dbdemo;
- 使用 
SHOW TABLES语句查看数据库中所有的表,例如: 
SHOW TABLES FROM dbdemo;
- 删除数据库,使用 
DROP DATABASE语句: 
DROP DATABASE dbdemo;
创建、查看和删除表
- 创建表,使用 
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语句: 
SHOW CREATE table person;
结果如下所示:
+--------+-----------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                    |
+--------+-----------------------------------------------------------------------------------------------------------------+
| person | CREATE TABLE `person` (
`id` INT DEFAULT NULL,
`name` VARCHAR(255) DEFAULT NULL,
`birthday` DATE DEFAULT NULL
) |
+--------+-----------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
- 删除表,使用 
DROP TABLE语句: 
DROP TABLE person;
增加、删除、修改表记录
通用的 DML 即增删改表记录,基本的语句为 INSERT,UPDATE、REPLACE 和 DELETE。
- 向表中插入数据,使用 
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;
- 向表内替换表记录的部分字段数据,使用 
UPDATE语句,例如: 
REPLACE INTO person SET birthday='20180809' WHERE id=2;
- 向表内删除部分表记录,使用 
DELETE语句,例如: 
DELETE FROM person WHERE id=2;
Note
UPDATE 和 DELETE 操作如果不带 WHERE 过滤条件则是对全表进行操作。
查询数据
DQL 用于从一个表或多个表检索所需的数据行。
- 查看表内数据,使用 
SELECT语句: 
SELECT * FROM person;
结果如下所示:
+------+------+------------+
| id   | name | birthday   |
+------+------+------------+
|    1 | tom  | 2017-09-12 |
+------+------+------------+
1 row in set (0.00 sec)
- 查询某一列,使用 
SELECT语句加上要查询的列名: 
SELECT name FROM person;
+------+
| name |
+------+
| tom  |
+------+
1 rows in set (0.00 sec)
使用 WHERE 子句,对所有记录进行是否符合条件的筛选后再返回。例如:
SELECT * FROM person where id<5;
结果如下所示:
+------+------+------------+
| id   | name | birthday   |
+------+------+------------+
|    1 | tom  | 2017-09-12 |
+------+------+------------+
1 row in set (0.00 sec)
创建、授权和删除用户
如果你安装部署单机版的 MatrixOne,连接登录 MatrixOne 时,你本身便具有最高权限,你可以参考下面的内容创建用户并授权,以便体验 MatrixOne 集群的权限管理功能。
- 使用 
CREATE USER语句创建一个用户 mouser,密码为 111: 
> CREATE USER mouser IDENTIFIED BY '111';
Query OK, 0 rows affected (0.10 sec)
- 创建角色 role_r1 测试是否能够创建成功:
 
> CREATE ROLE role_r1;
Query OK, 0 rows affected (0.05 sec)
- 将角色 role_r1 赋予用户 mouser:
 
> GRANT role_r1 to mouser;
Query OK, 0 rows affected (0.04 sec)
- 授权角色 role_r1 可以在 dbdemo 数据库里建表的权限:
 
> GRANT create table on database * to role_r1;
Query OK, 0 rows affected (0.03 sec)
- 查询用户 mouser 的权限:
 
> SHOW GRANTS for mouser@localhost;
+-------------------------------------------------------+
| Grants for mouser@localhost                           |
+-------------------------------------------------------+
| GRANT create table ON database * `mouser`@`localhost` |
| GRANT connect ON account  `mouser`@`localhost`        |
+-------------------------------------------------------+
2 rows in set (0.02 sec)
你可以看到你已经成功把在 dbdemo 数据库里建表的权限授予给了 mouser。
- 删除用户 mouser:
 
DROP USER mouser;
权限管理是数据库中体系庞大但是非常有用的功能,如果你想了解更多,参见权限管理。