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);