2023 BJTU DBMS Project
v1.0
2023-BJTU-DBMS-프로젝트
북경 교통대학교 소프트웨어 학교 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);