當前位置:首頁 » 編程軟體 » mysql編譯參數詳解

mysql編譯參數詳解

發布時間: 2022-07-29 03:48:13

A. mysql limit 函數後的參數是什麼意思

意思為:mySql limit函數的語法為SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset。LIMIT接受一個或兩個數字參數,該參數必須是整數常量。

LIMIT子句可用於強制SELECT語句返回指定數量的記錄。

接受一個或兩個數字參數,該參數必須是整數常量。 如果提供了兩個參數,則第一個參數指定返回的第一條記錄行的偏移量,第二個參數指定返回的最大記錄行數。

(1)mysql編譯參數詳解擴展閱讀:

初始記錄行的偏移量為0(而不是1):為了與PostgreSQL兼容,MySQL還支持以下語法:LIMIT#OFFSET#。

mysql> SELECT * FROM table LIMIT 5,10; //檢索記錄行6-15。

為了檢索從某個偏移量到記錄集末尾的所有記錄行,可以將第二個參數指定為-1:

mysql> SELECT * FROM table LIMIT 95,-1; //檢索記錄行96-last。 //經過廣泛的用戶驗證後,limit參數不能有負數,甚至不能為-1。

B. mysql 數據類型的詳解

MySQL資料庫的表是一個二維表,由一個或多個數據列構成。
每個數據列都有它的特定類型,該類型決定了MySQL如何看待該列數據,我們可以把整型數值存放到字元類型的列中,MySQL則會把它看成字元串來處理。
MySQL中的列類型有三種:數值類、字元串類和日期/時間類。
從大類來看列類型和數值類型一樣,都是只有三種。但每種列類型都還可細分。
下面對各種列類型進行詳細介紹。

數值類的數據列類型
數值型的列類型包括整型和浮點型兩大類。

TINYINT:1位元組 非常小的正整數,帶符號:-128~127,不帶符號:0~255
SMALLINT:2位元組 小整數,帶符號:-32768~32767,不帶符號:0~65535
MEDIUMINT:3位元組 中等大小的整數,帶符號:-8388608~8388607,不帶符號:0~16777215
INT:4位元組 標准整數,帶符號:-2147483648~2147483647,不帶符號:0~4294967295
BIGINT:8位元組 大整數,帶符號:-9223372036854775808~9233372036854775807,不帶符號:0~18446744073709551615
FLOAT:4位元組 單精度浮點數,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38
DOUBLE:8位元組 雙精度浮點數,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308
DECIMAL:M+2位元組 以字元串形式表示的浮點數,它的取值范圍可變,由M和D的值決定。

MYSQL支持大量的列類型,它們可以被分為 3 類:數字類型、日期和時間類型以及字元串(字元)類型。這個章節首先給出可用類型的概述,並且總結各類型所需的存儲需求,然後提供各類型中的類型範疇更詳細的描述。概述有意地簡化了。更詳細的說明應該參考特寫列類型的附加信息,例如你能為其指定值的允許格式。

MySQL 支持的列類型在下面列出。下列代碼字母用於描述中:

M指出最大的顯示尺寸。最大的顯示尺寸長度為 255。D適用於浮點類型。指出跟隨在十進制小數點後的數字數量。最大可能值為 30,但不應大於M-2。
方括弧 (「[」and「]」) 指定可選的類型修飾部份。

注意,如果為一個列指定了ZEROFILL,MySQL 將自動為這個列添加UNSIGNED屬性。

警告:你應該知道當在兩個整數類型值中使用減法時,如有一個為UNSIGNED類型,那麼結果也是無符號的。查看章節6.3.5 Cast 函數。

TINYINT[(M)] [UNSIGNED] [ZEROFILL]-128到127。無符號的范圍是0到255。
BITBOOL它們是TINYINT(1)的同義詞。
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]一個小整數。有符號的范圍是-32768到32767。無符號的范圍是0到65535。
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]一個中等大小的整數。有符號的范圍是-8388608到8388607。無符號的范圍是0到16777215。
INT[(M)] [UNSIGNED] [ZEROFILL]一個正常大小的整數。有符號的范圍是-2147483648到2147483647。無符號的范圍是0到4294967295。
INTEGER[(M)] [UNSIGNED] [ZEROFILL]INT的同義詞。
BIGINT[(M)] [UNSIGNED] [ZEROFILL]一個大的整數。有符號的范圍是-9223372036854775808到9223372036854775807。無符號的范圍是0到18446744073709551615。
你應該知道的有關BIGINT列的一些事情:
BIGINT或DOUBLE值來完成的,因此你不應該使用大於9223372036854775807(63 bits) 的無符號大整數,除了位函數之外!如果你這樣做了,結果中的某些大數字可能會出錯,因為將BIGINT轉換成DOUBLE時產生了舍入錯誤。MySQL 4.0 在下列情況下可以處理BIGINT:
在一個BIGINT列中使用整數存儲一個大的無符號值。
在MIN(big_int_column)和MAX(big_int_column)中。
當兩個操作數都是整數時使用操作符 (+、-、*、等)。
通常你可以在一個BIGINT列中以字元串方式存儲的一個精確的整數。在這種情況下,MySQL 將執行一個字元串到數字的轉換,包括無 intermediate 的雙精度表示法。
當兩個參數均是整數值時,「-」、「+」和「*」將使用BIGINT運算!這就意味著,如果兩個大整數的乘積(或函數的結果返回整數)的結果大於9223372036854775807時,你可能會得到意想不到的結果。
FLOAT(precision) [UNSIGNED] [ZEROFILL]一個浮點型數字。
precision可以是<=24作為一個單精度的浮點數字和介於 25 和 53 之間作為一個雙精度的浮點數字。這些類型與下面描述的FLOAT和DOUBLE類型相似。FLOAT(X)有與相應的FLOAT和DOUBLE類型同樣的范圍,但是顯示尺寸和十進制小數位數是未定義的。在 MySQL 3.23 中,它是一個真實的浮點值。而在 MySQL 早期的版本中,FLOAT(precision)通常有 2 小數位。 注意,由於在 MySQL 中所有的計算都是以雙精度執行的,所以使用FLOAT可能帶來一些意想不到的問題。查看章節A.5.6 解決沒有匹配行的問題。

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]一個小的(單精度) 浮點數字。允許的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。如果UNSIGNED被指定,負值是不允許的。M是顯示寬度,D是小數位數。FLOAT沒有參數或有X<= 24 的FLOAT(X)代表一個單精度的浮點數字。

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]一個正常大小的(雙精度)浮上數字。允許的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+308。如果UNSIGNED被指定,負值是不允許的。M是顯示寬度,D是小數位數。DOUBLE沒胡參數或有 25 <=X<= 53 的FLOAT(X)代表一個雙精度的浮點數字。

DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]
REAL[(M,D)] [UNSIGNED] [ZEROFILL]它們是DOUBLE同義詞。
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]一個未壓縮(unpacked)的浮點數。運作如同一個CHAR列:「unpacked」 意味著數字是以一個字元串存儲的,值的每一位將使用一個字元。小數點並且對於負數,「-」符號不在M中計算(但是它們的空間是被保留的)。如果D是 0,值將沒有小數點或小數部份。DECIMAL值的最大范圍與DOUBLE一致,但是對於一個給定的DECIMAL列,實際的范圍可以被所選擇的M和D限制。如果UNSIGNED被指定,負值是不允許的。 如果D被忽略,預設為 0。如果M被忽略,預設為 10。 在 MySQL 3.23 以前,M參數必須包含符號與小數點所需的空間。
DEC[(M[,D])] [UNSIGNED] [ZEROFILL]
NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]DECIMAL的同義詞。

DATE一個日期。支持的范圍是'1000-01-01'到'9999-12-31'。MySQL 以'YYYY-MM-DD'格式顯示DATE值,但是允許你以字元串或數字給一個DATE列賦值。查看章節6.2.2.2DATETIME、DATE和TIMESTAMP類型。

DATETIME一個日期和時間的組合。支持的范圍是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL 以'YYYY-MM-DD HH:MM:SS'格式顯示DATETIME值,但是允許你以字元串或數字給一個DATETIME列賦值。查看章節6.2.2.2DATETIME、DATE和TIMESTAMP類型。

TIMESTAMP[(M)]一個時間戳。范圍是'1970-01-01 00:00:00'到2037年間的任意時刻。 MySQL 4.0 和更早版本中,TIMESTAMP值是以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式顯示的,它取決於M是否是14(或省略)、12、8或6,但是允許你以字元串或數字給一個TIMESTAMP列賦值。 從 MySQL 4.1 開始,TIMESTAMP以'YYYY-MM-DD HH:MM:DD'格式作為字元返回。如果你你希望以數字形式返回則必須在該時間戳欄位後加上 +0。不同的時間戳長度是不支持的。從 MySQL 4.0.12 開始,選項--new可以被用來使伺服器與 4.1 一樣運作。TIMESTAMP列有益於記錄一個INSERT或UPDATE操作的日期和時間,因為如果你自己沒有給它賦值,它將被自動地設置為最近一次操作的日期和時間。也可以通過給它賦一個NULL而使它設置為當前的日期和時間。查看章節6.2.2 Date 和 Time 類型。 參數M隻影響一個TIMESTAMP列的顯示格式;它的值總是佔用 4 個位元組存儲。 注意,當TIMESTAMP(M)列的M是 8 或 14 時,它返回的是數字而其它的TIMESTAMP(M)列返回的是字元串。這僅僅是為了可以可靠地轉儲並恢復到其它格式的表中。查看章節6.2.2.2DATETIME、DATE和TIMESTAMP類型。TIME一個時間。范圍是'-838:59:59'到'838:59:59'。MySQL 以'HH:MM:SS'格式顯示TIME值,但是允許你使用字元串或數字來給TIME列賦值。查看章節6.2.2.3TIME類型。YEAR[(2|4)]一個 2 或 4 位數字格式的年(預設為 4 位)。允許的值是1901到2155、0000(4 位年格式) 以及使用 2 位格式的 1970-2069 (70-69)。MySQL 以YYYY格式顯示YEAR值,但是允許你使用字元串或數字來給YEAR列賦值。(YEAR類型在 MySQL 3.22 之前不支持。) 查看章節6.2.2.4YEAR類型。

[NATIONAL] CHAR(M) [BINARY]一個定長的字元串,當存儲時,總是以空格填滿右邊到指定的長度。M的范圍是 0 到 255 (在 MySQL 3.23 版本之前為 1 到 255)。當該值被檢索時,尾部空格將被刪除。CHAR值根據預設的字元集進行忽略大小寫的排索與比較,除非指定了關鍵詞BINARY。NATIONAL CHAR(或短形式NCHAR) 是以 ANSI SQL 方式定義一個CHAR列,它將使用預設的字元集。這在 MySQL 中是默認的。
CHAR是CHARACTER的縮寫。 MySQL 允許以CHAR(0)類型建立一個列。一些老程序運行時必需一個列,卻又並不使用這個列的值,你就不得不為了適應它而建立該列,在這情況下,CHAR(0)將是很有益的。當需要一個列僅保存兩個值時:一個為CHAR(0)(該列沒有定義為NOT NULL),這將僅佔用一個比特位來存儲 2 個值:NULL或""。查看章節6.2.3.1CHAR和VARCHAR類型。CHAR這是CHAR(1)的同義詞。

[NATIONAL] VARCHAR(M) [BINARY]一個變長的字元串。注意:尾部的空格在存儲時將會被刪除(這與 ANSI SQL 約規不同)。M的范圍是 0 到 255 (在 MySQL 4.0.2 之前的版本中是 1 到 255)。
VARCHAR值以大小寫忽略方式進行排索與比較,除非關鍵詞BINARY被指定。查看章節6.5.3.1 隱式的列定義變化。VARCHAR是CHARACTER VARYING的縮寫。查看章節6.2.3.1CHAR和VARCHAR類型。
TINYBLOBTINYTEXT一個BLOB或TEXT列,最大長度為 255 (2^8 - 1) 個字元。查看章節6.5.3.1 隱式的列定義變化。查看章節6.2.3.2BLOB和TEXT類型。
BLOBTEXT一個BLOB或TEXT列,最大長度為 65535 (2^16 - 1) 個字元。查看章節6.5.3.1 隱式的列定義變化。查看章節6.2.3.2BLOB和TEXT類型。
MEDIUMBLOBMEDIUMTEXT一個BLOB或TEXT列,最大長度為 16777215 (2^24 - 1) 個字元。查看章節6.5.3.1 隱式的列定義變化。查看章節6.2.3.2BLOB和TEXT類型。
LONGBLOBLONGTEXT一個BLOB或TEXT列,最大長度為 4294967295 (2^32 - 1) 個字元。查看章節6.5.3.1 隱式的列定義變化。注意,由於伺服器/客戶端的協議以及 MyISAM 表通常有一個 16M 每通信包/錶行的限制,你仍然不能使用這個類型的整個范圍。查看章節6.2.3.2BLOB和TEXT類型。ENUM('value1','value2',...)一個枚舉類型。一個僅能有一個值的字元串對象,這個值選自值列'value1'、'value2'、...、NULL或特殊的""出錯值。一個ENUM列可以有最大 65535 不同的值。查看章節6.2.3.3ENUM類型。SET('value1','value2',...)一個集合。一個能有零個或更多個值的字元串對象,其中每個值必須選自值列'value1'、'value2'、...。一個SET列可以有最大 64 個成員。查看章節6.2.3.4SET類型。
MySQL 支持所有的 ANSI/ISO SQL92 數字類型。這些類型包括准確數字的數據類型(NUMERIC、DECIMAL、INTEGER和SMALLINT),也包括近似數字的數據類型(FLOAT、REAL和DOUBLE PRECISION)。關鍵詞INT是INTEGER的同義詞,關鍵詞DEC是DECIMAL的同義詞。

NUMERIC和DECIMAL類型被 MySQL 以同樣的類型實現,這在 SQL92 標准中是允許的。他們用於保存對准確精度有重要要求的值,例如與金錢有關的數據。當以它們中的之一聲明一個列時,精度和數值范圍可以(通常是)被指定;例如:

salary DECIMAL(5,2)
在這個例子中,5(精度(precision)) 代表重要的十進制數字的數目,2(數據范圍(scale)) 代表在小數點後的數字位數。在這種情況下,因此,salary列可以存儲的值范圍是從-99.99到99.99。(實際上 MySQL 在這個列中可以存儲的數值可以一直到999.99,因為它沒有存儲正數的符號)。

譯者註:

M 與D 對DECIMAL(M, D) 取值范圍的影響

類型說明 取值范圍(MySQL < 3.23) 取值范圍(MySQL >= 3.23)
DECIMAL(4, 1) -9.9 到 99.9 -999.9 到 9999.9
DECIMAL(5, 1) -99.9 到 999.9 -9999.9 到 99999.9
DECIMAL(6, 1) -999.9 到 9999.9 -99999.9 到 999999.9
DECIMAL(6, 2) -99.99 到 999.99 -9999.99 到 99999.99
DECIMAL(6, 3) -9.999 到 99.999 -999.999 到 9999.999

# 在MySQL 3.23 及以後的版本中,DECIMAL(M, D) 的取值范圍等於早期版本中的DECIMAL(M + 2, D) 的取值范圍。注釋結束:
在 ANSI/ISO SQL92 中,句法DECIMAL(p)等價於DECIMAL(p,0)。同樣的,在執行被允許決定值p的地方,句法DECIMAL等價於DECIMAL(p,0)。MySQL 目前還不支持DECIMAL/NUMERIC數據類型的這些變體形式中的任一種。一般來說這並不是一個嚴重的問題,通過明確地控制精度和數值范圍可以得到這些類型的主要功能益處。

DECIMAL和NUMERIC值是作為字元串存儲的,而不是作為二進制浮點數,以便保護這些值的十進制精確度。一個字元用於數值的每一位、小數點(如果scale> 0) 和「-」符號(對於負值)。如果scale是 0,DECIMAL和NUMERIC值不包含小數點或小數部分。

DECIMAL和NUMERIC值的最大范圍與DOUBLE一致,但是對於一個給定的DECIMAL或NUMERIC列,它的實際范圍可制定該列時的precision或scale限制。當這樣的列被賦給了小數點的位數超過scale所指定的值時,該將根據scale進行四捨五入。當一個DECIMAL或NUMERIC列被賦與一個大小超過指定(或預設)的precisionandscale的限止范圍時,MySQL 以該列范圍的端點值存儲該值。

C. 如何在linux下安裝mysql資料庫並配置

Linux下MySQL安裝配置 MySQL配置參數詳解
一、下載編譯安裝
#cd /usr/local/src/
#wget http://mysql.byungsoo.net/Downloads/MySQL-5.1/mysql-5.1.38.tar.gz
#tar –xzvf mysql-5.1.38.tar.gz ../software/
#./configure
--prefix=/usr/local/mysql //MySQL安裝目錄
--datadir=/mydata //資料庫存放目錄
--with-charset=utf8 //使用UTF8格式
--with-extra-charsets=complex //安裝所有的擴展字元集
--enable-thread-safe-client //啟用客戶端安全線程
--with-big-tables //啟用大表
--with-ssl //使用SSL加密
--with-embedded-server //編譯成embedded MySQL library (libmysqld.a),
--enable-local-infile //允許從本地導入數據
--enable-assembler //匯編x86的普通操作符,可以提高性能
--with-plugins=innobase //資料庫插件
--with-plugins=partition //分表功能,將一個大表分割成多個小表
#make && make install //編譯然後安裝
二、新建用戶和組
#groupadd mysql //建MySQL組
#useradd -g mysql -s /sbin/nologin mysql //建MySQL用戶屬於MySQL組
三、配置
#chown -R mysql:mysql /usr/local/mysql/ 把MySQL目錄的許可權給MySQL用戶和組
#cp /usr/local/src/software/ mysql-5.1.38/support-files/my-medium.cnf /etc/my.cnf //拷入配置文件my.cnf
#/usr/local/mysql/bin/mysql_install_db --user=mysql //用MySQL來初始化資料庫
#chown -R mysql:mysql /usr/local/mysql/var/ //把初始化的資料庫目錄給MySQL所有者
#/usr/local/mysql/bin/mysqld_safe --user=mysql & //啟動MySQL
四、其他
#cp /usr/local/src/software/ mysql-5.1.38/support-files/mysql.server /etc/init.d/mysqld
#chmod 755 /etc/init.d/mysqld
#chkconfig --add mysqld
#chkconfig mysqld on
#service mysqld restart
五、登陸測試
#cd /usr/local/mysql/bin
#mysql
>show databases;
#
MySQL安裝結束

linux下mysql配置方法
在linux中mysql的配置文件路徑在/usr/share/mysql下
有:my-huge.cnf 、my-large.cnf、 my-medium、my-small.cnf這些文件
根據需要打開這些文件中的一個:
在文件中找到[mysqld]
在下這行下加入datadir=FILEPATH /*這個路徑為資料庫存放的路徑*/
然後保存文件
在shell中輸入
#cp my-***.cnf /etc
#cd /etc
#mv my.cnf my.cnf.bak /*把系統以前的mysql配置文件備份*/
#mv my-***.cnf my.cnf
#service mysqld start /*啟動mysql服務*/
#ntsysv /*配置mysql自啟動,在彈出的窗口中把mysqld這項服務用空格選中,最後確定保存*/

D. mysql千萬級數據update怎麼優化

提問:何設計或優化千萬級別表外其信息覺題點范簡單說該何做於存儲設計必須考慮業務特點收集信息:
1.數據容量:1-3內概少條數據每條數據概少位元組;
2.數據項:否欄位些欄位值否經更新;
3.數據查詢SQL條件:哪些數據項列名稱經現WHERE、GROUP BY、ORDER BY句等;
4.數據更新類SQL條件:少列經現UPDATE或DELETE WHERE句;
5.SQL量統計比:SELECT:UPDATE+DELETE:INSERT=少
6.預計表及相關聯SQL每總執行量何數量級
7.表數據:更新主業務 查詢主業務
8.打算採用資料庫物理伺服器及資料庫伺服器架構
9.並發何
10.存儲引擎選擇InnoDBMyISAM

致明白10問題至於何設計類表應該都清楚

至於優化若指創建表能變表結構建議InnoDB引擎利用點內存減輕磁碟IO負載IO往往資料庫伺服器瓶頸

另外優化索引結構解決性能問題建議優先考慮修改類SQL語句使更快些已靠索引組織結構式前提 索引已經創建非若讀主考慮打query_cache 及調整些參數值:sort_buffer_size,read_buffer_size,read_rnd_buffer_size,join_buffer_siz
更信息參見:
MySQL資料庫伺服器端核參數詳解推薦配置
紙談兵說我思路及我解決拋磚引玉
我近解決問題
我現公司三張表5億數據每張表每增量100w
每張表概10columns左右
面我做測試比
1.首先看engine,數據量情況沒做區情況
mysiam比innodb讀情況效率要高13%左右
2.做partition讀mysql官文檔其實於partition專門myisam做優化於innodb所數據存ibdata面所即使看schema變其實沒本質變化
區於同physical disk面情況提升概1%
區同physical disk我三同disks提升概3%其實所謂吞吐量由素決定比explain parition候看record區每區都其實本質沒解決讀問題提升寫效率
另外問題於區張表三column都經用於做查詢條件其實件悲慘事情沒辦所sql做針性區mysql官文檔說間做區且用間查詢恭喜
3.表主要用讀寫其實問題充應該問寫入候同並發查詢我問題比較簡單mongodb shredding支持能crushmysql所通情況9am-9pm寫入情況候我做 viewview基於近插入或者經查詢通做view離讀取說寫table讀進行邏輯判斷前view操作
4做些archive table比先些表做已統計析通已析+增量解決
5用mysiam問題要注意.configure候加max index length參數候record數於制定度候indexdisable

E. 如何向mysql添加新的本地函數詳解

create function 函數名稱(參數列表) reurns 返回值類型 函數體 執行的方法很簡單: 載入 ** create function returns {string|real|integer} ** soname 釋放! ** drop function

F. MYSQL如何設置大小寫敏感

1、首先打開MYSQL應用程序,進入到操作首頁中。

G. 詳解php語法:mysql_connect()方法 其中這個參數中的server,user,pwd應該怎樣填寫。

mysql_connect()的語法是這樣的:
mysql_connect("主機名","資料庫用戶名","資料庫密碼");
首先,你是在本地測試的,那麼主機名你可以用localhost,也可以用127.0.0.1。
其次,既然你在安裝mysql時設置了用戶名為root,那麼,資料庫用戶名一項就可以填寫root。
其三,資料庫密碼是你的mysql名戶名為root的用戶的密碼。
根據你給出的信息,正確的連接應該是:
mysql_connect("localhost","root","資料庫密碼");

H. mysql存儲過程出錯

mysql> create PROCEDURE sp_GetPageRecord( IN TableName VARCHAR(100), IN Primar
yKey VARCHAR(50), IN Col1 VARCHAR(255) , IN WhereSql VARCHAR(255) , IN Sort V
ARCHAR(200) , IN PageSize INT , IN CurrPage INT, IN IsDesc BIT(1) ) BEGIN END;
Query OK, 0 rows affected (0.00 sec)

當然首先要確認下MySQL版本。MySQL從5.0版本開始支持存儲過程
一、VARCHAR類型最多支持255個字元,超過255個字元可以考慮用TEXT變數。TEXT變數支持最大到65536個位元組。
二、不支持參數中的DEFAULT值。也就是說 = ...這樣的要去掉。
三、必須要有過程體,過程體的開始與結束使用BEGIN與END進行標識。
四、BIT類型支持1-64位的存儲。
五、存儲過程中SELECT ... INTO var_list中var_list不能用存儲過程的參數。
六、下面需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL默認以";"為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將";"當做存儲過程中的代碼,不會執行這些代碼,用完了之後要把分隔符還原。
七、存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這里有一個輸出參數s,類型是int型,如果有多個參數用","分割開。
參數
MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE([[IN |OUT |INOUT ] 參數名 數據類形...])
IN 輸入參數:表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值
OUT 輸出參數:該值可在存儲過程內部被改變,並可返回
INOUT 輸入輸出參數:調用時指定,並且可被改變和返回

在mysql命令提示符下逐行輸入下面的語句。
delimiter //
create procere `demo_out_total`(IN tbl_name varchar(255), IN whereClause varchar(255), OUT
total_tbl int)
BEGIN
DECLARE t_status int default 0;
DECLARE v_sql VARCHAR(500);
DECLARE continue HANDLER FOR SQLSTATE '23000' SET t_status = 1;
DECLARE continue HANDLER FOR SQLEXCEPTION SET t_status = 2;
set v_sql = CONCAT('select count(*) into @total from ',tbl_name, ' where ',whereClause, '
;');
select v_sql;
SET @total = 0;
SET @v_sql = v_sql;
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;
select @total;
set total_tbl = @total;
END;
//

/* sp demo_out_total2 use curson */
create procere `demo_out_total2`(IN tbl_name varchar(255), IN whereClause varchar(255), OUT total_tbl int)
BEGIN
DECLARE t_status int default 0;
DECLARE c_total CURSOR for SELECT total from tmptable ;
DECLARE continue HANDLER FOR SQLSTATE '23000' SET t_status = 1;
DECLARE continue HANDLER FOR SQLEXCEPTION SET t_status = 2;
set @v_sql = 'drop table tmptable if exist tmptable;';
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;

set @v_sql = CONCAT('create table tmptable as select count(*) total from ',tbl_name,' where ',whereClause,';');
PREPARE record FROM @v_sql;
EXECUTE record;
DEALLOCATE PREPARE record;

OPEN c_total;
FETCH c_total INTO total_tbl;
CLOSE c_total;
END;
//
delimiter ;

set @tbl_name = 'tb2';
set @whereClause = 'tid= 237';
set @total_tbl = 0;
call demo_out_total(@tbl_name,@whereClause,@total_tbl);
select @total_tbl;

詳見MySQL存儲過程詳解:
http://wenku..com/link?url=_W2ft5HNybWw5fBTPIFWEx--gAbNvgADf0wGk0s43QSoA2_Ci3ztQOKdO25uS85BJSdHK

MySQL存儲程序入門指南:
http://www.cnblogs.com/wxb-km/archive/2012/11/18/2775780.html

MySQL create procere語句參考:
http://dev.mysql.com/doc/refman/5.6/en/create-procere.html
http://dev.mysql.com/doc/refman/5.6/en/cursors.html
http://dev.mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html

MySQL數據類型存儲要求:
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html

熱點內容
javadebug 發布:2025-03-16 07:16:21 瀏覽:283
怎麼搭建linux伺服器ftp 發布:2025-03-16 07:07:38 瀏覽:988
晶元存儲原理 發布:2025-03-16 06:58:21 瀏覽:284
c語言中的整型 發布:2025-03-16 06:40:48 瀏覽:184
分部資料庫伺服器的IP地址有效 發布:2025-03-16 06:33:40 瀏覽:193
安卓項目如何配置tomacat 發布:2025-03-16 06:31:13 瀏覽:431
寫腳本測試 發布:2025-03-16 06:20:07 瀏覽:780
多個撥號寬頻如何配置 發布:2025-03-16 05:51:35 瀏覽:688
管理員c語言 發布:2025-03-16 05:40:17 瀏覽:342
安卓軟體上的圖案如何更改 發布:2025-03-16 05:35:57 瀏覽:748