1. 程式人生 > >資料庫基礎01——ANSI SQL資料型別

資料庫基礎01——ANSI SQL資料型別

資料庫基礎01——ANSI SQL資料型別

首先總結下ANSI SQL支援的基本資料型別

主要有三:

  • 字串型別
  • 數值型別
  • 日期和時間型別
  • 其他

1、字串型別

1.1定長字串
型別 描述
CHARACTER(n) n定義了欄位能夠儲存的最多字串數量。使用定長字串,通常會用空格來填充數量不足的字。所以,不要使用定長資料型別來儲存長度不定的資料,會導致空間浪費
1.2 變長字串
型別 描述
CHARACTER VARYING(n) ANSI 標準的sql,一般用以下幾個
VARCHAR(n) Sql server 和MySql ; 字元/字串。可變長度。最大長度 n。
VARINARY(n) Oracle; 字元/字串。 可變長度。最大長度 n。
VARCHAR2(n) Oracle; 字元/字串。可變長度。最大長度 n。
1.3 定長、變長串,用於存二進位制資料
型別 描述
BINARY(n) 固定長度為 n 位元組,其中 n 值從 1 到 8,000 ,儲存空間為 n 位元組
VARBINARY( n|max) 可變長度,n 的取值範圍為 1 至 8,000,
max 是指最大儲存空間是 2^31-1 個位元組,即最大4GB;
注意都是位元組 n:在表列定義或變數宣告語句中沒有指定 n,則預設長度為 1;
在CAST 函式中沒有指定 n,則預設長度為 30;

​ 這兩種表示儲存的的都是位元組,這種資料型別通常用來儲存數字式資料,例如影象檔案。

1.3 大物件資料

常見的有:BLOB 和 TEXT

型別 描述
BLOB BLOB是二進位制大物件,它的資料是很長的二進位制字串(位元組串),BLOB適合在資料庫裡儲存二進位制媒體檔案,比如影象和mp3
TEXT TEXT資料型別是一種字串型別,通常用於在資料庫裡儲存大字符集,可以理解為是一種很大的VARCHAR, 比如部落格站點的HTML輸入

2、數值型別

SQL數值的標準有:

BIT(n)

BIT VARYING(n)

DECIMAL(p,s)

INTEGER

SMALLINT

BIGINT

FLOAT(p,s)

DOUBLE PRECISION(p,s)

REAL(s)

一般常用 DECIMAL(p,s) p表示欄位的最大長度,s表示小數點後面的位數

2.1 小數型別
型別 描述
DECIMAL(p,s) p表示有效位數(總體長度),s表示標度。 小數點不算做一個字元
超過定義的位數會被四捨五入,比如 DECIMAL(4,2)表示的字元, 12.449 就會被四捨五入為12.45
2.2 整數型別
型別 描述
INTEGER§ 整數值,精度為p
SMALLINT 整數值,精度為5
BIGINT 整數值,精度為19
INTEGER 整數值,精度為10
2.3 浮點數

​ 浮點數是有效位數和標度都可變並且沒有限制的小數數值 。

型別 描述
REAL 單精度浮點數值
DOUBLE PRECISION 雙精度浮點數值
FLOAT 近似數值,尾數精度 16。
FLOAT(n) 近似數值,尾數精度為n

3、日期和時間型別

​ 標準SQL 支援 DATETIME資料型別,包括

DATE 、 TIME 、DATETIME、 TIMESTAMP

​ DATETIME 元素包括:

YEAR、 MONTH、 DAY 、HOUR 、MINUTE 、SEOND

型別 描述
DATE 儲存年、月、日的值。
TIME 儲存小時、分、秒的值。
DATETIME 儲存年、月、日、小時、分、秒的值。
TIMESTAMP 儲存年、月、日、小時、分、秒的值。

4、其他型別概念

4.1、直義字串

​ 直義字串就是一系列字元, 比如姓名或電話號碼, 這是由使用者或程式明確指定的。 直義字串包含
的資料與前面介紹的資料型別具有一樣的屬性, 但字串的值是已知的。 列本身的值通常是不能確定的,
因為每一列通常包含了欄位在全部記錄裡的不同值。

比如我們查詢的時候 ,where name=‘zhangsan’ 這個‘zhangsan’就是一個直義字串,知道有這麼回事就行

4.2、Null 資料型別

NULL值表示沒有值。 NULL值在SQL裡有廣泛的應用, 包括表的建立、 查詢的搜尋
條件, 甚至是在直義字串裡。

4.3、布林值

布林值的取值範圍是TRUE、 FALSE和NULL, 用於進行資料比較。 舉例來說, 在查詢中設定條件時,
每個條件都會被求值, 得到TRUE、 FALSE或NULL。 如果查詢中所有條件的值都是TRUE, 資料就會被返
回; 如果某個條件的值是FALSE或NULL, 資料就不會返回。

注意;

大多數資料庫實現並沒有一個嚴格意義上的BOOLEAN型別, 而是代之以各自不同的實現方法。
MySQL擁有BOOLEAN型別, 但實質上與其現有的TINYINT型別相同。 Oracle傾向於讓使用者使用一個
CHAR(1)值來代替布林值, 而SQL Server則使用BIT來代替。

4.4、自定義型別

語句CREATE TYPE用於建立自定義型別。

舉例來說, 在MySQL和Oracle中, 可以像下面這樣建立一個型別:

CREATE TYPE PERSON OBJECT
(NAME	VARCHAR(30),
 SSH	VARCHAR(9));

然後就可以像這樣引用自定義型別:

CREATE TABLE EMP_PAY
(EMPLOYEE	PERSON,
 SALARY	DECIMAL(10,2),
 hIRE_DATE DATE);

4.5 域

域是能夠被使用的有效資料型別的集合。 域與資料相關聯, 從而只接受特定的資料。 在域建立之後,
我們可以向域新增約束。 約束與資料型別共同發揮作用, 從而進一步限制欄位能夠接受的資料。 域的使用
類似於自定義型別。

像這樣可以建立域:

CREATE DOMAIN MONEY_D NUMBER(8,2)

像下面這樣為域新增約束

ALTER DOMAIN MONEY_D 
ADD CONSTRAINT MONEY_CON1
CHECK (VALUE >5)

然後像下面這樣引用域

CREATE TABLE EMP_PAY
(EMP_ID     NUMBER(9),
EMP_NAME	VARCHAR2(30),
PAY_RATE 	MONEY_D)