2023 BJTU DBMS Project
v1.0
2023-BJTU-DBMS-Project
北京交通大学软件学院 2023年春季 实训课项目 数据库管理系统
admin
与密码 123456
即可登录。cd cmd
cmake -Bbuild
make -Cbuild -j8
build/colasql admin 123456;
cd gui/ColaSqlGui
qmake -o build/Makefile ColaSqlGui.pro
make -Cbuild -j8
build/ColaSqlGui
admin
与 123456
来登入数据库#include<filemanager>
的编译错误
filemanager
库,但qt5在c++17中只支持 experimental/filemanager
,需要根据环境具体决定。可以在 file/src/filemanager.cpp
中修改对应内容。登入数据库
colasql 用户名 密码
#管理员用户名admin,密码colasql
LOGIN 用户名 密码;
创建用户
CREATE USER 用户名 密码;
#所有用户默认拥有数据库的查询权、创建权,只对自己创建的数据库有删除权
#创建用户不需要任何权限,但授予权限只能授予自己拥有的权限
#其它说明见下
修改用户权限
GRANT USER 用户名 数据库名 表名 权限名;
#数据库名和表名都不能为"*",对某个特定的数据库的表授予权限。
GRANT USER 用户名 数据库名 权限名;
#数据库名为"*",对所有数据库的所有表授予权限(当前用户拥有该数据库的权限,仅admin可用)。
#数据库名不为"*"时,若为表级权限则授予该数据库里所有表的表级权限(当前用户需拥有授权的所有权限),若为数据库级权限则授予该数据库的数据库级权限(当前用户需拥有该权限)。
权限名
#表级权限
SELECT
DELETE
INSERT
UPDATE
INDEX
ALTER
#数据库级权限
CREATE
DROP
#ALL表示以上所有权限,仅数据库管理员(admin)可用
#ALL
删除用户(需要管理员权限)
DROP USER 用户名;
int # 42位整数,如 1, 14, 514
float # 42位浮点数,如 1.0, 5.1, 2
string # 字符串,如 "dbms", "2002-10-12"
创建数据库(需要管理员权限)
CREATE DATABASE 数据库名;
删除数据库(需要管理员权限)
DROP DATABASE 数据库名;
使用数据库
USE 数据库名;
显示所有数据库
SHOW DATABASES;
创建表(需要CREATE权限)
CREATE TABLE 表名
列名1 类型1
列名2 类型2
...
约束条件1
约束条件2
...
;
约束条件语法
CONSTRAINT 约束名 PRIMARY KEY 列名; # 指定主键
CONSTRAINT 约束名 FOREIGN KEY 列名 REFERENCES 表名2 列名2; # 指定外键,该列 参考 表2的列2
CONSTRAINT 约束名 UNIQUE 列名; # 指定该列值不可重复(未指定时,默认可重)
CONSTRAINT 约束名 NOT NULL 列名; # 指定该列非空(未指定时,默认可空)
CONSTRAINT 约束名 DEFAULT 列名 值; # 指定该列默认值(未指定时,默认值为NULL)
删除表(需要DROP权限)
DROP TABLE 表名;
修改表(需要ALTER权限)
ALTER TABLE 表名 ADD 列名 类型;
ALTER TABLE 表名 DROP 列名;
ALTER TABLE 表名 MODIFY 列名 类型;
ALTER TABLE 表名 约束条件;
ALTER TABLE 表名 DELETE 约束条件名;
查看表结构(需要SELECT权限)
DESC TABLE 表名;
显示所有表
SHOW TABLES;
索引相关
CREATE INDEX ON 表名 列名1 列名2 ...;
查看约束
SHOW CONSTRAINTS;
SHOW CONSTRAINT ON 表名;
插入记录
INSERT INTO 表名 列名1 列名2 列名3 ... VALUES 值1 值2 值3 ...;
删除记录
DELETE FROM 表名 [WHERE 筛选条件1 筛选条件2 ...];
筛选条件语法
列名 = 值
选择记录
SELECT 列名1 列名2 列名3 ...
FROM 表名1 [NATURAL JOIN 表名2 ...]
[WHERE 筛选条件1 筛选条件2 ...]
[ORDER BY 列名1 列名2 ...];
更新记录
UPDATE 表名 SET 列名1 = 值1 [列名2 = 值2 ...]
[WHERE 筛选条件1 筛选条件2 ...];
储存 & 提交
SAVE;
COMMIT;
回滚 & 读取
READ;
ROLLBACK;
RUN path/to/directory/script.colasql
;
,否则会解析失败!NULL
为Co1aSQL关键字,若占用,则不一定能得到预期结果// 属性(字段)
std::pair<std::string, std::string> field;
std::unordered_map<std::string, std::any> records;
// 约束条件
Class Constraint {};
Class PrimaryKeyConstraint: public Constraint {};
Class ForeignKeyConstraint: public Constraint {};
Class UniqueConstraint: public Constraint {};
Class NotNullConstraint: public Constraint {};
Class DefaultConstraint: public Constraint {};
// 创建用户(需要管理员权限)
int CreateAccount(std::string accountName,
std::string password,
bool ownAllDatabases,
std::string databaseName,
int authority);
// 删除用户(需要管理员权限)
int DeleteAccount(std::string accountName);
// 修改用户权限
int GrantAccount(std::string accountName,
bool ownAllDatabases,
std::string databaseName,
int authority);
// 创建数据库(需要管理员权限)
int CreateDatabase(std::string databaseName);
// 删除数据库(需要管理员权限)
int DeleteDatabase(std::string databaseName);
// 使用数据库 —— 该函数会对其他函数产生影响
int UseDatabase(std::string databaseName,
std::string accountName,
std::string password);
// 显示所有数据库
int ShowDatabase(std::string& output);
// 创建表
int CreateTable(std::string tableName,
const std::vector<std::pair<std::string, std::any>>& fields,
const std::vector<Constraint*>& constraints);
// 删除表
int DeleteTable(std::string tableName);
// 修改表
int AlterTableAdd(std::string tableName, Field field);
int AlterTableDrop(std::string tableName, std::string fieldName);
int AlterTableModify(std::string tableName, std::string fieldName, Field field);
int AlterTableConstraint(std::string tableName, Constraint constraint);
int AlterTableDeleteConstraint(std::string tableName, std::string constraintName);
// 查看表结构(通过&output来输出结果)
int QueryTable(std::string tableName, std::string& output) const;
// 显示当前数据库的所有表
int ShowTable(std::string& output);
// 插入记录
int InsertRecord(std::string tableName,
const std::vector<Field>& values);
// 删除记录(conditions储存筛选条件,根据筛选条件删除记录)
int DeleteRecord(std::string tableName,
const std::vector<Field>& conditions);
// SelectRecord的参数需要修改!!!目前不完善!!!
// 选择(查询)记录(conditions储存筛选条件)
int SelectRecord(std::string tableName,
const std::vector<Field>& conditions,
std::string& output) const;
// 更新记录
int UpdateRecord(std::string tableName,
const std::vector<Field>& values,
const std::vector<Field>& conditions);