MySQL知識篇-SQL1

来源:https://www.cnblogs.com/JS-SUN/archive/2019/05/14/10860214.html
-Advertisement-
Play Games

1 SQL是什麼? 答:是結構話語言,是一種操作關係型資料庫的語言。 2 SQL語言分類? 3 數據類型? 整數:int,bit 小數:decimal 字元串:varchar,char 日期時間: date, time, datetime 枚舉類型(enum) 整數:int,bit 小數:decim ...


1 SQL是什麼?

答:是結構話語言,是一種操作關係型資料庫的語言。

2 SQL語言分類?

SQL語言 說明 舉例
DDL 數據定義語言 create  drop
DML 數據操作語言 insert  update  delete
DQL  數據查詢語言 select
DCL 數據管理語言 grant  revoke
TPL 事務處理語言 begin  transaction  commit  rollback
CCL 指針控制語言 declear  cursor

 

 

 

 

 

 

 

 

 

3 數據類型?

  • 整數:int,bit

  • 小數:decimal

  • 字元串:varchar,char

  • 日期時間: date, time, datetime

  • 枚舉類型(enum)

說明:

  • decimal表示浮點數,如decimal(5,2)表示共存5位數,小數占2位

  • char表示固定長度的字元串,如char(3),如果填充ab時會補一個空格

  • varchar表示可變長度的字元串,如varchar(3),填充ab時就會存儲ab

  • 字元串text表示存儲大文本,當字元大於4000時推薦使用

  • 對於圖片、音頻、視頻等文件,不存儲在資料庫中,而是上傳到某個伺服器上,然後在表中存儲這個文件的保存路徑

 

 4 數值類型對應的位元組大小?

數值類型 類型 位元組大小
TINYINT 1 -128 ~ 127
SMALLINT 2 -32768 ~ 32767 
MEDIUMINT 3 -8388608 ~ 8388607
INT 4  
BIGINT 8  

 

 

 

 

 

 

 

 

5 字元串對應的位元組大小?

字元串 類型 位元組大小
CHAR 0-255 類型:char(3) 輸入 'ab', 實際存儲為'ab ', 輸入'abcd' 實際存儲為 'abc'
VARCHAR 0-255 類型:varchar(3) 輸 'ab',實際存儲為'ab', 輸入'abcd',實際存儲為'abc'
TEXT 0-65535 文本

 

 

 

 

 

 

 

6 日期時間對應位元組大小?

類型 位元組大小 例子
DATE 4 ‘2020-01-01’
TIME 3 ‘12:00:00’
DATETIME 8 '2020-01-01 12:00:00'
YEAR 1 '2019'
TIMESTAMP

4

'1970-01-01 00:00:01' UTC ~ '2038-01-01 00:00:01' UTC

 

 

 

 

 

 

 

 

 

7 約束?

  • 主鍵primary key:物理上存儲的順序
  • 非空not null:此欄位不允許填寫空值
  • 惟一unique:此欄位的值不允許重覆
  • 預設default:當不填寫此值時會使用預設值,如果填寫時以填寫為準
  • 外鍵foreign key:對關係欄位進行約束,當為關係欄位填寫值時,會到關聯的表中查詢此值是否存在,如果存在則填寫成功,如果不存在則填寫失敗並拋出異常

 

 (1)primary key

       假如有一張學生信息表,裡面記錄了學生的學號 ,姓名,成績等,那麼,會不會有兩個學號相同的學生,答案肯定是否定的,如果有的話也只能是插入信息的時候犯下的錯誤,那麼我們如何去避免這種錯誤呢,這時候,primary key就發揮作用了。

下麵我們創建一個stu_inform表:

create table stu_inform(

     id int,

     name varchar(20),

     grade double,

     primary key(id),

);

(2) 聯合主鍵

這樣的話我們就為id 加上了主鍵約束,我們來插入一個錯誤的信息

insert into stu_inform values(1,'張三',100.00),(1,'李四',100.00); -- Error

[同時兩個id]

如果是這樣插入的話環境會報出一個錯誤,這個錯誤正是主鍵約束的作用。

但是如果你也想讓姓名也不能相同,你可能會這樣寫

create table stu_inform(

        id int,

        name varchar(20),

        grade double,

        primary key(id,name) );

接下來我們插入一個數據

insert into stu_inform values(1,'張三',100.00),(1,'李四',100.00);

你會發現這條語句是完全可行的,是完全沒有錯誤的,這是為什麼呢,這是因為這是一個聯合主鍵,它的作用是id不能重覆 且 姓名也不能重覆,註意是且

你如果這樣寫的話

insert into stu_inform values(1,'張三',100.00),(1,'張三',100.00);//Error

你如果這樣寫的話就是大錯特錯了,因為這違反了聯合主鍵。因為id和姓名同時相同了就是這個道理。

那麼要怎樣才能實現id不能相同,同時姓名也不能相同呢,這就是下一篇要講的unique的作用了。

 

(3) primary key習慣

1、不更新主鍵列的值

2、不重用主鍵列的值

3、不在主鍵列中使用可能會更改的值(例如,如果使用一個名字作為主鍵以標識某個供應商,應該供應商合併和更改其名字時,必須更改這個主鍵)

4、在使用InnoDB存儲引擎時,如果沒有特別的需要,請永遠使用一個與業務無關的自增欄位作為主鍵

 

(4) foreign key外鍵

 foreignkey  是指一對多關係時建立的關係:

 外鍵是表中與另一個表的另一個欄位匹配的欄位。

 外鍵對相關表中的數據施加限制,這使MySQL能夠保持參照完整性。  

操作:

  

 

我們有兩個表:customersorders. 

每個客戶都有零個或多個訂單,每個訂單隻能屬於一個客戶。

customers表和orders表之間的關係是一對多關係,並且orders由該customerNumber欄位指定的表中的外鍵建立。

表中的customerNumber欄位與orders表中的customerNumber主鍵欄位相關  customers

customers 表稱為父表或被引用表,該orders表稱為子表引用表

外鍵可以是一列或一組列。子表中的列通常引用父表中的主鍵列。

一個表可能有多個外鍵,並且子表中的每個外鍵都可能引用不同的父表。

子表中的行必須包含父表中存在的值,例如,表中的每個訂單記錄orders必須具有表customerNumber中存在的值customers。因此,多個訂單可以指同一個客戶,這種關係被稱為一個(客戶)多個(訂單)或一對多

 

      外鍵的預設作用有兩點:

  1、對子表(外鍵所在的表)的作用:子表在進行寫操作的時候,如果外鍵欄位在父表中找不到對應的匹配,操作就會失敗。

  2、對父表的作用:對父表的主鍵欄位進行刪和改時,如果對應的主鍵在子表中被引用,操作就會失敗。

  外鍵的定製作用----三種約束模式:

    district:嚴格模式(預設), 父表不能刪除或更新一個被子表引用的記錄。

    cascade:級聯模式, 父表操作後,子表關聯的數據也跟著一起操作。

    set null:置空模式,前提外鍵欄位允許為NLL,  父表操作後,子表對應的欄位被置空。

  使用外鍵的前提:

  1、表儲存引擎必須是innodb,否則創建的外鍵無約束效果。

  2、外鍵的列類型必須與父表的主鍵類型完全一致。

  3、外鍵的名字不能重覆。

  4、已經存在數據的欄位被設為外鍵時,必須保證欄位中的數據與父表的主鍵數據對應起來。


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

-Advertisement-
Play Games
更多相關文章
  • Insus.NET把它們寫成自定義函數,再程式中直接套用即可。 前一天: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- Author: Insus.NET -- Create date: 2019-05-15 -- Update dat ...
  • 以前寫過一個方法,先去參考《T-SQL判斷是否為今天》https://www.cnblogs.com/insus/archive/2012/03/22/2411209.html 今天使用一個更加簡單的方法來實現: 實例演示: ...
  • 以前寫過2篇,關於日期比較的,需求不同,每一篇均有參考價值。 《MS SQL日期比較函數》https://www.cnblogs.com/insus/archive/2011/06/24/2089005.html 《MS SQL兩個日期比較,獲取最大或最小的日期》https://www.cnblog ...
  • 函數一般是在數據上執行的,它給數據的轉換和處理提供了方便。只是將取出的數據進行處理,不會改變資料庫中的值。函數根據處理的數據分為單行函數和聚合函數(組函數),組函數又被稱作聚合函數,用於對多行數據進行操作,並返回一個單一的結果,組函數僅可用於選擇列表或查詢的having子句;單行函數對單個數值進行操 ...
  • 測試說明: MERGE是oracle提供的一種特殊的sql語法,非常適用於數據同步場景,即: (把A表數據插到B表,如果B表存在相同主鍵的記錄則使用A表數據對B表進行更新) 數據同步的常規做法是先嘗試插入,插入失敗再進行更新,MERGE比這種常規做法效率高很多。 (特別是A與B表基本一致,同步時主鍵 ...
  • 從一字元串中,過濾所有非數字的字元,留下數字。迴圈所有字元,使用正則[0-9]來匹配。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- Author: Insus.NET -- Create date: 2019-05-14 -- Upd ...
  • 判斷是否為閏年的方法很多,如: 《指定日期,判斷其所屬年份是否為閏年》 https://www.cnblogs.com/insus/p/10841868.html《C#或VB.NET判斷指定的年份是否為閏年》https://www.cnblogs.com/insus/archive/2012/06/ ...
  • 查詢練習一 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...