国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

030、SQL語句之數據類型與表達式

這篇具有很好參考價值的文章主要介紹了030、SQL語句之數據類型與表達式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

數值數據類型

整數數據類型

類型 存儲空間 最小值(有符號/無符號) 最大值(有符號/無符號)
TINYINT 1 -128 / 0 127 / 255
SMALLINT 2 -32768 / 0 32767 / 65535
MEDIUMINT 3 -8388608 / 0 8388607 / 16777215
INT 4 -2147483648 / 0
BIGINT 8 -9223372036854775808 / 0 9223372036854775807 / 18446744073709551615

注意unsigned: 不允許負數

insert into T values(pow(2,10));  # pow: 2^10 210次方 

定點數據類型

用于精確數值:整數、小數或兩者

  • 數據類型:

    • decimal:
      • 固定十進制
      • 保持精度
  • 示例
    貨幣: cost decimal (10,2)
    輸出:385.72
    10: 整數+小數一共多少位
    2: 小數的位數

浮點數據類型

用于近似值:整數、小數或兩者

類型 存儲空間
FLOAT 4
FLOAT(p) 如果 0 <= p <= 24 為 4 個字節(jié),如果 25 <= p <= 53 為 8 個字節(jié)
DOUBLE 8

數值字面值

  • 精確值字面值:
    • 在SQL語句中顯示的即為其具體數值
    • 寫為整數或十進制,滅有指數
      -近似值
    • 并不總按照SQL語句中指定的那樣使用
    • 用科學計數法寫成浮點,帶指數
    • 有誤差
mysql> select 1.1+2.2,1.1E0+2.2E0;
+---------+--------------------+
| 1.1+2.2 | 1.1E0+2.2E0        |
+---------+--------------------+
|     3.3 | 3.3000000000000003 |
+---------+--------------------+
1 row in set (0.00 sec)

BIT數據類型

BIT 類型
比特值類型。M 表示比特位的長度,取值范圍從1到64,其默認值是1。

BIT[(M)]

示例
存儲4位: status_column BIT(4)
字面值可表達為:
b’1101’
0b1101

mysql> create table tt(id bit(2));
Query OK, 0 rows affected (0.40 sec)

mysql> insert into tt values(b'0101010');
ERROR 1406 (22001): Data too long for column 'id' at row 1
mysql> insert into tt values(b'010');
Query OK, 1 row affected (0.04 sec)

mysql> select collation(id) from tt;
+---------------+
| collation(id) |
+---------------+
| binary        |
+---------------+
1 row in set (0.02 sec)

mysql> select hex(id) from tt; # hex :16進制
+---------+
| hex(id) |
+---------+
| 2       |
+---------+
1 row in set (0.01 sec)

布爾表達式

布爾類型,別名為 BOOL,和 TINYINT(1) 等價。零值被認為是 False,非零值認為是 True。在 TiDB 內部,True 存儲為 1,False 存儲為 0。

mysql> select 1=true,1=TRUE,True;
+--------+--------+------+
| 1=true | 1=TRUE | TRUE |
+--------+--------+------+
|      1 |      1 |    1 |
+--------+--------+------+
1 row in set (0.00 sec)

時間數據類型

timestamp : 受時區(qū)影響,并且最大范圍是2038年

數據類型 大小 范圍
DATE 3 0000-00-00 to 9999-12-31
TIME 3 -838:59:59 to 838:59:59
DATETIME 8 0000-00-00 00:00:00 to 9999-12-31 23:59:59
TIMESTAMP 4 1970-01-01 00:00:01 to 2038-01-19 03:14:07
YEAR 1 1901-2155
mysql> create table dropme(day datetime);
Query OK, 0 rows affected (0.17 sec)

mysql> set sql_mode='';
Query OK, 0 rows affected (0.02 sec)

mysql> insert into dropme(day) values('0000 00-00-00');
Query OK, 1 row affected, 1 warning (0.04 sec)

mysql> set sql_mode='strict_trans_tables';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dropme(day) values('0000 00-00-00');
ERROR 1292 (22007): Incorrect datetime value: '0000 00-00-00' for column 'day' at row 1

時間戳和時區(qū)

  • 當前時區(qū): select @@time_zone;
  • 在被存儲時,timestamp值從當前時區(qū)轉換為UTC
  • 在被查詢時,數據從UTC轉換為當前時區(qū)
mysql> set time_zone='+08:00';
Query OK, 0 rows affected (0.01 sec)

mysql> create table dropme(d1 timestamp,d2 datetime);
Query OK, 0 rows affected (0.14 sec)

mysql> insert into dropme values(now(),now());
Query OK, 1 row affected (0.04 sec)

mysql> select * from dropme;
+---------------------+---------------------+
| d1                  | d2                  |
+---------------------+---------------------+
| 2023-06-30 06:48:44 | 2023-06-30 06:48:44 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> set time_zone='+09:00';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dropme;
+---------------------+---------------------+
| d1                  | d2                  |
+---------------------+---------------------+
| 2023-06-30 07:48:44 | 2023-06-30 06:48:44 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> set time_zone='+10:00';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dropme;
+---------------------+---------------------+
| d1                  | d2                  |
+---------------------+---------------------+
| 2023-06-30 08:48:44 | 2023-06-30 06:48:44 |
+---------------------+---------------------+
1 row in set (0.00 sec)

時間間隔關鍵字

  • interval 用于指定持續(xù)時間的關鍵字
mysql> select '2022-01-01' + interval 10 day,'2022-01-01' + interval '5 2:3:4' day_second;  # day_second  指定天和秒
+--------------------------------+----------------------------------------------+
| '2022-01-01' + interval 10 day | '2022-01-01' + interval '5 2:3:4' day_second |
+--------------------------------+----------------------------------------------+
| 2022-01-11                     | 2022-01-06 02:03:04                          |
+--------------------------------+----------------------------------------------+
1 row in set (0.00 sec)

字符串數據類型

字符集 單個字符字節(jié)數 VARCHAR 最大列長度的取值范圍
ascii 1 (0, 65535]
latin1 1 (0, 65535]
binary 1 (0, 65535]
utf8 3 (0, 21845]
utf8mb4 4 (0, 16383]

文本數據類型

  • tinytext: 最大列長度為255
  • text: 最大列長度為65535
  • mediumtext/longtext: 這兩個數據類型的最大列長度受TiDB的txn_entry_size_limit 和 TiKV的raft-entry-max-size參數影響

二進制

  • binary: 和char類似,固定長度二進制字節(jié)字符串。bin_val binary(6)
  • varbinary: 和varchar類似,可變長度二進制字節(jié)字符串. varbin_val varbinary (6)
  • 示例
mysql> create table bbb(id blob);
Query OK, 0 rows affected (0.18 sec)

mysql> insert into bbb values(cast('SD' as binary));
Query OK, 1 row affected (0.01 sec)

mysql> insert into bbb values('SD');
Query OK, 1 row affected (0.01 sec)

mysql> select id,cast(id as char) from bbb;
+------------+------------------+
| id         | cast(id as char) |
+------------+------------------+
| 0x5344     | SD               |
| 0x5344     | SD               |
+------------+------------------+
2 rows in set (0.01 sec)

ENUM 類型

枚舉類型是一個字符串,它只能有一個值的字符串對象。其值必須是從一個固定集合中選取,這個固定集合在創(chuàng)建表的時候定義,語法是:

ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

例如:

ENUM(‘apple’, ‘orange’, ‘pear’)
枚舉類型的值在 TiDB 內部使用數值來存儲,每個值會按照定義的順序轉換為一個數字,比如上面的例子中,每個字符串值都會映射為一個數字:

數字
NULL NULL
‘’ 0
‘apple’ 1
‘orange’ 2
‘pear’ 3
mysql> create table t5(id enum('Sunday','Monday','Tuesday','Wednesda,y','Thursday','Friday','Saturday'));
Query OK, 0 rows affected (0.10 sec)

mysql> insert into t5 values ('Monday');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t5;
+--------+
| id     |
+--------+
| Monday |
+--------+
1 row in set (0.00 sec)
mysql> create table s1(id set('A','B','C','a','ac','bca','ad') defaullt null);
Query OK, 0 rows affected (0.10 sec)

mysql> desc s1;
+-------+--------------------------------------+------+------+---------+-------+
| Field | Type                                 | Null | Key  | Default | Extra |
+-------+--------------------------------------+------+------+---------+-------+
| id    | set('A','B','C','a','ac','bca','ad') | YES  |      | NULL    |       |
+-------+--------------------------------------+------+------+---------+-------+
1 row in set (0.00 sec)

mysql> insert into s1 values ('B');
Query OK, 1 row affected (0.02 sec)

mysql> insert into s1 values ('ABCDE');
ERROR 1265 (01000): Data truncated for column 'id' at row 1
mysql> insert into s1 values ('ABCD');
ERROR 1265 (01000): Data truncated for column 'id' at row 1
mysql> insert into s1 values ('ABC');
ERROR 1265 (01000): Data truncated for column 'id' at row 1
mysql> insert into s1 values ('C,B');
Query OK, 1 row affected (0.02 sec)

mysql> select * from s1;
+------+
| id   |
+------+
| B    |
| B,C  |
+------+
2 rows in set (0.00 sec)

SET 類型

集合類型是一個包含零個或多個值的字符串,其中每個值必須是從一個固定集合中選取,這個固定集合在創(chuàng)建表的時候定義,語法是:

SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

例如:

SET('1', '2') NOT NULL
上面的例子中,這列的有效值可以是:
'' ,'1','2','1,2'

字符串數據類型比較

類型 最大限制 備注
標識符最大長度 64
總Table的數量 無限制
columns 默認為1017,最大可調至4096 通過table-couumn-count-limit 修改
indexs 默認為64,最大可調至512 可通過index-limit修改
rows 無限制
單行size 6MB 可通過txn-entry-size-limit調整
單列size 6MB
分區(qū)數量 1024
字段類型 最大長度
CHAR 255 characters
Binary 255 bytes
varchar,varbinary 65535 bytes
tinyblob,tinytext 255 bytes
blob,text 65535 bytes
mediumblob,mediumtext 16777215 bytes
enum 65535 values
set 64 members

引號的使用

  • 使用’ 或者"
  • ansi_quotes SQL模式會將雙引號內的字符解釋為標識符
  • 為了便于一直,應首選單引號

字符集和排序規(guī)則

  • character set 是一組符號和編碼
    • 所有字符串都屬于一個特定的字符集
    • TiDB中默認的字符集是utf8mb4
  • collation 是一組用于比較字符集中字符和字符排序順序的規(guī)則
    • 影響字符和字符串的比較
    • TiDB中的默認規(guī)則是utf8mb4_bin
  • show character set : 顯示所有支持的字符集
  • show collation: 顯示所有支持的排序規(guī)則
select 'A'='a' collate utf8mb4_bin,'A'='a' collate utf8mb4_general_ci,'A'='a' ;

CAST函數

  • 語法
    cast(expression as type)
  • cast函數將任何類型的值轉換為具有指定類型的值。目標類型可以是:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED
  • 例如: select cast(’ ‘as binary),binary(’ ');
select cast(' 'as binary),binary(' ');
select cast('123' as decimal),cast('	123' as decimal),cast('123	' as decimal),cast('	1	23	' as decimal);

選擇數據類型

  • ABC原則
    • Appropriate:合適
    • Brief:消耗最少的資源
    • Complete: 數據不可丟失
  • 主鍵的設計和考慮

Null

  • NULL 是一個SQL關鍵字,用于定義允許缺失值的數據類型

    • 未知:存在值,但目前尚不知道精確值
    • 不適用: 如果指定了某個值,則該值將無法準確地具有代表性
    • 默認情況下允許空值
    • 如果列不允許空值,適用not null聲明確保數據完整性
    • null 是order by中的最小值
  • 示例

select NULL = NULL,NULL != NULL,NULL <=> NULL , NULL<=> 'X'

null 和誰計算都是null (除了<=> 這個符號)文章來源地址http://www.zghlxwxcb.cn/news/detail-535818.html

到了這里,關于030、SQL語句之數據類型與表達式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 深入理解Rust語句和表達式

    ?? 團隊博客: 汽車電子社區(qū) ??語句會執(zhí)行一些操作但是不會返回一個值,而表達式會在求值后返回一個值,因此在上述函數體的三行代碼中,前兩行是語句,最后一行是表達式。 ??以上都是語句,它們完成了一個具體的操作,但是并沒有返回值,因此是語句。 ??由

    2024年01月23日
    瀏覽(25)
  • sh 腳本循環(huán)語句和正則表達式

    sh 腳本循環(huán)語句和正則表達式

    目錄 1、循環(huán)語句 1、for 2、while 3、until 2、正則表達式 1、元字符 2、表示次數 3、位置錨定 4、分組 5、擴展正則表達式 循環(huán)含義 將某代碼段重復運行多次,通常有進入循環(huán)的條件和退出循環(huán)的條件 重復運行次數 循環(huán)次數事先已知 循環(huán)次數事先未知 for?為 已知循環(huán)數 相對于

    2024年02月12日
    瀏覽(21)
  • 最新最全面的Spring詳解(三)——Resources,驗證、數據綁定和類型轉換與Spring表達式語言(SpEL)

    最新最全面的Spring詳解(三)——Resources,驗證、數據綁定和類型轉換與Spring表達式語言(SpEL)

    本文為 【Spring】Resources與Spring表達式語言(SpEL) 等相關知識,下邊將對 Resources (包含: Resource接口 、 內置的 Resource的實現 、 ResourceLoader接口 、 應用環(huán)境和資源路徑 ), 驗證、數據綁定和類型轉換 (包含: BeanWrapper 、 PropertyEditor屬性編輯器 、 類型轉換 、 配置 DataB

    2023年04月26日
    瀏覽(26)
  • Go語句與表達式深度解析:全案例手冊

    Go語句與表達式深度解析:全案例手冊

    關注公眾號【TechLeadCloud】,分享互聯網架構、云服務技術的全維度知識。作者擁有10+年互聯網服務架構、AI產品研發(fā)經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智能實驗室成員,阿里云認證的資深架構師,項目管理專業(yè)人士,上億營收AI產品研發(fā)負責人。 語句是Go編程

    2024年02月09日
    瀏覽(11)
  • C語言 / 數據結構中出現報錯: 表達式必須包含算數或指針類型,但他具有類型 “XXX” 。 報錯問題的解決 以及 方法

    C語言 / 數據結構中出現報錯: 表達式必須包含算數或指針類型,但他具有類型 “XXX” 。 報錯問題的解決 以及 方法

    前提介紹:L3 是一個結構體的地址,是一個指針 ?elem是該結構體內的一個結構體元素,elem是一個數組 算數類型是什么? 下該文章最下面 報錯顯示, 表達式必須包含 算數 或 指針類型 , 但elem是一個數組,它的類型明顯不是指針類型, 那么elem 的類型本質上應該就是一個算

    2024年02月09日
    瀏覽(109)
  • c++(8.29)auto關鍵字,lambda表達式,數據類型轉換,標準模板庫,list,文件操作+Xmind

    c++(8.29)auto關鍵字,lambda表達式,數據類型轉換,標準模板庫,list,文件操作+Xmind

    封裝一個學生的類,定義一個學生這樣類的vector容器, 里面存放學生對象(至少3個) 再把該容器中的對象,保存到文件中。 再把這些學生從文件中讀取出來,放入另一個容器中并且遍歷輸出該容器里的學生。 ?1.模板類 2.異常(異常情況為取錢時取的錢小于0或者大于余額)

    2024年02月11日
    瀏覽(31)
  • 【SQL-正則】利用正則表達式進行過濾操作(常用正則表達式)

    1、由數字、26個英文字母或者下劃線組成的字符串 2、非負整數(正整數 + 0 ) 3、正整數 4、非正整數(負整數 + 0) 5、負整數 6、整數 7、非負浮點數(正浮點數 + 0) 8、正浮點數 9、非正浮點數(負浮點數 + 0) 10、負浮點數 11、浮點數 12、由26個英文字母組成的字符串 13、

    2024年02月12日
    瀏覽(32)
  • 3、python布爾類型和條件表達式

    使用布爾值進行分支邏輯! Python有一種稱為 bool 的變量類型。它有兩個可能的值: True 和 False 。 In [1]: 除了直接在代碼中使用 True 或 False 之外,我們通常通過 布爾運算符 獲取布爾值。這些運算符用于回答是/否問題。讓我們來看一些這些運算符。 Operation Description Operation

    2024年01月17日
    瀏覽(16)
  • SQL-正則表達式和約束

    SQL-正則表達式和約束

    正則表達式 約束 正則表達式是一種用來描述字符串模式的工具,它可以用于匹配、查找、替換等操作。正則表達式由字符和特殊字符組成,可以使用這些字符來定義匹配規(guī)則。 常用的正則表達式字符和特殊字符有: 普通字符:表示匹配該字符本身,如 a 表示匹配字母\\\"a\\\"。

    2024年02月08日
    瀏覽(32)
  • sql進階 之case表達式

    sql進階 之case表達式

    CASE表達式是SQL里非常重要而且使用起來非常便利的技術,我們應該學會用它來描述條件分支。本節(jié)將通過 行列轉換、已有數據重分組(分類)、與約束的結合使用、針對聚合結果的條件分支 等例題,來介紹CASE表達式的用法。標紅即為他的作用 先讀如下文章 明白mysql是行引

    2024年02月15日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包