浏览代码

feat: 更新setup的SQL语句

SongZihuan 3 年之前
父节点
当前提交
9796693c3c
共有 2 个文件被更改,包括 13 次插入12 次删除
  1. 2 1
      setup.py
  2. 11 11
      setup.sql

+ 2 - 1
setup.py

@@ -71,10 +71,11 @@ print("是否执行数据库初始化程序?\n执行初始化程序会令你丢
 res = input("[Y/n]")
 res = input("[Y/n]")
 if res == 'Y' or res == 'y':
 if res == 'Y' or res == 'y':
     with open(os.path.join(__setup, "setup.sql"), "r", encoding='utf-8') as f:
     with open(os.path.join(__setup, "setup.sql"), "r", encoding='utf-8') as f:
-        all_sql = f.read().split(';')
+        all_sql = f.read().split(';\n')  # 使用 `;` 作为分隔符是不够的, 因为函数中可能会使用`;`表示语句
         for s in all_sql:
         for s in all_sql:
             if s.strip() == "":
             if s.strip() == "":
                 continue
                 continue
+            print(f"{s};")
             cursor.execute(f"{s};")
             cursor.execute(f"{s};")
         sql.commit()
         sql.commit()
 
 

+ 11 - 11
setup.sql

@@ -5,12 +5,12 @@ USE hgssystem;
 CREATE TABLE IF NOT EXISTS user -- 创建用户表
 CREATE TABLE IF NOT EXISTS user -- 创建用户表
 (
 (
     ID         INT PRIMARY KEY AUTO_INCREMENT,
     ID         INT PRIMARY KEY AUTO_INCREMENT,
-    UserID     char(34)    NOT NULL UNIQUE,
+    UserID     char(32)    NOT NULL UNIQUE CHECK (UserID REGEXP '[a-zA-Z0-9]{32}'),
     Name       varchar(50) NOT NULL,
     Name       varchar(50) NOT NULL,
-    IsManager  bit         NOT NULL DEFAULT 0,
-    Phone      char(11)    NOT NULL,
-    Score      INT         NOT NULL,
-    Reputation INT         NOT NULL,
+    IsManager  bit         NOT NULL DEFAULT 0 CHECK (IsManager IN (0, 1)),
+    Phone      char(11)    NOT NULL CHECK (Phone REGEXP '[0-9]{11}'),
+    Score      INT         NOT NULL CHECK (Score <= 500 and Score >= 0),
+    Reputation INT         NOT NULL CHECK (Reputation <= 1000 and Reputation >= 1),
     CreateTime DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP
     CreateTime DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP
 );
 );
 
 
@@ -18,12 +18,12 @@ CREATE TABLE IF NOT EXISTS garbage -- 创建普通垃圾表
 (
 (
     GarbageID   INT PRIMARY KEY AUTO_INCREMENT,
     GarbageID   INT PRIMARY KEY AUTO_INCREMENT,
     CreateTime  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
     CreateTime  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    Flat        TINYINT  NOT NULL DEFAULT 0,
+    Flat        TINYINT  NOT NULL DEFAULT 0 CHECK (Flat IN (0, 1, 2)),
     UserID      char(34),
     UserID      char(34),
     UseTime     DATETIME,
     UseTime     DATETIME,
-    GarbageType TINYBLOB,
+    GarbageType TINYBLOB CHECK (GarbageType IS NULL OR GarbageType IN (1, 2, 3, 4)),
     Location    VARCHAR(50),
     Location    VARCHAR(50),
-    CheckResult BIT,
+    CheckResult BIT CHECK (CheckResult IS NULL OR CheckResult IN (0, 1)),
     CheckerID   char(34),
     CheckerID   char(34),
     FOREIGN KEY (UserID) REFERENCES user (UserID),
     FOREIGN KEY (UserID) REFERENCES user (UserID),
     FOREIGN KEY (CheckerID) REFERENCES user (UserID)
     FOREIGN KEY (CheckerID) REFERENCES user (UserID)
@@ -156,7 +156,7 @@ CREATE FUNCTION get_avg(num1 int, num2 int)
     COMMENT '计算两个数相除'
     COMMENT '计算两个数相除'
 BEGIN
 BEGIN
     IF num2 = 0 or num1 = 0 THEN
     IF num2 = 0 or num1 = 0 THEN
-        RETURN 0;
-    END IF;
-    RETURN num1 / num2;
+        RETURN 0; -- 注释, 防止python在此处分割SQL
+    END IF; -- 注释, 防止python在此处分割SQL
+    RETURN num1 / num2; -- 注释, 防止python在此处分割SQL
 END;
 END;