當前位置:首頁 » 編程語言 » sql語句審核

sql語句審核

發布時間: 2022-10-22 02:26:42

Ⅰ 如何自動化完成sql審核

很多游戲項目都是通過每周更新大版本來維持用戶的粘性和活躍度,而更新版本必然伴隨著資料庫的新建create、改表alter的SQL。

運維或者dba負責審核這類sql是否合理、高效,因為很多開發同事特別是經驗少的新人是不考慮sql性能、是否合乎MySQL的最佳實踐。
經常很多建表語句漏加索引或者加錯索引(不滿足最左匹配等情況),需要等到開服後資料庫負載過高引起告警才發現問題。
MySQL的配置中有一個日誌是記錄沒有使用索引的sql,記錄進slow log日誌中,不過實際使用過程中,的確存在著很多合理的不使用索引的情況,所以這個日誌一般不打開。

為了避免人工審閱的重復勞動,所以運維可以通過寫程序、腳本來自動審核sql,而審核的條件一般如下:
1、表結構是否合法 //不合法當然不能通過
2、表名、列名長度超過 16 //主要跟我們自己的授權有關系
3、必須有 unsigned //業務最容易忘記添加,當然如果一定要負值,那麼就走人工審核;
4、必須為 InnoDB //當然了,我已經忘記還有MyISAM了,統計日誌表除外
5、int bigint(10) 不能小於 10 //大家見過int(1)的情況么?
6、varchar 長度小於 3000 // 這也算是一個人為規定,沒有任何意義
7、text 欄位個數不能大於 3 //人為規定而已
8、主鍵必須為 int 類型 //不int,真的會死人
9、索引不能有重復 //見過key(id),key(id,uid)的情況嗎?
10、索引個數不能大於 5 個(包括主鍵) //人為定義而已
11、索引欄位必須為 not null,並且有 default 值 //參照高性能那本書說的,其實不一定影響性能
12、SQL 是否使用到索引 //不能用到索引的SQL,真的很慘
13、SQL 中不能有 * //由於* 經常導致流量、O巨大,所以,也強制了
14、自增欄位必須為 int 或者 bigint //見過自增用smallint的嗎?然後一下就溢出了
15、請不要使用MySQL的保留字(Reserved Words) //寫腳本,大家討厭<`>符號么?
開發提交sql後,會直接調用後端審核程序,程序根據以上規則,進行審核,就極大的降低了運維、DBA的工作量。

當sql審核通過後,是否馬上執行?
根據以下情況判斷:
1、表小於10w行,小於10M空間大小,那麼直接執行SQL;
2、如果不滿足1,並且滿足percona online-schema-change條件,那麼通過osc工具,進行在線修改;
3、如果1、2都不行,走人工上線流程;

Ⅱ 如何用sql語句查詢單據是否審核

IFEXISTS(SELECTTOP11FROM表名WHERE審核欄位='審核'AND單號='單號001')
SELECT'已審核'
ELSE
SELECT'未審核'

Ⅲ 一個審核頁面同時執行三條條sql語句,請教。

是ASP嗎?改成這樣子或者合並成一條命令用;隔開
sql="update sjzc set sjmoney=sjmoney+"&price&" where sjUserName='"&sjUserName&"'"
Conn.execute sql
sql="update OrderList set sjsh=1 where sjUserName='"&sjUserName&"'"
Conn.execute sql
sql="update [user] set sjmoney=hymoney-"&price&" where sjUserName='"&sjUserName&"'"
Conn.execute sql

Ⅳ 如何用SQL語句完成表內相同的前置單據對應未審核數量求和

select b.*, SumFDeptID,SumFItemID,SumFQty,SumFTaxRate,SumFAmount,(SumFDeptID + SumFItemID + SumFQty + SumFTaxRate + SumFAmount) as SumCount
from (select FBillNo,sum(FDeptID) as SumFDeptID,sum(FItemID) as SumFItemID,sum(FQty) as SumFQty,sum(FTaxRate) as SumFTaxRate,sum(FAmount) as SumFAmount
from 表
group by FBillNo) as a,表 as b
where a.FBillNo=b.FBillNo

Ⅳ 如何通過SQL語句設置資料庫登錄審核的狀態

剛好上次講三層架構.有現成的例子

以一個驗證登陸為例子
這里是界面層一般叫UIL
protected void Button1_Click(object sender, EventArgs e)
{
List<User> Users = BAL.GetUserInfo(txtUserName.Text,txtPassword.Text);

if(Users.Length > 0)
{
Response.Write("登陸成功");
}
else
{
Response.Write("登陸失敗");
}
}

以下是邏輯層代碼,業務邏輯層一般叫BLL
public static List<User> GetUserInfo(string user,string password)
{
string newPassword = GetMD5Hash(password); //這里對密碼進行加密處理,資料庫中存放的是經過MD5加密後的密,業務邏輯層一般都是處理復雜的邏輯.例如加密邏輯
List<User> Users = DAL.GetUserInfo(user,newPassword);

return Users;
}

以下是數據訪問層代碼,數據訪問層一般叫DAL
public static List<User> GetUserInfo(string user,string password)
{
List<User> Users = new List<User>();
string sql = "select * from User where Password = '"+password+"' and User = '"+user+"'"; //寫where子句的時候把Password放前面.因為Password經過加密,所以可以防止SQL注入攻擊
SqlDataAdapter da = new SqlDataAdapter(sql,"這里是資料庫連接字元串");
DataSet ds = new DataSet();
da.Fill(ds);

for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
User user = new User(ds.Tables[0].Rows[i]["ID"].ToString(),ds.Tables[0].Rows[i]["User"].ToString(),ds.Tables[0].Rows[i]["Password"].ToString());
Users.Add(user);
}

return Users;
}

還會有一個Model層.叫做模板層.是數據表結構的印射.Model層是共用層,其他三層都要用到.
比如資料庫中有張表User,裡面有3個欄位ID,User,Password
那麼在模板層中應該有一個類,資料庫中User表的一行對應一個User對象,一張表對應User對象的集合.
public class User
{
string ID;
string User;
string Password;

//重載構造函數
User(string id,string user,string password)
{
this.ID=id;
this.User=user;
this.Password=password;
}
}

Ⅵ 如何驗證 SQL 語句的正確性

驗證sql語句的正確性:

-- 定義你想要檢驗的SQL語句
DECLARE @sql NVARCHAR(MAX)
--'正確的語句'
SET @sql = 'select * from Report_Test1'
--'錯誤的語句'
--SET @sql = 'select 1 from'
DECLARE @testsql NVARCHAR(MAX),
@result INT

SET @testsql = N'set parseonly on; ' + @sql
EXEC @result = sp_executesql @testsql
-- 如果SQL語句有誤,則@result不為0;
IF @result = 0
BEGIN
PRINT '正確的語法'
--開始執行正確的SQL語句
--exec sp_executesql @sql
END
ELSE
BEGIN
PRINT '錯誤的語法'
--不執行任何操作
END

熱點內容
android應用層 發布:2025-07-08 02:42:32 瀏覽:301
大唐存儲銷量 發布:2025-07-08 02:41:11 瀏覽:582
腳本怎麼打開 發布:2025-07-08 02:41:06 瀏覽:822
貴州電信iPtv升級伺服器地址 發布:2025-07-08 02:38:48 瀏覽:412
電腦怎麼鏈接本地伺服器 發布:2025-07-08 02:34:22 瀏覽:147
android調試webview 發布:2025-07-08 02:26:28 瀏覽:358
壓縮袋鞋子 發布:2025-07-08 02:21:30 瀏覽:752
為什麼安卓打吃雞感覺有延遲 發布:2025-07-08 02:09:32 瀏覽:168
課題組伺服器如何使用 發布:2025-07-08 02:09:27 瀏覽:44
sql語句長度限制 發布:2025-07-08 02:07:04 瀏覽:770