一、Sql規範? sql是Structured Query Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。 在使用它時,只需要發出“做什麼”的命令,“怎麼做”是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基 ...
一、Sql規範?
sql是Structured Query Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。
在使用它時,只需要發出“做什麼”的命令,“怎麼做”是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持sql。
<1> 在資料庫系統中,SQL語句不區分大小寫(建議用大寫) 。但字元串常量區分大小寫。建議命令大寫,表名庫名小寫;
<2> SQL語句可單行或多行書寫,以“;”結尾。關鍵詞不能跨多行或簡寫。
<3> 用空格和縮進來提高語句的可讀性。子句通常位於獨立行,便於編輯,提高可讀性。
1 2 |
SELECT * FROM tb_table
WHERE NAME = "YUAN" ;
|
<4> 註釋:單行註釋:--
多行註釋:/*......*/
<5>sql語句可以折行操作
二、Sql數據類型:
1、數值類型:
2、無符號類型?
=========有符號和無符號tinyint========== #tinyint預設為有符號 MariaDB [db1]> create table t1(x tinyint); #預設為有符號,即數字前有正負號 MariaDB [db1]> desc t1; MariaDB [db1]> insert into t1 values -> (-129), -> (-128), -> (127), -> (128); MariaDB [db1]> select * from t1; +------+ | x | +------+ | -128 | #-129存成了-128 | -128 | #有符號,最小值為-128 | 127 | #有符號,最大值127 | 127 | #128存成了127 +------+ #設置無符號tinyint MariaDB [db1]> create table t2(x tinyint unsigned); MariaDB [db1]> insert into t2 values -> (-1), -> (0), -> (255), -> (256); MariaDB [db1]> select * from t2; +------+ | x | +------+ | 0 | -1存成了0 | 0 | #無符號,最小值為0 | 255 | #無符號,最大值為255 | 255 | #256存成了255 +------+
三、顯示長度和存儲位元組?
mysql> create table test(id int); Query OK, 0 rows affected (0.01 sec) mysql> desc test; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ row in set (0.00 sec)
四、decimal類型?
float:浮點型,含位元組數為4,32bit, 數值範圍為-3.4E38~3.4E38(7個有效位) double:雙精度實型,含位元組數為8,64bit 數值範圍-1.7E308~1.7E308(15個有效位) decimal:數字型,128 數值範圍 ±1.0 × E28 to ±7.9 × E28(28個有效位) decimal的精度比double大,所能儲存的最大數卻比double要小 。decimal是存在精度損失的,只不過較小而已!
decimal的精度比double大,所能儲存的最大數卻比double要小 。decimal是存在精度損失的,只不過較小而已!
五、BIT
BIT(M)可以用來存放多位二進位數,M範圍從1~64,如果不寫預設為1位。
註意:對於位欄位需要使用函數讀取
bin()顯示為二進位
hex()顯示為十六進位
mysql> create table t(id bit); Query OK, 0 rows affected (0.03 sec) mysql> desc t; +-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | id | bit(1) | YES | | NULL | | +-------+--------+------+-----+---------+-------+ row in set (0.00 sec) mysql> insert t values (1); Query OK, 1 row affected (0.00 sec) mysql> select * from t; +------+ | id | +------+ | | +------+ row in set (0.00 sec) mysql> select bin(id) from t; +---------+ | bin(id) | +---------+ | 1 | +---------+ row in set (0.00 sec)
mysql> alter table t modify id bit(5); Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> insert into t values(8); Query OK, 1 row affected (0.00 sec) mysql> select bin(id),hex(id) from t; +---------+---------+ | bin(id) | hex(id) | +---------+---------+ | 1 | 1 | | 1000 | 8 | +---------+---------+ rows in set (0.00 sec)
六、字元串類型?
存儲字元串:
CHAR系列 :CHAR VARCHAR
TEXT系列 : TINYTEXT TEXT MEDIUMTEXT LONGTEXT
存儲二進位數據:
BINARY系列: BINARY VARBINARY
BLOB 系列 : TINYBLOB BLOB MEDIUMBLOB LONGBLOB
/* char (m) CHAR列的長度固定為創建表時聲明的長度: 0 ~ 255。其中m代表字元串的長度。 PS: 即使數據小於m長度,也會占用m長度 varchar(m) VARCHAR列中的值為可變長字元串,長度: 0 ~ 65535。其中m代表該數據類型所允許保存的字元串 的最大長度,只要長度小於該最大值的字元串都可以被保存在該數據類型中。 註:雖然varchar使用起來較為靈活,但是從整個系統的性能角度來說,char數據類型的處理速度 更快,有時甚至可以超出varchar處理速度的50%。因此,用戶在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡 text text數據類型用於保存變長的大字元串,可以組多到65535 (2**16 − 1)個字元。 mediumtext A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters. longtext A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters. */
在查詢的時候,CHAR列刪除了尾部的空格,而VARCHAR則保留這些空格。 mysql> create table t1(x char(5),y varchar(5)); mysql> insert into t1 values('你瞅啥 ','瞅你妹 '); mysql> select x,length(x),y,length(y) from t1; +--------+-----------+----------+-----------+ | x | length(x) | y | length(y) | +--------+-----------+----------+-----------+ | 你瞅啥 | 9 | 瞅你妹 | 11 | +--------+-----------+----------+-----------+
七、日期類型
表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每個時間類型有一個有效值範圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。
(1)、year
============year=================== create table t_year(born_year year); insert into t_year values (1901), (2155); select * from t_year; +-----------+ | born_year | +-----------+ | 1901 | | 2155 | +-----------+ rows in set (0.00 sec)
(2)、date time datetime
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2017-08-01 19:38:54 |
+---------------------+
1 row in set (0.00 sec)
(3)、timestamp
/* 在實際應用的很多場景中,MySQL的這兩種日期類型都能夠滿足我們的需要,存儲精度都為秒, 但在某些情況下,會展現出他們各自的優劣。下麵就來總結一下兩種日期類型的區別。 1.DATETIME的日期範圍是1001——9999年,TIMESTAMP的時間範圍是1970——2038年。 2.DATETIME存儲時間與時區無關,TIMESTAMP存儲時間與時區有關,顯示的值也依賴於時區。 在mysql伺服器,操作系統以及客戶端連接都有時區的設置。 3.DATETIME使用8位元組的存儲空間,TIMESTAMP的存儲空間為4位元組。因此,TIMESTAMP比DATETIME的 空間利用率更高。 4.DATETIME的預設值為null;TIMESTAMP的欄位預設不為空(not null),預設值為當前時間 (CURRENT_TIMESTAMP),如果不做特殊處理,並且update語句中沒有指定該列的更新值,則默 認更新為當前時間。 */ datetime與timestamp
八、枚舉類型與集合類型
欄位的值只能在給定範圍中選擇,如單選框,多選框 enum 單選 只能在給定的範圍內選一個值,如性別 sex 男male/女female set 多選 在給定的範圍內可以選擇一個或一個以上的值(愛好1,愛好2,愛好3...) 解析:
/* 枚舉類型(enum) An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.) 示例: CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'), ('polo shirt','small'); 集合類型(set) A SET column can have a maximum of 64 distinct members. 示例: CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); */