1. 程式人生 > 其它 >多行資料的批處理之bulk collect(r3筆記第16天)

多行資料的批處理之bulk collect(r3筆記第16天)

一、SQL簡述
1.SQL的概述
Structure Query Language(結構化查詢語言)簡稱SQL,它被美國國家標準局(ANSI)確定為關係型資料庫語言的美國標準,後被國際化標準組織(ISO)採納為關係資料庫語言的國際標準。資料庫管理系統可以通過SQL管理資料庫;定義和操作資料,維護資料的完整性和安全性。

2.SQL的分類
1、DDL(Data Definition Language) 資料定義語言,用來操作資料庫、表、列等; 常用語句:CREATE、 ALTER、DROP

2、DML(Data Manipulation Language) 資料操作語言,用來操作資料庫中表裡的資料;常用語句:INSERT、 UPDATE、 DELETE

3、DCL(Data Control Language) 資料控制語言,用來操作訪問許可權和安全級別; 常用語句:GRANT、DENY

4、DQL(Data Query Language) 資料查詢語言,用來查詢資料 常用語句:SELECT

二、資料庫的三大正規化
1、第一正規化(1NF)是指資料庫表的每一列都是不可分割的基本資料線;也就是說:每列的值具有原子性,不可再分割。

2、第二正規化(2NF)是在第一正規化(1NF)的基礎上建立起來得,滿足第二正規化(2NF)必須先滿足第一正規化(1NF)。如果表是單主鍵,那麼主鍵以外的列必須完全依賴於主鍵;如果表是複合主鍵,那麼主鍵以外的列必須完全依賴於主鍵,不能僅依賴主鍵的一部分。

3、第三正規化(3NF)是在第二正規化的基礎上建立起來的,即滿足第三正規化必須要先滿足第二正規化。第三正規化(3NF)要求:表中的非主鍵列必須和主鍵直接相關而不能間接相關;也就是說:非主鍵列之間不能相關依賴。
三、資料庫的資料型別
1.整數型別
根據數值取值範圍的不同MySQL 中的整數型別可分為5種,分別是TINYINT、SMALUNT、MEDIUMINT、INT和 BIGINT。最常用的為INT型別的,

2.浮點數型別和定點數型別
在MySQL資料庫中使用浮點數和定點數來儲存小數。
浮點數的型別有兩種:單精度浮點數型別(FLOAT)和雙精度浮點數型別(DOUBLE)。
而定點數型別只有一種即DECIMAL型別。

3.字串型別
在MySQL中常用CHAR 和 VARCHAR 表示字串。
兩者不同的是:VARCHAR儲存可變長度的字串。
當資料為CHAR(M)型別時,不管插入值的長度是實際是多少它所佔用的儲存空間都是M個位元組;
而VARCHAR(M)所對應的資料所佔用的位元組數為實際長度加1
4.日期與時間型別
MySQL提供的表示日期和時間的資料型別分別是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。
YEAR型別
YEAR型別用於表示年份,在MySQL中,可以使用以下三種格式指定YEAR型別 的值。

1、使用4位字串或數字表示,範圍為’1901’—'2155’或1901—2155。例如,輸人 ‘2019’或2019插人到資料庫中的值均為2019。

2、使用兩位字串表示,範圍為’00’—‘99’。其中,‘00’—'69’範圍的值會被轉換為 2000—2069範圍的YEAR值,‘70’—'99’範圍的值會被轉換為1970—1999範圍的YEAR 值。例如,輸人’19’插人到資料庫中的值為2019。

3、使用兩位數字表示,範圍為1—99。其中,1—69範圍的值會被轉換為2001— 2069範圍的YEAR值,70—99範圍的值會被轉換為1970—1999範圍的YEAR值。例 如,輸人19插入到資料庫中的值為2019。

請注意:當使用YEAR型別時,一定要區分’0’和0。因為字串格式的’0’表示的YEAR值是2000而數字格式的0表示的YEAR值是0000。
DATE型別
DATE型別用於表示日期值,不包括時間部分。在MySQL中,可以使用以下四種格式指定DATA型別的值

1、以‘YYYY-MM-DD'或者’YYYYMMDD'字串格式表示。
例如,輸入‘2014-01-21’或‘20140121’,插入資料庫中的日期都是2014-02-21。

2、以’YY-MM-DD’或者‘YYMMDD’字串格式表示。YY表示的是年,範圍為‘00‘~’99’,其中‘00’~’69’範圍的值會被轉換為2000~2069範圍的值,‘70’~‘99’範圍的值會被轉化為1970~1999範圍的值。
例如,輸入‘14-01-21’或者‘140121’,插入資料庫中的日期都是2014-01-21.

3、以YY-MM-DD或者YYMMDD數字格式表示。
例如,輸入14-021-21或140121,插入資料庫中的日期都為2014-01-21.

4、使用CURRENT_DATE或者NOW()表示當前系統日期

TIME型別
TIME型別用於表示時間值,它的顯示形式一般為HH:MM:SS,其中,HH表示小時, MM表示分,SS表示秒。在MySQL中,可以使用以下3種格式指定TIME型別的值。

1、以’D HH:MM:SS’字串格式表示。其中,D表示日可取0—34之間的值, 插人資料時,小時的值等於(DX24+HH)。
例如,輸入’2 11:30:50’插人資料庫中的日期為59:30:50。

2、以’HHMMSS’字串格式或者HHMMSS數字格式表示。

例如,輸人’115454’或115454,插入資料庫中的日期為11:54:54

3、使用CURRENT_TIME或NOW()輸人當前系統時間。

DATETIME型別
DATETIME型別用於表示日期和時間,它的顯示形式為’YYYY-MM-DD HH: MM:SS’,其中,YYYY表示年,MM表示月,DD表示日,HH表示小時,MM表示分,SS 表示秒。

1、以’YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字串格式表示的日期和時間,取值範圍為’1000-01-01 00:00:00’—‘9999-12-3 23:59:59’。例如,輸人’2019-01-22 09:01:23’或 ‘20140122_0_90123’插人資料庫中的 DATETIME 值都為 2019-01-22 09:01:23。

2、以’YY-MM-DD HH:MM:SS’或者’YYMMDDHHMMSS’字串格式表示的日期和時間,其中YY表示年,取值範圍為’00’—‘99’。與DATE型別中的YY相同,‘00’— '69’範圍的值會被轉換為2000—2069範圍的值,‘70’—'99’範圍的值會被轉換為1970—1999範圍的值。

3、以YYYYMMDDHHMMSS或者YYMMDDHHMMSS數字格式表示的日期 和時間。例如,插入20190122090123或者190122090123,插人資料庫中的DATETIME值都 為 2019-01-22 09:01:23。

4、使用NOW來輸人當前系統的日期和時間。

TIMESTAMP型別

TIMESTAMP型別用於表示日期和時間,它的顯示形式與DATETIME相同但取值範圍比DATETIME小。在此,介紹幾種TIMESTAMP型別與DATATIME型別不同的形式:

1、使用CURRENT_TIMESTAMP輸人系統當前日期和時間。

2、輸人NULL時系統會輸人系統當前日期和時間。

3、無任何輸人時系統會輸入系統當前日期和時間。

時間函式:
SELECT NOW();                 當前年月日時間  2022-4-15 13:35:50        
SELECT DAY (NOW());        當前月份的第幾天    15        
SELECT DATE (NOW());        當前年月日 2022-4-15    
SELECT TIME (NOW());        當前時間 13:35:50
SELECT YEAR (NOW());        當前年份 2022
SELECT MONTH (NOW());        當前月份 4
SELECT CURRENT_DATE();        當前年月 2022-4-15
SELECT CURRENT_TIME();        當前時間 13:35:50
SELECT CURRENT_TIMESTAMP();    當前年月日時間  2022-4-15 13:35:50
SELECT ADDTIME('14:23:12','01:02:01');   兩個時間相加 15:25:13
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY);    當前時間的後一天2022-4-16 13:35:50    
SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH);當前時間的後一月2022-5-15 13:35:50    
SELECT DATE_SUB(NOW(),INTERVAL 1 DAY);       當前時間的前一天2022-4-14 13:35:50        
SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH);當前時間的前一月2022-3-15 13:35:50    
SELECT DATEDIFF('2019-07-22','2019-05-05');       兩個時間點中間有多少天78