# 一起写一个数据库-已调试好 **Repository Path**: N_code/MYDB ## Basic Information - **Project Name**: 一起写一个数据库-已调试好 - **Description**: 一起写一个数据库-已调试好 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-26 - **Last Updated**: 2022-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: 其他 ## README 原作者博客地址:[一起写个数据库_何人听我楚狂声的博客-CSDN博客](https://blog.csdn.net/qq_40856284/category_11504274.html) # MYDB MYDB 是一个 Java 实现的简单的数据库,部分原理参照自 MySQL、PostgreSQL 和 SQLite。实现了以下功能: - 数据的可靠性和数据恢复 - 两段锁协议(2PL)实现可串行化调度 - MVCC - 两种事务隔离级别(读提交和可重复读) - 死锁处理 - 简单的表和字段管理 - 简陋的 SQL 解析(因为懒得写词法分析和自动机,就弄得比较简陋) - 基于 socket 的 server 和 client ## 运行方式 首先执行以下命令以 F:\cccccZiZhiShuJuKu\Mydb 作为路径创建数据库: ```shell mvn exec:java -Dexec.mainClass="top.guoziyang.mydb.backend.Launcher" -Dexec.args="-create F:\cccccZiZhiShuJuKu\Mydb" ``` 随后通过以下命令以默认参数启动数据库服务: ```shell mvn exec:java -Dexec.mainClass="top.guoziyang.mydb.backend.Launcher" -Dexec.args="-open F:\cccccZiZhiShuJuKu\Mydb" ``` 这时数据库服务就已经启动在本机的 9999 端口。重新启动一个终端,执行以下命令启动客户端连接数据库: ```shell mvn exec:java -Dexec.mainClass="top.guoziyang.mydb.client.Launcher" ``` 会启动一个交互式命令行,就可以在这里输入类 SQL 语法,回车会发送语句到服务,并输出执行的结果。 一个执行示例: ![](https://s3.bmp.ovh/imgs/2021/11/2749906870276904.png) # Idea中相关配置 ## 1.将项目克隆下来,在idea中打开 ![image-20220326135916601](Markdown_Yong_JPG/image-20220326135916601.png) ## 2.配置项 ![image-20220326140002988](Markdown_Yong_JPG/image-20220326140002988.png) ![image-20220326140040897](Markdown_Yong_JPG/image-20220326140040897.png) ![image-20220326140114242](Markdown_Yong_JPG/image-20220326140114242.png) ## 3.命令行启动 ### 1.创建数据库 ```shell mvn exec:java -Dexec.mainClass="top.guoziyang.mydb.backend.Launcher" -Dexec.args="-create F:\cccccZiZhiShuJuKu\Mydb" ``` ![image-20220326140530173](Markdown_Yong_JPG/image-20220326140530173.png) ### 2.启动数据库服务 ```shell mvn exec:java -Dexec.mainClass="top.guoziyang.mydb.backend.Launcher" -Dexec.args="-open F:\cccccZiZhiShuJuKu\Mydb" ``` ![image-20220326140736990](Markdown_Yong_JPG/image-20220326140736990.png) ### 3.启动客户端连接数据库 ```shell mvn exec:java -Dexec.mainClass="top.guoziyang.mydb.client.Launcher" ``` ![image-20220326140925865](Markdown_Yong_JPG/image-20220326140925865.png) ## 4.使用数据库命令实例 ```shell [INFO] --- exec-maven-plugin:3.0.0:java (default-cli) @ MyDB --- :> create table test_table id int32,value int32 (index id) #创建数据表test_table 字段id,value 主键为id create test_table :> insert into test_table values 10 33 #向数据库中插入一条数据 id=10 value=33 insert :> select * from test_table where id=10 #查询id=10的数据 [10, 33] :> begin #开启事务 begin :> insert into test_table values 20 34 #插入一条数据 id=20 value=34 insert :> commit #提交事务 commit :> select * from test_table #查询test_table表中所有数据 [10, 33] [20, 34] :> select * from test_table where id>8 #查询test_Table表中id>8的所有数据 [10, 33] [20, 34] :> select * from test_table #查询test_table表中所有数据 [10, 33] [20, 34] :> begin #开启事务 begin :> delete from test_table where id=10 #删除id=10的数据 delete 1 :> select * from test_table #在事务中查询test_table中的所有数据,发现删除的数据id=10已经不显示了 [20, 34] :> abort #回滚事务 abort :> select * from test_table #查询test_table表中数据 发现删除的数据id=10还有说明事务回滚成功 [10, 33] [20, 34] :> quit #退出数据库 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 15:03 min [INFO] Finished at: 2022-03-26T14:18:06+08:00 [INFO] ------------------------------------------------------------------------ ``` # 注意事项 ###### 作者说该项目不支持java8,经过研究之后,只要修改如下就可以支持java8了. > ![image-20220326143507155](Markdown_Yong_JPG/image-20220326143507155.png) ![image-20220326143306440](Markdown_Yong_JPG/image-20220326143306440.png)