IndieGame/client/Assets/Ether/Scripts/Module/DataBase/DataBaseData.cs

208 lines
7.1 KiB
C#
Raw Normal View History

2024-10-11 10:12:15 +08:00
/********************************************************************
: DataBaseData.cs
:
: 1982614048@qq.com
: 2024/03/29 17:28:19
:
: 2024/04/03 16:05:17
:
*********************************************************************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Ether
{
/// <summary>
/// 数据库表字段类型
/// </summary>
public enum DataBaseColumnType
{
Int, //存储从-2,147,483,648到2,147,483,647范围内的整数值。
SmallInt, //存储从-32,768到32,767范围内的整数值。
BigInt, //存储从-9,223,372,036,854,775,808到9,223,372,036,854,775,807的整数值。
Char, //char(n) 存储定长字符串。最大长度为8,000个字符。
VarChar, // varchar(n) 存储长度可变的字符串。最大长度为8,000个字符。 varchar(max) 存储长度可变的字符串。此处max表示最大存储大小为2 GB。
Text, //存储长度可变的字符串。最大存储大小为2 GB。
Float, //FLOATMD或DOUBLE PRECISIONMD。 在此MD表示总共可以存储多达M位的值其中D位可以在小数点后。 例如显示为FLOAT7,3的列显示为-9999.999。 MySQL在存储值时会进行四舍五入因此如果将9999.0009插入FLOAT7,3则近似结果为9999.001。
Double, //比较浮点值可能会导致问题因为它们是近似值而不是精确值。因此为了存储可以用于比较的值如price、salary等请使用DECIMAL数据类型。
Decimal, //decimal(p,s) 存储固定的精度和小数位数。有效值为10 ^38 +1到10 ^38-1。
Date, //存储日期值范围为0001-01-011月1日1月至 9999-12-319999年12月31日
Time, //存储一天中的时间精度为100纳秒。有效值为000000.0000000到235959.9999999。
DateTime, //用于以'YYYY-MM-DD HH:MM:SS'格式存储合并的日期和时间值 存储组合的日期和时间值精度为3.33毫秒。的有效日期范围datetime是从1753-01-011753年1月1日到9999-12-319999年12月31日
}
/// <summary>
/// 数据库表字段数据
/// </summary>
public class DataBaseColumnTypeData
{
private static Dictionary<DataBaseColumnType, string> ColumnType = new Dictionary<DataBaseColumnType, string>()
{
{ DataBaseColumnType.Int, "INT" },
{ DataBaseColumnType.SmallInt, "SMALLINT" },
{ DataBaseColumnType.BigInt, "BIGINT" },
{ DataBaseColumnType.Char, "CHAR" },
{ DataBaseColumnType.VarChar, "VARCHAR" },
{ DataBaseColumnType.Text, "TEXT" },
{ DataBaseColumnType.Float, "FLOAT" },
{ DataBaseColumnType.Double, "DOUBLE" },
{ DataBaseColumnType.Decimal, "DECIMAL" },
{ DataBaseColumnType.Date, "DATE" },
{ DataBaseColumnType.Time, "TIME" },
{ DataBaseColumnType.DateTime, "DATETIME" },
};
public static List<string> ParameterList = new List<string>()
{
"({0})", "({0}, {1})"
};
public static string FormatColumnType(DataBaseColumnTypeData columnData)
{
string str = "";
for (int i = 0; i < columnData.parameter.Count; i++)
{
if (i == 0)
{
str += $"({columnData.parameter[i]}";
}
else
{
str += $",{columnData.parameter[i]}";
}
if (i == columnData.parameter.Count - 1)
{
str += ")";
}
}
if (columnData.isNotNull)
{
str += " NOT NULL";
}
if (columnData.isUnique)
{
str += " UNIQUE";
}
if (columnData.isAutoInchement)
{
str += " AUTO_INCREMENT";
}
if (columnData.isPrimaryKey)
{
str += " PRIMARY KEY";
}
string result = $"{columnData.columnName} {ColumnType[columnData.columnType]}{str}";
return result;
}
/// <summary>
/// 字段名称
/// </summary>
public string columnName;
/// <summary>
/// 字段类型
/// </summary>
public DataBaseColumnType columnType;
/// <summary>
/// 字段参数
/// </summary>
public List<int> parameter = new List<int>();
/// <summary>
/// 是否是主键, PRIMARY KEY约束标记对应的字段作为表的主键
/// </summary>
public bool isPrimaryKey = false;
/// <summary>
/// 是否可以为空, NOT NULL约束确保该字段不能接受一个NULL值。
/// </summary>
public bool isNotNull = false;
/// <summary>
/// AUTO_INCREMENT属性是标准SQL的MySQL扩展它告诉MySQL如果未指定该值则通过将前一个值增加1来自动为该字段分配一个值。仅适用于数字字段。
/// </summary>
public bool isAutoInchement = false;
/// <summary>
/// UNIQUE约束确保一列的每一行必须具有唯一值。
/// </summary>
public bool isUnique = false;
}
/// <summary>
/// 条件运算符类型
/// </summary>
public enum DataBaseFitterType
{
/// <summary>
/// 等于
/// </summary>
Equal,
/// <summary>
/// 大于
/// </summary>
Greaterl,
/// <summary>
/// 大于等于
/// </summary>
GreaterlEqual,
/// <summary>
/// 小于
/// </summary>
Less,
/// <summary>
/// 小于等于
/// </summary>
LessEqual,
/// <summary>
/// 不等于
/// </summary>
NotEqual,
}
/// <summary>
/// 数据库条件数据
/// </summary>
public class DataBaseFitter
{
private static Dictionary<DataBaseFitterType, string> FitterDic = new Dictionary<DataBaseFitterType, string>()
{
{ DataBaseFitterType.Equal, "=" },
{ DataBaseFitterType.Greaterl, ">" },
{ DataBaseFitterType.GreaterlEqual, ">=" },
{ DataBaseFitterType.Less, "<" },
{ DataBaseFitterType.LessEqual, "<=" },
{ DataBaseFitterType.NotEqual, "!=" },
};
public static string FormatFitter(DataBaseFitterType fitterType)
{
return FitterDic[fitterType];
}
/// <summary>
/// 字段名
/// </summary>
public string columnName;
/// <summary>
/// 条件运算符
/// </summary>
public DataBaseFitterType fitterType;
/// <summary>
/// 条件值
/// </summary>
public string fitterValue;
}
public class DataBaseData
{
}
}