mysql數據庫下標從幾開始(數據的初始下標從幾開始)

本文目錄一覽:

如何使一個數據庫查詢結果的數組下標從1開始

創建下限非0的數組

使用Array.CreateInstance()方法:

public static Array CreateInstance(Type elementType, int[] lengths, int[] lowerBounds);

elementType : 要創建的 Array 的 Type。

lengths : 一維數組,它包含要創建的 Array 的每個維度的大小

lowerBounds : 一維數組,它包含要創建的 Array 的每個維度的下限(起始索引)。

再運行下下面的代碼理解理解

int[] myArrLen = { 4 };

int[] myArrLow = { 2 };

Array myArrayTwo=Array.CreateInstance( typeof(String), myArrLen, myArrLow );

myArrayTwo.SetValue( “two”, 2 );

myArrayTwo.SetValue( “three”, 3 );

myArrayTwo.SetValue( “four”, 4 );

PrintIndexAndValues( myArrayTwo );

以上內容從網上搜集而來,我覺得挺好懂的了,記得運行下

myArrayTwo.SetValue( “five”, 5 );

mysql查詢

MYSQL更加方便:

SELECT …… LIMIT N,M

N表示從第N條開始返回數據(第一條編號為0),M表示返回M條數據,例如每頁20條,那麼:

第一頁 LIMIT 0,20

第二頁 LIMIT 20,20

第三頁 LIMIT 40,20

mysql 如何獲取數據的下標

mysql是沒有下標這個概念(至少目前接觸到的,沒有看到),有截取字符串內置函數

Oracle倒是有下標概念:table變量(下標):=值;

begin

var_nums(0):=2000;

var_nums(1):=2002;

end

關於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)。

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/129472.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:26
下一篇 2024-10-03 23:26

相關推薦

  • 如何修改mysql的端口號

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

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

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

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • openeuler安裝數據庫方案

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

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29

發表回復

登錄後才能評論