重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
MySQL基礎數據類型
創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站設計、成都網站制作、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的江孜網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
mysql常用數據類型概覽
1. 數字: 整型:tinyinit int bigint 小數: float :在位數比較短的情況下不精準 double :在位數比較長的情況下不精準 0.000001230123123123 存成:0.000001230000 decimal:(如果用小數,則用推薦使用decimal) 精準 內部原理是以字符串形式去存 2. 字符串: char(10):簡單粗暴,浪費空間,存取速度快 root存成root000000 varchar:精準,節省空間,存取速度慢 sql優化:創建表時,定長的類型往前放,變長的往后放 比如性別 比如地址或描述信息 >255個字符,超了就把文件路徑存放到數據庫中。 比如圖片,視頻等找一個文件服務器,數據庫中只存路徑或url。 3. 時間類型: 最常用:datetime 4. 枚舉類型與集合類型
數值類型
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HAIxWM9Z-1585063057990)(D:\筆記\mysql\復習\1036857-20170801181433755-146301178.png)]
1、整數類型
整型類型測試 默認是有符號的 mysql> create table t1(money tinyint); #注意,創建表時最后一個字段后面不能有逗號,錯誤寫法mysql> create table t1(money tinyint,); mysql> insert into t1 values(11); Query OK, 1 row affected (0.28 sec) mysql> select * from t1; mysql> insert into t1 values(-10); Query OK, 1 row affected (0.11 sec) mysql> select * from t1; mysql> insert into t1 values(-200); Query OK, 1 row affected, 1 warning (0.10 sec) mysql> select * from t1; 設置了數據類型,會有一個約束效果,只能表示自己范圍內的數 創建 無符號數值類型 的寫法: mysql> create table t2(id tinyint unsigned);
2、浮點型
測試 mysql> create table t3(id float(60,30)); # 60代表小數位+整數位總數 Query OK, 0 rows affected (1.70 sec) # 30表示小數位最高30位 mysql> create table t4(id double(60,30)); Query OK, 0 rows affected (0.88 sec) mysql> create table t5(id decimal(60,30)); # decimal能夠存儲精確值的原因在于其內部按照字符串存儲。 Query OK, 0 rows affected (0.96 sec) mysql> insert into t3 values(1.1111111111111111111111); Query OK, 1 row affected (0.13 sec) mysql> insert into t4 values(1.1111111111111111111111); Query OK, 1 row affected (0.22 sec) mysql> insert into t5 values(1.1111111111111111111111); Query OK, 1 row affected (0.09 sec) mysql> select * from t3; mysql> select * from t4; mysql> select * from t5;
1.創建表 create table t2(f1 float(5,2),f2 float,f3 double(5,2),f4 double); float(5,2) 保留兩位小數 并且四舍五入 double(5,2) 2.寫入數據 insert into t2 values(5.2336,5.2336,5.336,5.2336); 3.查看表中數據 select * from t2; 4.指定寫入數據 insert into t2(f2,f4) values(5.1783682169875975,5.1783682169875975); insert into 表名(字段1,字段3) values (值1,值3); 1.創建t3表 create table t3(f1 float,d1 double,d2 decimal(30,20),d3 decimal); 2.查看表結構 desc t3; 3.寫入數據 insert into t3 values(5.1783682169875975179,5.1783682169875975179,5.1783682169875975179,5.1783682169875975179); int--------不約束長度,最多表示10位數 float(m,n) m-----一共多少位 n-----小數部分多少位
日期類型
mysql> create table t6(d1 year ,d2 date,d3 datetime); Query OK, 0 rows affected (1.75 sec) mysql> insert into t6 values(now(),now(),now()); Query OK, 1 row affected, 1 warning (0.12 sec) mysql> select * from t6;
字符串類型
char和varchar性能對比: 以char(5)和varchar(5)來比較,加入我要存三個人名:sb,ssb1,ssbb2 char: 優點:簡單粗暴,不管你是多長的數據,我就按照規定的長度來存,5個5個的存,三個人名就會類似這種存儲:sb ssb1 ssbb2,中間是空格補全,取數據的時候5個5個的取,簡單粗暴速度快 缺點:貌似浪費空間,并且我們將來存儲的數據的長度可能會參差不齊 varchar: varchar類型不定長存儲數據,更為精簡和節省空間 例如存上面三個人名的時候類似于是這樣的:sbssb1ssbb2,連著的,如果這樣存,請問這三個人名你還怎么取出來,你知道取多長能取出第一個嗎? varchar在存數據的時候,會在每個數據前面加上一個頭,這個頭是1-2個bytes的數據,這個數據指的是后面跟著的這個數據的長度,1bytes能表示2**8=256,兩個bytes表示2**16=65536,能表示0-65535的數字,所以varchar在存儲的時候是這樣的:1bytes+sb+1bytes+ssb1+1bytes+ssbb2,所以存的時候會比較麻煩,導致效率比char慢,取的時候也慢,先拿長度,再取數據。 優點:節省了一些硬盤空間,一個acsii碼的字符用一個bytes長度就能表示,但是也并不一定比char省,看一下官網給出的一個表格對比數據,當你存的數據正好是你規定的字段長度的時候,varchar反而占用的空間比char要多。 Value CHAR(4) Storage Required VARCHAR(4) Storage Required '' ' ' 4 bytes '' 1 byte 'ab' 'ab ' 4 bytes 'ab' 3 bytes 'abcd' 'abcd' 4 bytes 'abcd' 5 bytes 'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes 缺點:存取速度都慢 對于InnoDB數據表,內部的行存儲格式沒有區分固定長度和可變長度列(所有數據行都使用指向數據列值的頭指針),因此在本質上,使用固定長度的CHAR列不一定比使用可變長度VARCHAR列性能要好。因而,主要的性能因素是數據行使用的存儲總量。由于CHAR平均占用的空間多于VARCHAR,因此使用VARCHAR來最小化需要處理的數據行的存儲總量和磁盤I/O是比較好的。
適合使用char: 身份證號、手機號碼、QQ號、username、password、銀行卡號 適合使用varchar: 評論、朋友圈、微博 1.創建表 create table t6(c1 char(1),v1 varchar(1),c2 char(8),v2 varchar(8)); 2.寫入數據 insert into t6 values('alexq','alexq','alexq','alexq'); 3.查詢表中數據 select * from t6;
枚舉和集合類型
enum: 單選行為------枚舉類型 只允許從值集合中選取單個值,而不能一次取多個值 1.創建表 create table t8(id int, name char(18),gender enum('male','female')); 2.寫入數據 insert into t8 values(1,'alex','不詳'); ---------不詳無法寫入 3.查詢表中數據 select * from t8; 4.寫入數據 insert into t8 values(1,'alex','male');-------------male可以寫入 5.查詢表中數據 select * from t8; 2.寫入數據 insert into t8 values(1,'alex','female');------------female可以寫入 3.查詢表中數據 select * from t8;
set: 多選行為 可以**允許值集合中任意選擇1或多個元素進行組合**。對超出范圍的內容將不允許注入,而對重復的值將進行自動去重。 1.創建表 create table t9(id int,name char(18),hobby set('抽煙','喝酒','洗腳','按摩','燙頭')); 2.寫入數據 insert into t9 values(1,'太白','燙頭,抽煙,喝酒,按摩‘); 3.查詢表中數據 select * from t8; 4.寫入數據 insert into t9 values(1,'大壯','洗腳,洗腳,洗腳,按摩,按摩,打游戲‘); 5.查詢表中數據 select * from t8;
總結
到此這篇關于mysql8.0.19-基礎數據類型的文章就介紹到這了,更多相關mysql8.0.19-基礎數據類型內容請搜索創新互聯以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持創新互聯!