比方說你創(chuàng)建存儲過程的語句如下:
創(chuàng)新互聯(lián)建站是專業(yè)的枝江網(wǎng)站建設公司,枝江接單;提供成都網(wǎng)站設計、成都做網(wǎng)站、外貿網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行枝江網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
create?procedure?test_proc(count?int)
那么執(zhí)行存儲過程的語句就是:
call?test_proc(500);
用存儲過程吧
drop procedure if exists call proc_temp;
delimiter $
create procedure proc_temp(
IN startDate VARCHAR(20),//外部傳入的參數(shù)
IN endDate VARCHAR(20))
BEGIN
declare i int(11);//如果需要可以在內部設置臨時變量
i = 0;//變量初始化
select * from table; //這里放置多條sql語句
END $
delimiter ;
//前面的寫好再運行一遍算配置了
call proc_temp("2017-07-05","2017-08-05")//調用存儲過程
用存儲過程就行了,給你一個能傳參數(shù)的實例吧
drop procedure if exists employee;
delimiter $
create procedure employee(
IN acc int(20))
BEGIN
DECLARE i INT(11);
SET i = 0;
loop1: WHILE i=acc DO
你的sql語句
SET i=i+1;
END WHILE loop1;
end $
delimiter ;
call employee(1000)
mysql常用命令詳解
mysql安裝目錄
數(shù)據(jù)庫目錄
/var/lib/mysql/
配置文件
/usr/share/mysql(mysql.server命令及配置文件)
相關命令
/usr/bin(mysqladmin mysqldump等命令)
啟動腳本
/etc/init.d/mysql(啟動腳本文件mysql的目錄)
系統(tǒng)管理
連接mysql
格式:
mysql -h 主機地址 -u用戶名 -p用戶密碼
例 1:連接到本機上的 mysql。
hadoop@ubuntu:~$ mysql
-uroot -pmysql;
例 2:連接到遠程主機上的 mysql。
hadoop@ubuntu:~$ mysql -h
127.0.0.1 -uroot -pmysql;
1.一條查詢語句如何執(zhí)行?
2.一條更新語句如何執(zhí)行?
3.innodb的redolog是什么?
4.什么是寫緩沖
5.寫緩沖一定好嗎?
6.什么情況會引發(fā)刷臟頁
關于一條mysql查詢語句在mysql中的執(zhí)行流程
如select name from test where id=10;
1.連接器---先與mysql服務端連接器建立連接,若查詢緩存命中則直接返回 (查詢緩存的弊端:查詢緩存的失效非常頻繁,只要有對一個表的更新,這個表上所有的查詢緩存都會被清空。)
2.分析器---詞法分析告訴服務端你要干什么(我要找 test表中id為10的名字) ( 其中sql語法錯誤在這塊暴露 )
3.優(yōu)化器---服務端會思考該怎么執(zhí)行最優(yōu)(索引的選擇)
4.執(zhí)行器---檢查用戶對庫對表的權限
5.存儲引擎--存儲數(shù)據(jù),提供讀寫接口
以update a set name=1 where id=1;
主要區(qū)別在于在查詢到數(shù)據(jù)之后(select name from a where id=1),如果是innodb引擎它會進行日志的兩階段提交:
1.開啟事務,寫入redolog(innodb引擎特有),并更新內存
3.寫入binlog,提交事務,commit
我們知道m(xù)ysql數(shù)據(jù)存儲包含內存與磁盤兩個部分,innodb是按數(shù)據(jù)頁(通常為16k)從磁盤讀取到內存中的(剩余操作在內存中執(zhí)行),當要更新數(shù)據(jù)時,若目標數(shù)據(jù)的數(shù)據(jù)頁剛好在內存中,則直接更新。不在呢?
將這個更新操作(也可能是插入) 緩存在change buffer中 (redolog也會記錄這個change buffer操作)等到下一次查詢要用到這些數(shù)據(jù)時,再執(zhí)行這些操作,改變數(shù)據(jù)(稱為合并操作記錄稱為merge)。
innodb_change_buffer_max_size
innodb_change_buffering
先介紹兩個概念
因為redolog是環(huán)形日志,當redolog寫滿時,就需要“擦掉”開頭的一部分數(shù)據(jù)來達到循環(huán)寫,這里的擦掉指,指將redolog日志的checkpoint位置從 CP推進到CP‘ ,同時將兩點之間的臟頁刷到磁盤上(flush操作),此時系統(tǒng)要停止所有的更新操作(防止更新操作丟失)
1.系統(tǒng)內存不足。當要讀取新的內存頁時就要淘汰一些數(shù)據(jù)頁,如果淘汰的正好是臟頁,就要執(zhí)行一次flush操作
2.Mysql認為系統(tǒng)處于“空閑狀態(tài)”
3.正常關閉Mysql
上述后兩者場景(系統(tǒng)空閑和正常關閉)對于性能都沒太大影響。
當為第一種redolog寫滿時,系統(tǒng)無法執(zhí)行更新操作,所有操作都會堵塞
當為第二種內存不夠用時,如果淘汰臟頁太多,影響mysql響應時間
后兩者刷臟頁會影響性能,所以Mysql需要有刷臟頁控制策略,可以從以下幾個設置項考慮
1.設置innodb_io_capacity告訴innodb所在主機的IO能力
首先創(chuàng)建連接
就創(chuàng)建個Cnnection對象,然后把驅動加上,還有帳號密碼什么的!我沒連過sql數(shù)據(jù)庫,不知道驅動,你可以在網(wǎng)上搜一下。
給你一個我連接mysql數(shù)據(jù)庫的例子
public Connection Getdata(){//這是連接數(shù)據(jù)庫的一個方法,還可以配置連接池。
Connection con=null;
try {
Class.forName("com.mysql.jdbc.Driver");//加驅動
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/data","root","qq");//數(shù)據(jù)庫路徑、端口、庫名、數(shù)據(jù)庫用戶名和密碼
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public void delete(int id){//對數(shù)據(jù)庫進行操作的方法,先調用上面寫好的連接!
Connection con=Getdata();
Statement st;
try {
st=con.createStatement();
st.executeUpdate("delete from kaoshi where id="+id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在學習SQL語句之前,首先需要區(qū)分幾個概念,我們常說的數(shù)據(jù)庫是指數(shù)據(jù)庫軟件,例如MySQL、Oracle、SQL Server等,而本文提到的數(shù)據(jù)庫是指數(shù)據(jù)庫軟件中的一個個用于存儲數(shù)據(jù)的容器。
在MySQL中,數(shù)據(jù)庫稱為database,數(shù)據(jù)表稱為table,一個數(shù)據(jù)庫軟件中有多個數(shù)據(jù)庫(databases),每個數(shù)據(jù)庫中又可以有多個數(shù)據(jù)表(tables),最終,數(shù)據(jù)是存儲在數(shù)據(jù)表中。
數(shù)據(jù)庫和數(shù)據(jù)表之間的關系可以用下面這個圖來表示,對于一個數(shù)據(jù)庫來說,有多個數(shù)據(jù)表。
在正式開始寫SQL語句之前,需要說明兩點。
這里通過MySQL Workbench來寫SQL代碼,在Workbench中,執(zhí)行一條SQL語句的方式有兩種。
了解了這之后,接下來介紹一些常見的命令,分兩部分:數(shù)據(jù)庫常用命令和數(shù)據(jù)表常用命令。
1、查看有哪些數(shù)據(jù)庫
2、創(chuàng)建數(shù)據(jù)庫
創(chuàng)建一個名為Testdb的數(shù)據(jù)庫。
3、創(chuàng)建數(shù)據(jù)庫并指定編碼格式
有些時候,為了防止中文亂碼,創(chuàng)建數(shù)據(jù)庫的時候需要指定編碼格式。
4、使用某個數(shù)據(jù)庫
使用mydb這個數(shù)據(jù)庫,或者進入mydb這個數(shù)據(jù)庫。
5、刪除數(shù)據(jù)庫
刪除Testdb這個數(shù)據(jù)庫。
1、查看有哪些數(shù)據(jù)表
進入某個數(shù)據(jù)庫之后,想查看有哪些數(shù)據(jù)表,SQL語句為:
mydb是一個新建的數(shù)據(jù)庫,所以自然是沒有數(shù)據(jù)表。
2、創(chuàng)建數(shù)據(jù)表
建表SQL語句格式為:
說明: 每個字段以逗號分隔,最后一個字段不加逗號。
例如,給定一個學員信息表,如下表所示。
根據(jù)以上表格,建表SQL語句如下。
以上語句中,primary key表示主鍵,意思是這個字段作為記錄的唯一標識,就像每個人的身份證號,都是唯一確定的。
3、查看表結構
查看表結構的SQL命令為:
執(zhí)行該命令會顯示表stuinfo的基本結構,例如有哪些字段,每個字段是什么類型,誰是主鍵等。
4、修改數(shù)據(jù)表
修改數(shù)據(jù)表通過drop子句進行,比如,建完表后,想增加一個字段,SQL語句的格式為:
想在指定位置增加一個字段,例如,在某個字段后增加一個字段,SQL語句的格式為:
如果在某個字段之前增加字段,用before即可。
例如,在字段age后增加一個字段major(專業(yè)),SQL語句為:
執(zhí)行這個命令,再通過describe查看表結構,會發(fā)現(xiàn)表中多了一個字段major。
如果要刪除major這個字段,通過drop子句,SQL語句為:
5、重命名表
重命名表通過alter+rename來實現(xiàn),SQL語句格式為:
這里為了不影響之前創(chuàng)建的表,我們創(chuàng)建一個新表,SQL語句如下。
以上創(chuàng)建一個名為stuInfoTest的表,現(xiàn)在想將它的名稱改成stuinfotest1,SQL語句為:
6、刪除數(shù)據(jù)表
刪除數(shù)據(jù)表通過drop進行,SQL語句格式為:
例如,刪除數(shù)據(jù)表stuinfotest1,SQL語句為:
7、插入記錄
此時的表stuinfo是空的,沒有數(shù)據(jù),我們要向表中插入記錄。
插入記錄通過insert into進行,SQL語句格式為:
例如,向表stuinfo插入一條記錄,SQL語句為:
注意:上方是一條SQL語句,為了可讀性換行,記住一條SQL語句默認以分號結尾。
如果需要一次性插入多條記錄,SQL語句格式為:
例如,向表stuinfo再插入兩條記錄,SQL語句為:
注意:如果設置了主鍵,插入記錄的主鍵字段是不能重復的,也就是不能插入重復的記錄。
作業(yè):大家可以按照上述方法將上面的學員信息表中的所有記錄都插入表stuinfo中。
8、查詢記錄
有了數(shù)據(jù)之后,就可以查詢記錄了,查詢記錄通過select子句進行。
例如,想查詢表stuinfo中的所有記錄,SQL語句為:
執(zhí)行之后,就可以看到表stuinfo中的所有記錄了。
如果想查詢符合某個條件的記錄,就要用到where子句了,SQL格式為:
例如,想查詢stuid為20161001的記錄,SQL語句為:
9、刪除記錄
刪除記錄通過delete子句進行,SQL語句格式為:
例如,想刪除stuid為20161002的記錄,SQL語句為:
10、修改記錄
修改記錄通過update子句進行,update就是更新的意思,SQL語句格式為:
例如,想將學號(stuid)為20161001的記錄的姓名(stuname)更新為Jack,SQL語句為:
以上,就是MySQL中的基本SQL語句。
零基礎如何學習數(shù)據(jù)分析?查看下方專欄。