SQL 日期處理和視圖創建:常見數據類型、示例查詢和防範 SQL 註入方法

来源:https://www.cnblogs.com/xiaowange/archive/2023/12/04/17874154.html
-Advertisement-
Play Games

SQL處理日期 在資料庫操作中,處理日期是一個關鍵的方面。確保插入的日期格式與資料庫中日期列的格式匹配至關重要。以下是一些常見的SQL日期數據類型和處理方法。 SQL日期數據類型 MySQL日期數據類型 DATE - 格式為YYYY-MM-DD DATETIME - 格式為YYYY-MM-DD HH ...


SQL處理日期

在資料庫操作中,處理日期是一個關鍵的方面。確保插入的日期格式與資料庫中日期列的格式匹配至關重要。以下是一些常見的SQL日期數據類型和處理方法。

SQL日期數據類型

MySQL日期數據類型

  • DATE - 格式為YYYY-MM-DD
  • DATETIME - 格式為YYYY-MM-DD HH:MI:SS
  • TIMESTAMP - 格式為YYYY-MM-DD HH:MI:SS
  • YEAR - 格式為YYYY或YY

SQL Server日期數據類型

  • DATE - 格式為YYYY-MM-DD
  • DATETIME - 格式為YYYY-MM-DD HH:MI:SS
  • SMALLDATETIME - 格式為YYYY-MM-DD HH:MI:SS
  • TIMESTAMP - 格式為一個唯一的數字

註意: 在創建新表時,請為列選擇適當的日期類型。

SQL處理日期示例

考慮以下訂單表:

訂單ID 產品名稱 訂單日期
1 Geitost 2008-11-11
2 Camembert Pierrot 2008-11-09
3 Mozzarella di Giovanni 2008-11-11
4 Mascarpone Fabioli 2008-10-29

選擇日期為"2008-11-11"的記錄(沒有時間部分)

SELECT * FROM Orders WHERE OrderDate='2008-11-11'

結果:

訂單ID 產品名稱 訂單日期
1 Geitost 2008-11-11
3 Mozzarella di Giovanni 2008-11-11

註意: 如果沒有涉及時間組件,可以輕鬆比較兩個日期。

考慮帶有時間部分的訂單表

訂單ID 產品名稱 訂單日期
1 Geitost 2008-11-11 13:23:44
2 Camembert Pierrot 2008-11-09 15:45:21
3 Mozzarella di Giovanni 2008-11-11 11:12:01
4 Mascarpone Fabioli 2008-10-29 14:56:59

選擇日期為"2008-11-11"的記錄(考慮時間部分)

SELECT * FROM Orders WHERE OrderDate='2008-11-11'

結果:零結果!這是因為查詢僅尋找沒有時間部分的日期。 若要考慮時間部分,需要使用其他條件或函數。

SQL視圖

在SQL中,視圖是基於SQL語句的結果集的虛擬表。視圖類似於真實表,包含行和列,但其數據實際上來自一個或多個真實表。

創建視圖

使用CREATE VIEW語句創建視圖。以下是基本的CREATE VIEW語法:

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

註意: 視圖會始終顯示最新數據,每當用戶查詢它時,資料庫引擎都會重新創建視圖。

示例 1: 創建顯示巴西客戶的視圖

CREATE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName
FROM Customers
WHERE Country = 'Brazil';

查詢視圖:

SELECT * FROM [Brazil Customers];

示例 2: 創建高於平均價格的產品視圖

CREATE VIEW [Products Above Average Price] AS
SELECT ProductName, Price
FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);

查詢視圖:

SELECT * FROM [Products Above Average Price];

更新視圖

使用CREATE OR REPLACE VIEW語句可以更新視圖。

CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

示例: 向"巴西客戶"視圖添加"City"列

CREATE OR REPLACE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName, City
FROM Customers
WHERE Country = 'Brazil';

刪除視圖

使用DROP VIEW語句刪除視圖。

DROP VIEW view_name;

示例: 刪除"巴西客戶"視圖

DROP VIEW [Brazil Customers];

SQL註入

SQL註入是一種惡意的代碼註入技術,可能會破壞資料庫的安全性。它是網路黑客經常使用的一種攻擊方式。SQL註入發生在Web頁面接受用戶輸入,並將該輸入插入到SQL語句中的情況下,而用戶提供的輸入不是正常的數據,而是惡意構造的SQL語句。

基本概念

示例 1: 基於1=1的SQL註入

考慮以下代碼:

txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;

如果用戶輸入的txtUserId105 OR 1=1,則構建的SQL語句為:

SELECT * FROM Users WHERE UserId = 105 OR 1=1;

這將返回Users表中的所有行,因為 OR 1=1 始終為真。這種註入可能導致訪問敏感信息。

示例 2: 基於""=""的SQL註入

考慮用戶登錄的情況:

uName = getRequestString("username");
uPass = getRequestString("userpassword");

sql = 'SELECT * FROM Users WHERE Name ="' + uName + '" AND Pass ="' + uPass + '"'

如果用戶輸入的uNameuPass " or ""=",則構建的SQL語句為:

SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""

這將返回Users表中的所有行,繞過了登錄驗證。

示例 3: 基於批處理SQL語句的SQL註入

某些資料庫支持批處理SQL語句,允許一次執行多個SQL語句。黑客可以嘗試通過輸入惡意批處理語句來執行危險的操作。

SELECT * FROM Users; DROP TABLE Suppliers

這將返回Users表中的所有行,並刪除Suppliers表。

防範SQL註入

使用SQL參數

為了防止SQL註入,可以使用SQL參數。SQL參數是在執行時以受控的方式添加到SQL查詢中的值。

ASP.NET Razor示例

txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = @0";
db.Execute(txtSQL, txtUserId);

在上述示例中,參數在SQL語句中用 @ 標記表示。

示例: 使用參數的其他語言示例

ASP.NET中的SELECT語句

txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0", txtUserId);
command.ExecuteReader();

ASP.NET中的INSERT INTO語句

txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
command = new SqlCommand(txtSQL);
command.Parameters.AddWithValue("@0", txtNam);
command.Parameters.AddWithValue("@1", txtAdd);
command.Parameters.AddWithValue("@2", txtCit);
command.ExecuteNonQuery();

PHP中的INSERT INTO語句

$stmt = $dbh->prepare("INSERT INTO Customers (CustomerName,Address,City)
VALUES (:nam, :add, :cit)");
$stmt->bindParam(':nam', $txtNam);
$stmt->bindParam(':add', $txtAdd);
$stmt->bindParam(':cit', $txtCit);
$stmt->execute();

使用參數化查詢可以有效防止SQL註入攻擊,因為參數將在執行時以安全的方式插入到SQL查詢中。

最後

為了方便其他設備和平臺的小伙伴觀看往期文章:

微信公眾號搜索:Let us Coding,關註後即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點贊、收藏、關註


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第二部分主要涵蓋了 SpringMVC 中作用域處理,介紹了 Request 作用域、Session 作用域和應用作用域的處理方式,以及 @ModelAttribute 註解的使用和 ModelAndView 的使用方法;最後,探討了靜態資源的處理方式,包括使用 DefaultServlet 或者 ... ...
  • acwing week2 基礎演算法3總結 總結點1:雙指針演算法 //常用模版框架 for (int i = 0, j = 0; i < n; i ++ ) { while (j < i && check(i, j)) j ++ ; } 常見問題分類: (1) 對於一個序列,用兩個指針維護一段區間 ( ...
  • 小市值選股策略的核心在於通過綜合分析公司的基本面、行業定位、財務健康狀況以及市場趨勢, 來尋找那些被市場低估但具備顯著成長潛力的股票,同時也要重視風險管理和投資組合的多樣化。 今天來給大家分享下小市值策略代碼如下: # 顯式導入 BigQuant 相關 SDK 模塊 from bigdatasour ...
  • 選項用來提供對相關設置的強類型訪問,讀取配置首選使用選項模式。選項無法脫離容器使用,依賴容器,實現了選項不同的訪問方式。選項模式使用了泛型包裝器,因此具備瞭如下優點: 不需要顯示註冊選項具體類型,只需要將泛型包裝器註入到容器中; 對於選項實例的評估推遲到獲取IOptions.Value時進行,而不是 ...
  • 前面老周給大伙伴們演示了過濾器的運行流程,大伙只需要知道下麵知識點即可: 1、過濾器分為授權過濾、資源訪問過濾、操作方法(Action)過濾、結果過濾、異常過濾、終結點過濾。上一次咱們沒有說異常過濾和終結點過濾,不過老周後面會說的。對這些過濾器,你有印象就行了。 2、所有過濾器介面都有同步版本和非同步 ...
  • 眾所周知,當我們使用IIS的時候,在使用負載均衡的情況下,想停掉一個站點,通常會點擊Sites(網站)中的Stop(停止)來停止一個站點。但是這樣做,會帶來一個問題,當點擊Stop(停止)時,正在響應中的請求會立刻被切斷,使客戶端無法收到響應,後續也無法連接該站點,在某些業務場景中,比如涉及金額交易 ...
  • 在.NET生態系統中,有許多出色的依賴註入(DI)框架可供選擇。每個框架都有其獨特的特點和優點,可以根據項目需求和偏好進行選擇。下麵詳細介紹一些.NET中優秀的DI框架,它們的優點以及適用場景。 1、Microsoft.Extensions.DependencyInjection: 官方支持:Mic ...
  • 模塊--》文件 包--》文件夾 我們將類似功能的模塊放到一起(包)內,要用時直接導入即可 語法: import 模塊名 as 別名: 》取別名是為了可以節省時間,簡化代碼 import win32process as pro # 以後直接用pro即可 模塊分為三種: 1.內置模塊 2.第三方模塊 3 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...