mysql資料庫語句分類(MySQL語句分類)

本文目錄一覽:

sql server 資料庫和 mysql資料庫主要區別的sql語句有哪些啊?

轉:

1. MySQL支持enum和set類型,SQL Server不支持;

2. MySQL不支持nchar、nvarchar、ntext類型;

3. MySQL資料庫的遞增語句是AUTO_INCREMENT,而MS SQL是identity(1,1);

4. MS SQL默認到處表創建語句的默認值表示是((0)),而在MySQL裡面是不允許帶兩括弧的;

5. MySQL需要為表指定存儲類型;

6. MS SQL識別符是[],[type]表示他區別於關鍵字,但是MySQL卻是 `,也就是按鍵1左邊的那個符號;

7. MS SQL支持getdate()方法獲取當前時間日期,但是MySQL裡面可以分日期類型和時間類型,獲取當前日期是cur_date(),當前完整時間是 now()函數;

8. MS SQL不支持replace into語句,但是在最新的SQL Server 2008裡面,也支持merge語法;

9. MySQL資料庫支持insert into table1 set t1 = 『』, t2 = 『』 ,但是MS SQL不支持這樣寫;

10. MySQL支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)

11. MS SQL不支持limit語句,是非常遺憾的,只能用top 取代limt 0,N,row_number() over()函數取代limit N,M;

12. MySQL在創建表時要為每個表指定一個存儲引擎類型,而MS SQL只支持一種存儲引擎;

13. MySQL不支持默認值為當前時間的datetime類型(MS SQL很容易做到),在MySQL裡面是用timestamp類型;

14. MS SQL裡面檢查是否有這個表再刪除,需要這樣:

if exists (select * from dbo.sysobjects where id = object_id(N’uc_newpm’) and OBJECTPROPERTY(id,N’IsUserTable’)=1)

但是在MySQL裡面只需要 DROP TABLE IF EXISTS cdb_forums;

15. MySQL支持無符號型的整數,那麼比不支持無符號型的MS SQL就能多出一倍的最大數存儲;

16. MySQL不支持在MS SQL裡面使用非常方便的varchar(max)類型,這個類型在MS SQL裡面既可做一般數據存儲,也可以做blob數據存儲;

17. MySQL資料庫創建非聚集索引只需要在創建表的時候指定為key就行,比如:KEY displayorder (fid,displayorder)

在MS SQL裡面必須要:

create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers(username asc,appid asc)

18. MySQL text欄位類型不允許有默認值;

19. MySQL的一個表的總共欄位長度不超過65XXX。

20. 一個很表面的區別就是MySQL的安裝特別簡單,而且文件大小才110M(非安裝版),相比微軟這個龐然大物,安裝進度來說簡直就是…..

21. MySQL的管理工具有幾個比較好的,MySQL_front和官方那個套件,不過都沒有SSMS的使用方便,這是MySQL很大的一個缺點。

22. MySQL的存儲過程只是出現在最新的版本中,穩定性和性能可能不如MS SQL。

23. 同樣的負載壓力,MySQL要消耗更少的CPU和內存,MS SQL的確是很耗資源;

24. php連接MySQL資料庫和MS SQL的方式都差不多,只需要將函數的MySQL替換成MS SQL即可。

25. MySQL支持 date,time,year類型,MS SQL到2008才支持date和time。

mysql的語句和sql語句是一樣的嗎?

總體差不多,但有些小區別;我列給你看看:1 mysql支持enum,和set類型,sql server不支持

2 mysql不支持nchar,nvarchar,ntext類型

3 mysql的遞增語句是AUTO_INCREMENT,而mssql是identity(1,1)

4 msms默認到處表創建語句的默認值表示是((0)),而在mysql裡面是不允許帶兩括弧的

5 mysql需要為表指定存儲類型

6 mssql識別符是[],[type]表示他區別於關鍵字,但是mysql卻是 `,也就是按鍵1左邊的那個符號

7 mssql支持getdate()方法獲取當前時間日期,但是mysql裡面可以分日期類型和時間類型,獲取當前日期是cur_date(),當前完整時間是 now()函數

8 mssql不支持replace into 語句,但是在最新的sql20008裡面,也支持merge語法

9 mysql支持insert into table1 set t1 = 『』, t2 = 『』 ,但是mssql不支持這樣寫

10 mysql支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)

11 mssql不支持limit語句,是非常遺憾的,只能用top 取代limt 0,N,row_number() over()函數取代limit N,M

12 mysql在創建表時要為每個表指定一個存儲引擎類型,而mssql只支持一種存儲引擎

13 mysql不支持默認值為當前時間的datetime類型(mssql很容易做到),在mysql裡面是用timestamp類型

14 mssql裡面檢查是否有這個表再刪除,需要這樣:

if exists (select * from dbo.sysobjects where id = object_id(N’uc_newpm’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)

但是在mysql裡面只需要 DROP TABLE IF EXISTS cdb_forums;

15 mysql支持無符號型的整數,那麼比不支持無符號型的mssql就能多出一倍的最大數存儲

16 mysql不支持在mssql裡面使用非常方便的varchar(max)類型,這個類型在mssql裡面既可做一般數據存儲,也可以做blob數據存儲

17 mysql創建非聚集索引只需要在創建表的時候指定為key就行,比如:KEY displayorder (fid,displayorder) 在mssql裡面必須要:create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers

(username asc,appid asc)

18 mysql text欄位類型不允許有默認值

19mysql的一個表的總共欄位長度不超過65XXX。

20一個很表面的區別就是mysql的安裝特別簡單,而且文件大小才110M(非安裝版),相比微軟這個龐然大物,安裝進度來說簡直就是…..

21mysql的管理工具有幾個比較好的,mysql_front,和官方那個套件,不過都沒有SSMS的使用方便,這是mysql很大的一個缺點。

22mysql的存儲過程只是出現在最新的版本中,穩定性和性能可能不如mssql。

23 同樣的負載壓力,mysql要消耗更少的CPU和內存,mssql的確是很耗資源。

24php連接mysql和mssql的方式都差不多,只需要將函數的mysql替換成mssql即可。

25mysql支持date,time,year類型,mssql到2008才支持date和time。

MYSQL資料庫索引類型都有哪些

在滿足語句需求的情況下,盡量少的訪問資源是資料庫設計的重要原則,這和執行的 SQL 有直接的關係,索引問題又是 SQL 問題中出現頻率最高的,常見的索引問題包括:無索引(失效)、隱式轉換。

1. SQL 執行流程看一個問題,在下面這個表 T 中,如果我要執行 select * from T where k between 3 and 5; 需要執行幾次樹的搜索操作,會掃描多少行?mysql create table T (    – ID int primary key,    – k int NOT NULL DEFAULT 0,    – s varchar(16) NOT NULL DEFAULT ”,    – index k(k))    – engine=InnoDB;mysql insert into T values(100,1, ‘aa’),(200,2,’bb’),\      (300,3,’cc’),(500,5,’ee’),(600,6,’ff’),(700,7,’gg’);

這分別是 ID 欄位索引樹、k 欄位索引樹。

這條 SQL 語句的執行流程:

1. 在 k 索引樹上找到 k=3,獲得 ID=3002. 回表到 ID 索引樹查找 ID=300 的記錄,對應 R33. 在 k 索引樹找到下一個值 k=5,ID=5004. 再回到 ID 索引樹找到對應 ID=500 的 R4

5. 在 k 索引樹去下一個值 k=6,不符合條件,循環結束

這個過程讀取了 k 索引樹的三條記錄,回表了兩次。因為查詢結果所需要的數據只在主鍵索引上有,所以必須得回表。所以,我們該如何通過優化索引,來避免回表呢?

2. 常見索引優化2.1 覆蓋索引覆蓋索引,換言之就是索引要覆蓋我們的查詢請求,無需回表。

如果執行的語句是 select ID from T wherek between 3 and 5;,這樣的話因為 ID 的值在 k 索引樹上,就不需要回表了。

覆蓋索引可以減少樹的搜索次數,顯著提升查詢性能,是常用的性能優化手段。

但是,維護索引是有代價的,所以在建立冗餘索引來支持覆蓋索引時要權衡利弊。

2.2 最左前綴原則

B+ 樹的數據項是複合的數據結構,比如 (name,sex,age) 的時候,B+ 樹是按照從左到右的順序來建立搜索樹的,當 (張三,F,26) 這樣的數據來檢索的時候,B+ 樹會優先比較 name 來確定下一步的檢索方向,如果 name 相同再依次比較 sex 和 age,最後得到檢索的數據。

# 有這樣一個表 P

mysql create table P (id int primary key, name varchar(10) not null, sex varchar(1), age int, index tl(name,sex,age)) engine=IInnoDB;

mysql insert into P values(1,’張三’,’F’,26),(2,’張三’,’M’,27),(3,’李四’,’F’,28),(4,’烏茲’,’F’,22),(5,’張三’,’M’,21),(6,’王五’,’M’,28);

# 下面的語句結果相同

mysql select * from P where name=’張三’ and sex=’F’;     ## A1

mysql select * from P where sex=’F’ and age=26;         ## A2

# explain 看一下

mysql explain select * from P where name=’張三’ and sex=’F’;

+—-+————-+——-+————+——+—————+——+———+————-+——+———-+————-+

| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref         | rows | filtered | Extra       |

+—-+————-+——-+————+——+—————+——+———+————-+——+———-+————-+

|  1 | SIMPLE      | P     | NULL       | ref  | tl            | tl   | 38      | const,const |    1 |   100.00 | Using index |

+—-+————-+——-+————+——+—————+——+———+————-+——+———-+————-+

mysql explain select * from P where sex=’F’ and age=26;

+—-+————-+——-+————+——-+—————+——+———+——+——+———-+————————–+

| id | select_type | table | partitions | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra                    |

+—-+————-+——-+————+——-+—————+——+———+——+——+———-+————————–+

|  1 | SIMPLE      | P     | NULL       | index | NULL          | tl   | 43      | NULL |    6 |    16.67 | Using where; Using index |

+—-+————-+——-+————+——-+—————+——+———+——+——+———-+————————–+

可以清楚的看到,A1 使用 tl 索引,A2 進行了全表掃描,雖然 A2 的兩個條件都在 tl 索引中出現,但是沒有使用到 name 列,不符合最左前綴原則,無法使用索引。所以在建立聯合索引的時候,如何安排索引內的欄位排序是關鍵。評估標準是索引的復用能力,因為支持最左前綴,所以當建立(a,b)這個聯合索引之後,就不需要給 a 單獨建立索引。原則上,如果通過調整順序,可以少維護一個索引,那麼這個順序往往就是需要優先考慮採用的。上面這個例子中,如果查詢條件里只有 b,就是沒法利用(a,b)這個聯合索引的,這時候就不得不維護另一個索引,也就是說要同時維護(a,b)、(b)兩個索引。這樣的話,就需要考慮空間佔用了,比如,name 和 age 的聯合索引,name 欄位比 age 欄位佔用空間大,所以創建(name,age)聯合索引和(age)索引佔用空間是要小於(age,name)、(name)索引的。

2.3 索引下推

以人員表的聯合索引(name, age)為例。如果現在有一個需求:檢索出表中「名字第一個字是張,而且年齡是26歲的所有男性」。那麼,SQL 語句是這麼寫的mysql select * from tuser where name like ‘張%’ and age=26 and sex=M;

通過最左前綴索引規則,會找到 ID1,然後需要判斷其他條件是否滿足在 MySQL 5.6 之前,只能從 ID1 開始一個個回表。到主鍵索引上找出數據行,再對比欄位值。而 MySQL 5.6 引入的索引下推優化(index condition pushdown),可以在索引遍歷過程中,對索引中包含的欄位先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數。這樣,減少了回表次數和之後再次過濾的工作量,明顯提高檢索速度。

2.4 隱式類型轉化

隱式類型轉化主要原因是,表結構中指定的數據類型與傳入的數據類型不同,導致索引無法使用。所以有兩種方案:

修改表結構,修改欄位數據類型。

修改應用,將應用中傳入的字元類型改為與表結構相同類型。

3. 為什麼會選錯索引3.1 優化器選擇索引是優化器的工作,其目的是找到一個最優的執行方案,用最小的代價去執行語句。在資料庫中,掃描行數是影響執行代價的因素之一。掃描的行數越少,意味著訪問磁碟數據的次數越少,消耗的 CPU 資源越少。當然,掃描行數並不是唯一的判斷標準,優化器還會結合是否使用臨時表、是否排序等因素進行綜合判斷。

3.2 掃描行數

MySQL 在真正開始執行語句之前,並不能精確的知道滿足這個條件的記錄有多少條,只能通過索引的區分度來判斷。顯然,一個索引上不同的值越多,索引的區分度就越好,而一個索引上不同值的個數我們稱為「基數」,也就是說,這個基數越大,索引的區分度越好。# 通過 show index 方法,查看索引的基數mysql show index from t;+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+| t     |          0 | PRIMARY  |            1 | id          | A         |       95636 |     NULL | NULL   |      | BTREE      |         |               || t     |          1 | a        |            1 | a           | A         |       96436 |     NULL | NULL   | YES  | BTREE      |         |               || t     |          1 | b        |            1 | b           | A         |       96436 |     NULL | NULL   | YES  | BTREE      |         |               |+——-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+

MySQL 使用採樣統計方法來估算基數:採樣統計的時候,InnoDB 默認會選擇 N 個數據頁,統計這些頁面上的不同值,得到一個平均值,然後乘以這個索引的頁面數,就得到了這個索引的基數。而數據表是會持續更新的,索引統計信息也不會固定不變。所以,當變更的數據行數超過 1/M 的時候,會自動觸發重新做一次索引統計。

在 MySQL 中,有兩種存儲索引統計的方式,可以通過設置參數 innodb_stats_persistent 的值來選擇:

on 表示統計信息會持久化存儲。默認 N = 20,M = 10。

off 表示統計信息只存儲在內存中。默認 N = 8,M = 16。

由於是採樣統計,所以不管 N 是 20 還是 8,這個基數都很容易不準確。所以,冤有頭債有主,MySQL 選錯索引,還得歸咎到沒能準確地判斷出掃描行數。

可以用 analyze table 來重新統計索引信息,進行修正。

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] …

3.3 索引選擇異常和處理1. 採用 force index 強行選擇一個索引。2. 可以考慮修改語句,引導 MySQL 使用我們期望的索引。3. 有些場景下,可以新建一個更合適的索引,來提供給優化器做選擇,或刪掉誤用的索引。

關於mysql資料庫裡面數據類型number的問題

MySQL 數據類型細分下來,大概有以下幾類:

數值,典型代表為 tinyint,int,bigint

浮點/定點,典型代表為 float,double,decimal 以及相關的同義詞

字元串,典型代表為 char,varchar

時間日期,典型代表為 date,datetime,time,timestamp

二進位,典型代表為 binary,varbinary

位類型

枚舉類型

集合類型

大對象,比如 text,blob

json 文檔類型

一、數值類型(不是數據類型,別看錯了)如果用來存放整數,根據範圍的不同,選擇不同的類型。

以上是幾個整數選型的例子。整數的應用範圍最廣泛,可以用來存儲數字,也可以用來存儲時間戳,還可以用來存儲其他類型轉換為數字後的編碼,如 IPv4 等。示例 1用 int32 來存放 IPv4 地址,比單純用字元串節省空間。表 x1,欄位 ipaddr,利用函數 inet_aton,檢索的話用函數 inet_ntoa。

查看磁碟空間佔用,t3 佔用最大,t1 佔用最小。所以說如果整數存儲範圍有固定上限,並且未來也沒有必要擴容的話,建議選擇最小的類型,當然了對其他類型也適用。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl總用量 3.0G3541825 861M -rw-r—– 1 mysql mysql 860M 12月 10 11:36 t1.ibd3541820 989M -rw-r—– 1 mysql mysql 988M 12月 10 11:38 t2.ibd3541823 1.2G -rw-r—– 1 mysql mysql 1.2G 12月 10 11:39 t3.ibd

二、浮點數 / 定點數先說 浮點數,float 和 double 都代表浮點數,區別簡單記就是 float 默認占 4 Byte。float(p) 中的 p 代表整數位最小精度。如果 p 24 則直接轉換為 double,占 8 Byte。p 最大值為 53,但最大值存在計算不精確的問題。再說 定點數,包括 decimal 以及同義詞 numeric,定點數的整數位和小數位分別存儲,有效精度最大不能超過 65。所以區別於 float 的在於精確存儲,必須需要精確存儲或者精確計算的最好定義為 decimal 即可。示例 3創建一張表 y1,分別給欄位 f1,f2,f3 不同的類型。mysql-(ytt/3305)-create table y1(f1 float,f2 double,f3 decimal(10,2));Query OK, 0 rows affected (0.03 sec)

三、字元類型字元類型和整形一樣,用途也很廣。用來存儲字元、字元串、MySQL 所有未知的類型。可以簡單說是萬能類型!

char(10) 代表最大支持 10 個字元存儲,varhar(10) 雖然和 char(10) 可存儲的字元數一樣多,不同的是 varchar 類型存儲的是實際大小,char 存儲的理論固定大小。具體的位元組數和字符集相關。示例 4例如下面表 t4 ,兩個欄位 c1,c2,分別為 char 和 varchar。mysql-(ytt/3305)-create table t4 (c1 char(20),c2 varchar(20));Query OK, 0 rows affected (0.02 sec)

所以在 char 和 varchar 選型上,要注意看是否合適的取值範圍。比如固定長度的值,肯定要選擇 char;不確定的值,則選擇 varchar。

四、日期類型日期類型包含了 date,time,datetime,timestamp,以及 year。year 占 1 Byte,date 占 3 Byte。 

time,timestamp,datetime 在不包含小數位時分別佔用 3 Byte,4 Byte,8 Byte;小數位部分另外計算磁碟佔用,見下面表格。

請點擊輸入圖片描述

請點擊輸入圖片描述

注意:timestamp 代表的時間戳是一個 int32 存儲的整數,取值範圍為 ‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’;datetime 取值範圍為 ‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。

綜上所述,日期這塊類型的選擇遵循以下原則:

1. 如果時間有可能超過時間戳範圍,優先選擇 datetime。2. 如果需要單獨獲取年份值,比如按照年來分區,按照年來檢索等,最好在表中添加一個 year 類型來參與。3. 如果需要單獨獲取日期或者時間,最好是單獨存放,而不是簡單的用 datetime 或者 timestamp。後面檢索時,再加函數過濾,以免後期增加 SQL 編寫帶來額外消耗。

4. 如果有保存毫秒類似的需求,最好是用時間類型自己的特性,不要直接用字元類型來代替。MySQL 內部的類型轉換對資源額外的消耗也是需要考慮的。

示例 5

建立表 t5,對這些可能需要的欄位全部分離開,這樣以後寫 SQL 語句的時候就很容易了。

當然了,這種情形佔用額外的磁碟空間。如果想在易用性與空間佔用量大這兩點來折中,可以用 MySQL 的虛擬列來實時計算。比如假設 c5 欄位不存在,想要得到 c5 的結果。mysql-(ytt/3305)-alter table t5 drop c5, add c5 year generated always as (year(c1)) virtual;Query OK, 1 row affected (2.46 sec)Records: 1  Duplicates: 0  Warnings: 0

五、二進位類型

binary 和 varbinary 對應了 char 和 varchar 的二進位存儲,相關的特性都一樣。不同的有以下幾點:

binary(10)/varbinary(10) 代表的不是字元個數,而是位元組數。

行結束符不一樣。char 的行結束符是 \0,binary 的行結束符是 0x00。

由於是二進位存儲,所以字元編碼以及排序規則這類就直接無效了。

示例 6

來看這個 binary 存取的簡單示例,還是之前的變數 @a。

切記!這裡要提前計算好 @a 佔用的位元組數,以防存儲溢出。

六、位類型

bit 為 MySQL 里存儲比特位的類型,最大支持 64 比特位, 直接以二進位方式存儲,一般用來存儲狀態類的信息。比如,性別,真假等。具有以下特性:

1. 對於 bit(8) 如果單純存放 1 位,左邊以 0 填充 00000001。2. 查詢時可以直接十進位來過濾數據。3. 如果此欄位加上索引,MySQL 不會自己做類型轉換,只能用二進位來過濾。

示例 7

創建表 c1, 欄位性別定義一個比特位。mysql-(ytt/3305)-create table c1(gender bit(1));Query OK, 0 rows affected (0.02 sec)

mysql-(ytt/3305)-select cast(gender as unsigned)  ‘f1’ from c1;+——+| f1   |+——+|    0 ||    1 |+——+2 rows in set (0.00 sec)

過濾數據也一樣,二進位或者直接十進位都行。mysql-(ytt/3305)-select conv(gender,16,10) as gender \   – from c1 where gender = b’1′; +——–+| gender |+——–+| 1      |+——–+1 row in set (0.00 sec)    mysql-(ytt/3305)-select conv(gender,16,10) as gender \    – from c1 where gender = ‘1’;+——–+| gender |+——–+| 1      |+——–+1 row in set (0.00 sec)

其實這樣的場景,也可以定義為 char(0),這也是類似於 bit 非常優化的一種用法。

mysql-(ytt/3305)-create table c2(gender char(0));Query OK, 0 rows affected (0.03 sec)

那現在我給表 c1 簡單的造點測試數據。

mysql-(ytt/3305)-select count(*) from c1;+———-+| count(*) |+———-+| 33554432 |+———-+1 row in set (1.37 sec)

把 c1 的數據全部插入 c2。

mysql-(ytt/3305)-insert into c2 select if(gender = 0,”,null) from c1;Query OK, 33554432 rows affected (2 min 18.80 sec)Records: 33554432  Duplicates: 0  Warnings: 0

兩張表的磁碟佔用差不多。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl總用量 1.9G4085684 933M -rw-r—– 1 mysql mysql 932M 12月 11 10:16 c1.ibd4082686 917M -rw-r—– 1 mysql mysql 916M 12月 11 10:22 c2.ibd

檢索方式稍微有些不同,不過效率也差不多。所以說,字元類型不愧為萬能類型。

七、枚舉類型

枚舉類型,也即 enum。適合提前規劃好了所有已經知道的值,且未來最好不要加新值的情形。枚舉類型有以下特性:

1. 最大佔用 2 Byte。2. 最大支持 65535 個不同元素。3. MySQL 後台存儲以下標的方式,也就是 tinyint 或者 smallint 的方式,下標從 1 開始。4. 排序時按照下標排序,而不是按照裡面元素的數據類型。所以這點要格外注意。

示例 8

創建表 t7。mysql-(ytt/3305)-create table t7(c1 enum(‘mysql’,’oracle’,’dble’,’postgresql’,’mongodb’,’redis’,’db2′,’sql server’));Query OK, 0 rows affected (0.03 sec)

八、集合類型

集合類型 SET 和枚舉類似,也是得提前知道有多少個元素。SET 有以下特點:

1. 最大佔用 8 Byte,int64。2. 內部以二進位位的方式存儲,對應的下標如果以十進位來看,就分別為 1,2,4,8,…,pow(2,63)。3. 最大支持 64 個不同的元素,重複元素的插入,取出來直接去重。4. 元素之間可以組合插入,比如下標為 1 和 2 的可以一起插入,直接插入 3 即可。

示例 9

定義表 c7 欄位 c1 為 set 類型,包含了 8 個值,也就是下表最大為 pow(2,7)。

mysql-(ytt/3305)-create table c7(c1 set(‘mysql’,’oracle’,’dble’,’postgresql’,’mongodb’,’redis’,’db2′,’sql server’));Query OK, 0 rows affected (0.02 sec)

插入 1 到 128 的所有組合。

mysql-(ytt/3305)-INSERT INTO c7WITH RECURSIVE ytt_number (cnt) AS (        SELECT 1 AS cnt        UNION ALL        SELECT cnt + 1        FROM ytt_number        WHERE cnt pow(2, 7)    )SELECT *FROM ytt_number;Query OK, 128 rows affected (0.01 sec)Records: 128  Duplicates: 0  Warnings: 0

九、數據類型在存儲函數中的用法

函數里除了顯式聲明的變數外,默認 session 變數的數據類型很弱,隨著給定值的不同隨意轉換。

示例 10

定義一個函數,返回兩個給定參數的乘積。定義里有兩個變數,一個是 v_tmp 顯式定義為 int64,另外一個 @vresult 隨著給定值的類型隨意變換類型。

簡單調用下。

mysql-(ytt/3305)-select ytt_sample_data_type(1111,222) ‘result’;+————————–+| result                   |+————————–+| The result is: ‘246642’. |+————————–+1 row in set (0.00 sec)

總結

本篇把 MySQL 基本的數據類型做了簡單的介紹,並且用了一些容易理解的示例來梳理這些類型。我們在實際場景中,建議選擇適合最合適的類型,不建議所有數據類型簡單的最大化原則。比如能用 varchar(100),不用 varchar(1000)。

如何分析mysql的查詢語句

A、設置索引項,應該是出現在where後面的列,或者連接字句中出現的列;

B、使用唯一索引,索引的基數越大,索引查詢的效果越好,舉例:查詢條件中含有索引欄位和非索引欄位的時候,會優先走索引篩選出數據,然後在數據中回表過濾沒有走索引的欄位,但是Mysql任務,如果索引篩選出的數據量大於20%,會認為此時走索引效果不如全表掃描,繼而放棄索引,走全表掃描來查詢;

C、使用短索引,例如一個屬性200多位,其實索引只要創建前幾位效果會好;

D、最左原則,組合索引中,靈活運用最左前綴;

E、不要過度使用索引,索引會佔用空間,影響寫入的速度;

sql語言的分類有

SQL語句分類

如大家所知 sql語句被分為四大類:

數據定義語言DDL

數據查詢語言DQL

數據操縱語言DML

數據控制功能DCL

相信大多數人都對SQL有一定的了解 我這裡就不細講具體內容 簡單介紹一下具體內容 方便理解

數據定義語言DDL(Data Definition Language)

CREATE,DROP,ALTER

主要為以上操作 即對邏輯結構等有操作的,其中包括表結構,視圖和索引。

數據查詢語言DQL(Data Query Language)

SELECT

這個較為好理解 即查詢操作,以select關鍵字。各種簡單查詢,連接查詢等 都屬於DQL。

數據操縱語言DML(Data Manipulation Language)

INSERT,UPDATE,DELETE

主要為以上操作 即對數據進行操作的,對應上面所說的查詢操作 DQL與DML共同構建了多數初級程序員常用的增刪改查操作。而查詢是較為特殊的一種 被劃分到DQL中。

數據控制功能DCL(Data Control Language)

GRANT,REVOKE,COMMIT,ROLLBACK

主要為以上操作 即對資料庫安全性完整性等有操作的,可以簡單的理解為許可權控制等。

以上即為簡單總結SQL的語句分類,希望對您有所幫助!~

更多學習視頻可以在B站搜索「前端愛好者聯盟」,或者直接點我。

原創文章,作者:SLMQ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134049.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SLMQ的頭像SLMQ
上一篇 2024-10-04 00:03
下一篇 2024-10-04 00:03

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python3支持多行語句

    Python3是一種高級編程語言,開發人員可以輕鬆地使用該語言編寫簡單到複雜的代碼。其中Python3支持多行語句,方便開發人員編寫複雜的代碼,提高代碼的可讀性和可維護性。 一、使…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python for循環語句列印九九乘法表

    本篇文章將詳細介紹如何使用Python的for循環語句列印九九乘法表。列印九九乘法表是我們初學Python時經常練習的一項基礎操作,也是編寫Python程序的基本能力之一。 1、基…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • Python中自定義函數必須有return語句

    自定義函數是Python中最常見、最基本也是最重要的語句之一。在Python中,自定義函數必須有明確的返回值,即必須要有return語句。本篇文章將從以下幾個方面對此進行詳細闡述。…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29

發表回復

登錄後才能評論