在老版本的MySQL 3.22中,MySQL的單表限大小為4GB,當時的MySQL的存儲引擎還是ISAM存儲引擎。但是,當出現(xiàn)MyISAM存儲引擎之后,也就是從MySQL 3.23開始,MySQL單表最大限制就已經(jīng)擴大到了64PB了(官方文檔顯示)。也就是說,從目前的技術(shù)環(huán)境來看,MySQL數(shù)據(jù)庫的MyISAM存儲 引擎單表大小限制已經(jīng)不是有MySQL數(shù)據(jù)庫本身來決定,而是由所在主機的OS上面的文件系統(tǒng)來決定了。
成都創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計,凌云網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:凌云等地區(qū)。凌云做網(wǎng)站價格咨詢:18982081108
而MySQL另外一個最流行的存儲引擎之一Innodb存儲數(shù)據(jù)的策略是分為兩種的,一種是共享表空間存儲方式,還有一種是獨享表空間存儲方式。
當使用共享表空間存儲方式的時候,Innodb的所有數(shù)據(jù)保存在一個單獨的表空間里面,而這個表空間可以由很多個文件組成,一個表可以跨多個文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單 表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關(guān)數(shù)據(jù)。
而當使用獨享表空間來存放Innodb的表的時候,每個表的數(shù)據(jù)以一個單獨的文件來存放,這個時候的單表限制,又變成文件系統(tǒng)的大小限制了。
在MYSQL 中 終于引入了存儲過程這一新特性 這將大大增強MYSQL 的數(shù)據(jù)庫處理能力 在本文中 將指導(dǎo)讀者快速掌握MYSQL 的存儲過程的基本知識 帶領(lǐng)用戶入門
存儲過程介紹
存儲過程是一組為了完成特定功能的SQL語句集 經(jīng)編譯后存儲在數(shù)據(jù)庫中 用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它 存儲過程可由應(yīng)用程序通過一個調(diào)用來執(zhí)行 而且允許用戶聲明變量 同時 存儲過程可以接收和輸出參數(shù) 返回執(zhí)行存儲過程的狀態(tài)值 也可以嵌套調(diào)用
存儲過程的優(yōu)點
作為存儲過程 有以下這些優(yōu)點
( )減少網(wǎng)絡(luò)通信量 調(diào)用一個行數(shù)不多的存儲過程與直接調(diào)用SQL語句的網(wǎng)絡(luò)通信量可能不會有很大的差別 可是如果存儲過程包含上百行SQL語句 那么其性能絕對比一條一條的調(diào)用SQL語句要高得多
( )執(zhí)行速度更快 存儲過程創(chuàng)建的時候 數(shù)據(jù)庫已經(jīng)對其進行了一次解析和優(yōu)化 其次 存儲過程一旦執(zhí)行 在內(nèi)存中就會保留一份這個存儲過程 這樣下次再執(zhí)行同樣的存儲過程時 可以從內(nèi)存中直接中讀取
( )更強的安全性 存儲過程是通過向用戶授予權(quán)限(而不是基于表) 它們可以提供對特定數(shù)據(jù)的訪問 提高代碼安全 比如防止 SQL注入
( ) 業(yè)務(wù)邏輯可以封裝存儲過程中 這樣不僅容易維護 而且執(zhí)行效率也高
當然存儲過程也有一些缺點 比如
可移植性方面 當從一種數(shù)據(jù)庫遷移到另外一種數(shù)據(jù)庫時 不少的存儲過程的編寫要進行部分修改
存儲過程需要花費一定的學習時間去學習 比如學習其語法等
在MYSQL中 推薦使用MYSQL Query Browswer()這個工具去進行存儲過程的開發(fā)和管理 下面分步驟來學習MYSQL中的存儲過程
定義存儲過程的結(jié)束符
在存儲過程中 通常要輸入很多SQL語句 而SQL語句中每個語句以分號來結(jié)束 因此要告訴存儲過程 什么位置是意味著整個存儲過程結(jié)束 所以我們在編寫存儲過程前 先定義分隔符 我們這里定義 // 為分隔符 我們使用DELIMITER //這樣的語法 就可以定義結(jié)束符了 當然你可以自己定義其他喜歡的符號
如何創(chuàng)建存儲過程
下面先看下一個簡單的例子 代碼如下
DELIMITER?//CREATEPROCEDURE?`p ` ()LANGUAGE SQLDETERMINISTICSQL SECURITY DEFINERMENT? A procedure BEGINSELECT Hello World ! ;END//
下面講解下存儲過程的組成部分
)首先在定義好終結(jié)符后 使用CREATE PROCEDURE+存儲過程名的方法創(chuàng)建存儲過程 LANGUAGE選項指定了使用的語言 這里默認是使用SQL
)DETERMINISTIC關(guān)鍵詞的作用是 當確定每次的存儲過程的輸入和輸出都是相同的內(nèi)容時 可以使用該關(guān)鍵詞 否則默認為NOT DETERMINISTIC
) SQL SECURITY關(guān)鍵詞 是表示調(diào)用時檢查用戶的權(quán)限 當值為INVOKER時 表示是用戶調(diào)用該存儲過程時檢查 默認為DEFINER 即創(chuàng)建存儲過程時檢查
) MENT部分是存儲過程的注釋說明部分
lishixinzhi/Article/program/MySQL/201404/30557
mysql存儲過程的基本用法有哪些
在外部程序訪問數(shù)據(jù)庫時(例如 PHP),要組織很多 SQL 語句。
特別是業(yè)務(wù)邏輯復(fù)雜的時候,一大堆的 SQL 和條件夾雜在 PHP 代碼中,讓人不寒而栗。現(xiàn)在有了 MySQL 存儲過程,業(yè)務(wù)邏輯可以封裝存儲過程中,這樣不僅容易維護,而且執(zhí)行效率也高。
一、MySQL 創(chuàng)建存儲過程
"pr_add" 是個簡單的 MySQL 存儲過程,這個MySQL 存儲過程有兩個 int 類型的輸入?yún)?shù) "a"、"b",返回這兩個參數(shù)的和。
復(fù)制代碼 代碼如下:
drop procedure if exists pr_add;
計算兩個數(shù)之和
復(fù)制代碼 代碼如下:
create procedure pr_add
(
a int,
b int
)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as sum;
/*
return c;
不能在 MySQL 存儲過程中使用。return 只能出現(xiàn)在函數(shù)中。
*/
end;
二、調(diào)用 MySQL 存儲過程
復(fù)制代碼 代碼如下:
call pr_add(10, 20);
執(zhí)行 MySQL 存儲過程,存儲過程參數(shù)為 MySQL 用戶變量。
復(fù)制代碼 代碼如下:
set @a = 10;
set @b = 20;
call pr_add(@a, @b);
三、MySQL 存儲過程特點
創(chuàng)建 MySQL 存儲過程的簡單語法為:
復(fù)制代碼 代碼如下:
create procedure 存儲過程名字()
(
[in|out|inout] 參數(shù) datatype
)
begin
MySQL 語句;
end;
MySQL 存儲過程參數(shù)如果不顯式指定"in"、"out"、"inout",則默認為"in"。習慣上,對于是"in" 的參數(shù),我們都不會顯式指定。
1. MySQL 存儲過程名字后面的"()"是必須的,即使沒有一個參數(shù),也需要"()"
2. MySQL 存儲過程參數(shù),不能在參數(shù)名稱前加"@",如:"@a int"。下面的創(chuàng)建存儲過程語法在 MySQL 中是錯誤的(在 SQL Server 中是正確的)。 MySQL 存儲過程中的變量,不需要在變量名字前加"@",雖然 MySQL 客戶端用戶變量要加個"@"。
復(fù)制代碼 代碼如下:
create procedure pr_add
(
@a int, -- 錯誤
b int -- 正確
)
3. MySQL 存儲過程的參數(shù)不能指定默認值。
4. MySQL 存儲過程不需要在 procedure body 前面加 "as"。而 SQL Server 存儲過程必須加 "as" 關(guān)鍵字。
復(fù)制代碼 代碼如下:
create procedure pr_add
(
a int,
b int
)
as -- 錯誤,MySQL 不需要 "as"
begin
mysql statement ...;
end;
5. 如果 MySQL 存儲過程中包含多條 MySQL 語句,則需要 begin end 關(guān)鍵字。
復(fù)制代碼 代碼如下:
create procedure pr_add
(
a int,
b int
)
begin
mysql statement 1 ...;
mysql statement 2 ...;
end;
6. MySQL 存儲過程中的每條語句的末尾,都要加上分號 ";"
復(fù)制代碼 代碼如下:
...
declare c int;
if a is null then
set a = 0;
end if;
...
end;
7. MySQL 存儲過程中的注釋。
復(fù)制代碼 代碼如下:
/*
這是個
多行 MySQL 注釋。
*/
declare c int; -- 這是單行 MySQL 注釋 (注意 -- 后至少要有一個空格)
if a is null then # 這也是個單行 MySQL 注釋
set a = 0;
end if;
日志表,用clob類型,mysql中好像是text
評論表,保存已個日志表的外鍵,評論內(nèi)容如果也很多的話也可以使用clob類型
日志表與評論表就是一個1-N的關(guān)系
4.在大數(shù)據(jù)框架下,對大眾點評網(wǎng)的客戶評價進行挖掘的方法。
1、爬取網(wǎng)頁后從html頁面中把需要的字段信息顧客id,評論時間,評分,評論內(nèi)容,口味,環(huán)境,服務(wù),店鋪ID提取出來并存儲到MYSQL數(shù)據(jù)庫中。
2、發(fā)現(xiàn)完整的評論都存儲在’div’,'main-review’中,且部分頁面口味,環(huán)境,服務(wù)并不是每一頁都有,因此需要使用tryexcept防止程序中斷。
3、使用MYSQL數(shù)據(jù)庫,python連接MYSQL數(shù)據(jù)使用pymysql。需要先建立一個數(shù)據(jù)庫和表,然后連接并定義游標,寫對應(yīng)的sql語句,執(zhí)行事務(wù)。