简介
使用 pyhton 实现的功能简单的 DBMS 系统,主要功能如下:
- 初始化,产生默认 root 用户
- 用户登录功能(login)
- 使用数据库(use 命令)
- 创建用户、数据库、表(create 命令)
- 查询数据表中的数据(select 命令),支持简单 where 子句、order by,不支持聚集函数等
- 向数据表中插入数据(insert 命令),支持的数据类型有 int varchar double,支持简单的约束,不支持 where 子句
- 删除数据表中内容(delete 命令),支持简单的 where 子句
- 更新数据表中的内容(update 命令),支持简单的 where 子句
- 向用户授权功能(grant 命令)
- 收回权限功能(revoke 命令)
- help 命令
运行平台为:Windows,语言为 Python3,注意的是一定要有 F 盘,因为默认配置文件会建在 F 盘,您也可以修改 static_string.py 中 PATH_ROOT
缺陷
- 只能对数据库授权,而不能对数据表授权
- 一个表中只能支持一个约束条件
- 普通用户即使授予了对数据库的使用权限,也没法使用数据库(悲伤...),这里稍微一改可以实现
整体思路
使用命令
登录
login root root # 登录
use
use sdust # 使用数据库
create
create user zzz passwd 1 # 创建用户
create database sdust # 创建数据库
create table users(id int primary key, name varchar not null) # 创建数据表
create view users_view as select * from users # 创建视图
insert
insert into users values(1, 'zzz') # 向表中插入数据
delete
delete from users # 删除表中所有数据
delete from users where id = 1 # where 子句
update
update users set name = 'zzz' # 更新表中所有数据
update users set id = 3 where name = 'yes' # where 子句
select
select * from users
select id, name from users
select * from users order by id # order by 子句
select id, name from users_view # 在视图中查询
grant
grant insert, select on test to zzz # 赋予用户权限
grant * on test, sdust to zzz
grant * on test, sdust to zzz, test
revoke
revoke insert, select on test from zzz # 收回权限
revoke * on test, sdust from zzz
revoke * on test, sdust from zzz, test
help
help database # 查看数据库信息
help table users # 查看数据表信息
help view users_view # 查看试图信息
退出
exit
存储用户文件结构
./config/users.json: { "user_name": {"password": "user_password", "type": 1} }
格式化:
{
"user_name": {
"password": "user_password",
"type": 1
}
}
存储数据文件结构
./config/dictionary.json:
{"sdust": {"views": {"users_view": {"items": [{"nature": "id", "type": "int"}], "content": "select * from users"}}, "permissions": {"root": {"select": 1, "insert": 1, "update": 1, "delete": 1}}, "tables": {"users": {"size": 2, "items": [{"nature": "id", "limit": "primary key", "type": "int"}]}}}}
格式化:
{
"sdust": {
"views": {
"users_view": {
"items": [
{
"nature": "id",
"type": "int"
}
],
"content": "select * from users"
}
},
"permissions": {
"root": {
"select": 1,
"insert": 1,
"update": 1,
"delete": 1
}
},
"tables": {
"users": {
"size": 2,
"items": [
{
"nature": "id",
"limit": "primary key",
"type": "int"
}
]
}
}
}
}
表的文件结构
./databasename/tablename.sql # 本质是个 .txt 文件
具体实现解解释见代码注释