年末整理十三

########################################################################
讀寫分離策略:
master/slave
master 負責事務性查詢
slave  負責select查詢
數據庫複製用來把事務性查詢導致的變更同步到集羣中的從數據庫
MySQL Replication 可以將master的數據複製分佈到多個slave上,
然後可與利用slave來分擔master的讀壓力。

MySQL Proxy:
那麼對於前臺應用來說,就要考慮如何將讀的壓力分佈到多個slave上。
如果每個應用都需要來實現讀寫分離的算法,
一則成本太高,
二來如果slave增加更多的機器,應用就要隨之修改。
明顯的,如果在應用和數據庫間加一個專門用於實現讀寫分離的中間層,則整個系統的架構擁有更好的擴展性。
MySQL Proxy就是這麼一箇中間層代理,
簡單的說,MySQL Proxy就是一個連接池,負責將前臺應用的連接請求轉發給後臺的數據庫,
並且通過使用lua腳本,可以實現複雜的連接控制和過濾,從而實現讀寫分離和負載平衡。
對於應用來說,MySQL Proxy是完全透明的,應用則只需要連接到MySQL Proxy的監聽端口即可。
當然,這樣proxy機器可能成爲單點失效,
但完全可以使用多個proxy機器做爲冗餘,在應用服務器的連接池配置中配置到多個proxy的連接參數即可。

Jan Kneschke在《MySQL Proxy learns R/W Splitting》中詳細的介紹了這種技巧以及連接池問題
爲了實現讀寫分離我們需要連接池。
我們僅在已打開了到一個後端的一條經過認證的連接的情況下,才切換到該後端。
MySQL協議首先進行握手。
當進入到查詢/返回結果的階段再認證新連接就太晚了。
我們必須保證擁有足夠的打開的連接才能保持運作正常。
實現讀寫分離的LUA腳本:
  -- 讀寫分離
  --
  -- 發送所有的非事務性Select到一個從數據庫

if is_in_transaction == 0 and
  packet:byte() == proxy.COM_QUERY and
  packet:sub(2, 7) == "SELECT" then
  local max_conns = -1
  local max_conns_ndx = 0
  for i = 1, #proxy.servers do
  local s = proxy.servers[i]
  -- 需要選擇一個擁有空閒連接的從數據庫
  if s.type == proxy.BACKEND_TYPE_RO and
  s.idling_connections > 0 then
  if max_conns == -1 or
  s.connected_clients < max_conns then
  max_conns = s.connected_clients
  max_conns_ndx = i
  end
  end
  end
  -- 至此,我們找到了一個擁有空閒連接的從數據庫
  if max_conns_ndx > 0 then
  proxy.connection.backend_ndx = max_conns_ndx
  end
  else
  -- 發送到主數據庫
  end
  return proxy.PROXY_SEND_QUERY

 

#####################################################################################
mysql命令
show databases; 顯示當前存在所有數據庫列表
use databaseName 使用databaseName的數據庫
注意,USE,類似QUIT,不需要一個分號。(如果你喜歡,你可以用一個分號終止這樣的語句;這無礙
在Unix下,數據庫名稱是區分大小寫的    在Windows下,該限制不適用

CREATE DATABASE menagerie; 創建數據庫
SHOW TABLES;
create table tablename(id int , name varchar(20) , birth date ) ;
DESCRIBE tablename;
quit  退出

##########命令大全###########
備註: 多行命令輸入:注意不能將單詞斷開;當插入或更改數據時,
   不能將字段的字符串展開到多行裏,否則硬回車將被儲存到數據中;
   每條語句輸入完畢後要在末尾填加分號';',或者填加'\g'也可以;

1. 啓動服務: net start mySql
2. 進入: mysql -hlocalhost -uroot -proot databasename;
3. 列出表: show tables;
4. 顯示錶格列的屬性: show columns from tablename;
5. 建立數據庫: source db.sql;
6. 匹配字符:  _ 代表任何一個字符 , % 代表任何字符串;
7. 增加一個字段: alter table tablename add column fieldname datatype ;
8. 增加多個字段: alter table tname add column fieldname datatype , add column fname datatype ;
9. 增加一個管理員帳戶:grant all on *.* to user@localhost identified by "password";
10. 查詢時間:select now();
11. 查詢當前用戶:select user();
12. 查詢數據庫版本:select version();
13. 查詢當前使用的數據庫:select database();
14. 刪除student_course數據庫中的students數據表:
  rm -f student_course/students.*
15. 備份數據庫:(將數據庫test備份)
  mysqldump -u root -p test>c:\test.txt
  備份表格:(備份test數據庫下的mytable表格)
  mysqldump -u root -p test mytable>c:\test.txt
  將備份數據導入到數據庫:(導回test數據庫)
  mysql -u root -p test
16. 創建臨時表:(建立臨時表zengchao)
  create temporary table zengchao(name varchar(10)) ;
17. 創建表時先判斷表是否存在
  create table if not exists students () ;
18. 從已經有的表中複製表的結構:
  create table tablename select * from table2 where 1<> 1
19. 複製表: create table tablename select * from table2
20. 對錶重新命名:alert table table1 rename as table2
21. 修改列的類型:
  alter table table1 modify id int unsigned;//修改列id的類型爲int unsigned
  alter table table1 change id sid int unsigned;//修改列id的名字爲sid,而且把屬性修改爲int unsigned
22. 創建索引:
  alter table table1 add index ind_id (id);
  create index ind_id on table1 (id);
  create unique index ind_id on table1 (id);//建立唯一性索引
23. 刪除索引:
  drop index idx_id on table1;
  alter table table1 drop index ind_id;
24. 聯合字符或者多個列:(將列id與“.”和列name和=鏈接)
  select concat (id,'.',name,'=') form students ;
25. limit(選出10到20條)<第一個記錄集的編號是0>
  select * from students order by id limit 9,10 ;
26. MySQL不支持的功能:
  事務 視圖  外鍵 引用完整性 存儲過程 和 觸發器
27. MySQL會使用索引的操作符號:
  < <= >= >  =  between  in 不帶%或者_開頭的like
28. 使用索引的缺點:
  1) 減慢增刪改數據的速度
  2) 佔用磁盤空間 ;
  3) 增加查詢優化器的負擔
  當查詢優化器生成執行計劃時,會考慮索引,太多的索引會給
  查詢優化器增加工作量,導致無法選擇最優的查詢方案;
  #####################
16、分析索引效率
  方法:在一般的SQL語句前加上explain;
  分析結果的含義:
  1)table:表名;
  2)type:連接的類型,(ALL/Range/Ref)。其中ref是最理想的;
  3)possible_keys:查詢可以利用的索引名;
  4)key:實際使用的索引;
  5)key_len:索引中被使用部分的長度(字節);
  6)ref:顯示列名字或者"const"(不明白什麼意思);
  7)rows:顯示MySQL認爲在找到正確結果之前必須掃描的行數;
  8)extra:MySQL的建議;
  
  17、使用較短的定長列
  1)儘可能使用較短的數據類型;
  2)儘可能使用定長數據類型;
  a)用char代替varchar,固定長度的數據處理比變長的快些;
  b)對於頻繁修改的表,磁盤容易形成碎片,從而影響數據庫的整體性能;
  c)萬一出現數據表崩潰,使用固定長度數據行的表更容易重新構造。使用固定長度的數據行,每個記錄的開始位置都是固定記錄長度的倍數,可以很容易被檢測到,但是使用可變長度的數據行就不一定了;
  d)對於MyISAM類型的數據表,雖然轉換成固定長度的數據列可以提高性能,但是佔據的空間也大;
  
  18、使用not null和enum
  儘量將列定義爲not null,這樣可使數據的出來更快,所需的空間更少,而且在查詢時,MySQL不需要檢查是否存在特例,即null值,從而優化查詢;
  如果一列只含有有限數目的特定值,如性別,是否有效或者入學年份等,在這種情況下應該考慮將其轉換爲enum列的值,MySQL處理的更快,因爲所有的enum值在系統內都是以標識數值來表示的;
  
  19、使用optimize table
  對於經常修改的表,容易產生碎片,使在查詢數據庫時必須讀取更多的磁盤塊,降低查詢性能。具有可變長的表都存在磁盤碎片問題,這個問題對blob數據類型更爲突出,因爲其尺寸變化非常大。可以通過使用optimize table來整理碎片,保證數據庫性能不下降,優化那些受碎片影響的數據表。 optimize table可以用於MyISAM和BDB類型的數據表。實際上任何碎片整理方法都是用mysqldump來轉存數據表,然後使用轉存後的文件並重新建數據表;
  
  20、使用procedure analyse()
  可以使用procedure analyse()顯示最佳類型的建議,使用很簡單,在select語句後面加上procedure analyse()就可以了;例如:
  select * from students procedure analyse();
  select * from students procedure analyse(16,256);
  第二條語句要求procedure analyse()不要建議含有多於16個值,或者含有多於256字節的enum類型,如果沒有限制,輸出可能會很長;
  
  21、使用查詢緩存
  1)查詢緩存的工作方式:
  第一次執行某條select語句時,服務器記住該查詢的文本內容和查詢結果,存儲在緩存中,下次碰到這個語句時,直接從緩存中返回結果;當更新數據表後,該數據表的任何緩存查詢都變成無效的,並且會被丟棄。
  2)配置緩存參數:
  變量:query_cache _type,查詢緩存的操作模式。有3中模式,0:不緩存;1:緩存查詢,除非與 select sql_no_cache開頭;2:根據需要只緩存那些以select sql_cache開頭的查詢; query_cache_size:設置查詢緩存的最大結果集的大小,比這個值大的不會被緩存。
  
  22、調整硬件
  1)在機器上裝更多的內存;
  2)增加更快的硬盤以減少I/O等待時間;
  尋道時間是決定性能的主要因素,逐字地移動磁頭是最慢的,一旦磁頭定位,從磁道讀則很快;
  3)在不同的物理硬盤設備上重新分配磁盤活動;
  如果可能,應將最繁忙的數據庫存放在不同的物理設備上,這跟使用同一物理設備的不同分區是不同的,因爲它們將爭用相同的物理資源(磁頭)。

 


################################################################
mysql 優秀網址:
http://www.mysqlperformanceblog.com/
http://forge.mysql.com
###################################################################
此前有款網絡遊戲的數據庫是採用MySQL。操作系統是CentOS。部分服務器的操作系統又是Windows。
出現了一個小毛病。那就是MySQL大小寫的問題。

在CentOS安裝的MySQL的配置文件中(/etc/my.cnf),是沒有lower_case_table_names=1這行的。
在Windows安裝的MySQL的配置文件中(my.ini),是有lower_case_table_names=1這行的。

lower_case_table_names=1的用途是讓MySQL實現不區分大小寫。

所以當時出了些毛病,後來才發現是這個的問題。連忙在CentOS中的my.cnf(/etc/my.cnf)的[mysqld]區段下增加:

################################################
備份:
在mysql的bin目錄下運行:
備份單一表: mysqldump -hlocalhost -uroot -proot uchome uchome_album > album.sql
備份數據庫: mysqldump -hlocalhost -uroot -proot uchome  > db.sql
備份數據庫結構: mysqldump -hlocalhost -uroot -proot -d -- add-drop-table uchome  > nodatadb.sql
-d 沒有數據 --add-drop-table 在每個create語句之前增加一個drop table
備忘: mysqldump在linux下可直接使用 在windows下有時需要進入mysql/bin中使用;
而且用mysqldump導出的備份 必須先建立數據庫才能導入

4.導入數據庫
  常用source 命令
  進入mysql數據庫控制檯,
  如mysql -u root -p
  mysql>use 數據庫
  然後使用source命令,後面參數爲腳本文件(如這裏用到的.sql)
  mysql>source e:\temp\nodatadb.sql

ERROR 1130:####################################################
在使用MySQL-Front連接mysql的時候發生的這個錯誤

ERROR 1130: Host 192.168.88.160 is not allowed to connect to this MySQL server

1.該表法:
更改 mysql 數據庫裏的 user表裏的 host項
localhost改稱%

mysql -u root -p

mysql>use mysql;

mysql>update user set host = '%'  where user ='root';

mysql>flush privileges;

mysql>select 'host','user' from user where user='root';

2. 授權法

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' with grant option;
如果你想允許用戶myuser從ip爲192.168.1.3的主機連接到mysql服務器,並使用mypassword作爲密碼
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
 
 操作完畢後,記得重新啓動mysql命令生效。
Windows下:net stop mysql / net start mysql
Linux下:service mysql restart 或 /etc/init.d/mysql restart

mysql limit的用法####################################################
mysql的limit用法
1.select * from tablename <條件語句> limit 100,15
從100條記錄後開始取15條 (實際取取的是第101-115條數據)
2.select * from tablename <條件語句> limit 100,-1
從第100條後開始-最後一條的記錄
3.select * from tablename <條件語句> limit 15
相當於limit 0,15   .查詢結果取前15條數據

啓動和關閉mysql服務:#######################################################
Q:如何啓動和關閉Mysql?
A:linux下:比如我的mysql是用源碼方式安裝在/usr/local/mysql
自動:將/usr/local/mysql/share/mysql/mysql.server拷貝到/etc/rc.d/init.d/下,然後
chkconfig --add mysql.server 就可以開機就自動啓動mysql服務了
手動:以root身份執行/usr/local/mysql/bin/mysqld_safe --user=mysql
windwos下:
自動:
用cmd方式,到mysql安裝路徑下的bin文件夾下,執行:mysqld-nt --install
手動:直接到mysql安裝的bin文件件下執行 net start mysql 即可 。
如果不想讓mysql在計算機啓動時候就啓動服務,執行:mysql-nt --remove
也可以在HKEY_LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/SERVICES中刪除對應服務並重啓。
關閉mysql:mysqldamin -uroot -p shutdown
啓動mysql:mysqld-nt --install
      net start mysql
      

mysql不能輸入漢字####################################################################
mysql問題 Incorrect string value:"\ \ \ \ \"for column'trurname' at row 1
mysql 在填寫表的時候不能輸入漢字!!!怎麼解決呀!
原因:估計安裝mysql的時候設置的 編碼不正確 設置成utf8 或者gbk 默認是lant
方法:先確保改過來之後重啓了服務,然後就在建成的表中用show create table tabblename;
查詢一下建表用的字符集是什麼形式,就發現了是用的latin1,想想當時是用latin1字符建成的表,
就是現在改了字符集也只對以後的建表有作用,以前建好的表就無能爲力了,所以我刪除表後重建就好了,
查詢一下字符集,果然改回來了。

命令: show create table tabblename; 顯示建表時的詳細信息。

###########################################################################
select version(); 顯示mysql版本
mysql 數據庫分區:#####################################################
什麼是數據庫分區?
    數據庫分區是一種物理數據庫設計技術,DBA和數據庫建模人員對其相當熟悉。
    雖然分區技術可以實現很多效果,但其主要目的是爲了在特定的SQL操作中減少數據讀寫的總量以縮減響應時間。
    分區主要有兩種形式://這裏一定要注意行和列的概念(row是行,column是列)
水平分區(Horizontal Partitioning)
     這種形式分區是對錶的行進行分區,
    通過這樣的方式不同分組裏面的物理列分割的數據集得以組合,從而進行個體分割(單分區)或集體分割(1個或多個分區)。
    所有在表中定義的列在每個數據集中都能找到,所以表的特性依然得以保持。
    舉個簡單例子:一個包含十年發票記錄的表可以被分區爲十個不同的分區,每個分區包含的是其中一年的記錄。
   (朋奕注:這裏具體使用的分區方式我們後面再說,可以先說一點,一定要通過某個屬性列來分割,譬如這裏使用的列就是年份)
垂直分區(Vertical Partitioning)
    這種分區方式一般來說是通過對錶的垂直劃分來減少目標表的寬度,使某些特定的列被劃分到特定的分區,
    每個分區都包含了其中的列所對應的行。
    舉個簡單例子:一個包含了大text和BLOB列的表,這些text和BLOB列又不經常被訪問,
    這時候就要把這些不經常使用的text和BLOB了劃分到另一個分區,在保證它們數據相關性的同時還能提高訪問速度。

MySQL5.1對水平分區的支持。而且已經支持分區大部分模式:

雖然MySQL 5.1自動實現了水平分區,但在設計數據庫的時候不要輕視垂直分區。
雖然要手工去實現垂直分區,但在特定場合下你會收益不少的。

###########################################################
如何進行實際分區
看看分區的實際效果吧。我們建立幾個同樣的MyISAM引擎的表,包含日期敏感的數據,但只對其中一個分區。
分區的表(表名爲part_tab)我們採用Range範圍分區模式,通過年份進行分區:
mysql> CREATE TABLE part_tab
    ->      ( c1 int default NULL,
    -> c2 varchar(30) default NULL,
    -> c3 date default NULL
    ->
    ->      ) engine=myisam
    ->      PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995),
    ->      PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,
    ->      PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) ,
    ->      PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,
    ->      PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,
    ->      PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),
    ->      PARTITION p11 VALUES LESS THAN MAXVALUE );
Query OK, 0 rows affected (0.00 sec)
注意到了這裏的最後一行嗎?這裏把不屬於前面年度劃分的年份範圍都包含了,這樣才能保證數據不會出錯,
大家以後要記住啊,不然數據庫無緣無故出錯你就爽了。那下面我們建立沒有分區的表(表名爲no_part_tab):

mysql> select count(*) from part_tab where
    -> c3 > date '1995-01-01' and c3 < date '1995-12-31';

######################################################2009/12-17 mysql 字符character的設置#########
MySql中涉及的幾個字符

character-set-server/default-character-set:服務器字符集,默認情況下所採用的。
character-set-database:數據庫字符集。
character-set-table:數據庫表字符集。
優先級依次增加。所以一般情況下只需要設置character-set-server,
而在創建數據庫和表時不特別指定字符集,這樣統一採用character-set-server字符集。

character-set-client:客戶端的字符集。客戶端默認字符集。當客戶端向服務器發送請求時,請求以該字符集進行編碼。
character-set-results:結果字符集。服務器向客戶端返回結果或者信息時,結果以該字符集進行編碼。
在客戶端,如果沒有定義character-set-results,則採用character-set-client字符集作爲默認的字符集。
所以只需要設置character-set-client字符集。

要處理中文,則可以將character-set-server和character-set-client均設置爲GB2312,
如果要同時處理多國語言,則設置爲UTF8。

關於UTF-8 GBK GB2312:
UTF-8:Unicode Transformation Format-8bit,允許含BOM,但通常不含BOM。
是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24爲(三個字節)來編碼。
UTF-8包含全世界所有國家需要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。

GBK是國家標準GB2312基礎上擴容後兼容GB2312的標準。GBK的文字編碼是用雙字節來表示的,
即不論中、英文字符均使用雙字節來表示,爲了區分中文,將其最高位都設定成1。GBK包含全部中文字符,是國家編碼,
通用性比UTF8差,不過UTF8佔用的數據庫比GBD大。

GBK、GB2312等與UTF8之間都必須通過Unicode編碼才能相互轉換:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312

GB2312是GBK的子集,GBK是GB18030的子集
GBK是包括中日韓字符的大字符集合
如果是中文的網站 推薦GB2312 GBK有時還是有點問題
gb2312是簡體中文的碼
gbk支持簡體中文及繁體中文
big5支持繁體中文
utf-8支持幾乎所有字符

######################查看mysql的字符情況###########
我們先在mysql 命令行下輸入
show variables like '%char%';
查看mysql 字符集設置情況:

在登錄數據庫時,我們用:
mysql --default-character-set=字符集-u root -p 進行連接,這時我們
再用show variables like '%char%';命令查看字符集設置情況,可以發現客戶端、數據庫連接、
查詢結果的字符集已經設置成登錄時選擇的字符集了

如果是已經登錄了,可以使用set names 字符集;命令來實現上述效果,等同於下面的命令:
set character_set_client = 字符集
set character_set_connection = 字符集
set character_set_results = 字符集
如果是通過JDBC 連接數據庫,可以這樣寫URL:
URL=jdbc:mysql://localhost:3306/abs?useUnicode=true&characterEncoding=字符集

JSP 頁面等終端也要設置相應的字符集
數據庫的字符集可以修改mysql 的啓動配置來指定字符集,也可以在create database 時加上
default character set 字符集來強制設置database 的字符集
通過這樣的設置,整個數據寫入讀出流程中都統一了字符集,就不會出現亂碼了

#######################################################################
怎麼測試你用的服務器支不支持分區呢?在 MySQL console 裏輸入:
     SHOW VARIABLES LIKE '%partition%';
如果返回 have_partition_engine YES 就表示支持
 如果返回 Empty set 說明你要升級
 ####################################
不使用分區的時候,我們建立一張表,可以不顯式的聲明使用哪種引擎,
這時如果你設置了服務器爲 MyISAM only,則默認使用 MyISAM 引擎(廢話),
     如果服務器被設置爲支持事務,則默認使用 InnoDB。

分區的類型
常用的分區類型包括: RANGE、 LIST、 HASH、 KEY四種,下面對這四種分區做一些介紹。

RANGE 分區
RANGE 顧名思義就是使用範圍分區,就是給數據庫劃定一個範圍,滿足範圍條件的數據分配到對應的分區。
還是拿剛纔的 ws 表來做例子:
CREATE TABLE ws
(
     id INT(11),
     name varchar(8)
)
PARTITION BY RANGE (id)
(
     PARTITION par0 VALUES LESS THAN (1000),
     PARTITION par1 VALUES LESS THAN (2000),
     PARTITION par2 VALUES LESS THAN (3000),
     PARTITION par3 VALUES LESS THAN (4000),
     PARTITION par4 VALUES LESS THAN MAXVALUE
);

LIST 分區
LIST類型個人感覺在日常應用中很少能不被用到,因爲丫實在是麻煩。
那位看官說了,怎麼個麻煩法啊?您彆着急,看看例子就知道了:
CREATE TABLE ws
(
     id INT(11),
     name varchar(8)
)
PARTITION BY LIST(id)
(
     PARTITION par0 VALUES IN (1,2,3,4,5),
     PARTITION par1 VALUES IN (6,7,8,9,10),
     PARTITION par2 VALUES LESS THAN MAXVALUE
);
列位看官明白了吧,這個LIST就是把分區依據給丫一個一個列出來,只要是括號裏的數,就分到對應的區……
當然,我這例子舉得不大好,這種方法是不適合以主鍵爲參考列來分的。
但是這種分區很適合給數據分類,比如我很容易把標識爲1、3、5的國內客戶方par0,2、4、6的海外客戶放par1
哪天我不做國內客戶了,直接:
ALTER TABLE ws DROP PARTITION par0;
這個世界清靜了(數據量龐大時,刪除一個分區,比按一定條件刪除記錄要快N倍)

     RANGE 分區:通過定義某些列的值域來分區

    LIST 分區:與RANGE類似,不過不是值域,而是一些離散值的集合。

    HASH 分區:通過用戶對將要插入的行裏的字段進行計算後的函數返回值來確定分區。無論函數是怎麼樣的,返回值不能使負數。

    KEY 分區:類似於hash分區,但是不用函數,而是用多個列來區分,MySQL服務器會用自身的hash函數來處理。但是這些列必須只有整數。

##################################12-22-2009#####################
windows dos窗口下的mysql不是內部或外部命令 
此時需要把mysql的bin目錄設置成path(環境變量)
###########################################################
VARCHAR是可變字符數據類型,聲明時必須指定它的長度,例如`IP` VARCHAR(10) NOT NULL。

id      INTEGER UNSIGNED NOT NULL AUTO_INCREMENT :
字面上的意思就是“無符號整數”,就是說該字段的數值都是非負的,這樣可以擴大正數的範圍,如有符號的TINYINT類型能表示-128至128,而無符號(unsigned)的TINYINT類型就可以表示0至256了。
一個正常大小整數。有符號的範圍是-2147483648到2147483647,無符號的範圍是0到4294967295。
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
這是INT的一個同義詞。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章