1. 程式人生 > >mysql高級之編程優化

mysql高級之編程優化

圖的定義 函數 abc tables 什麽是 操作mysql 臨時表 增刪改查 在操作

★編程優化
一、字符編碼(mysql控制臺亂碼輸出解決:character_set_results=‘gbk‘)
表/列編碼設置
列:alter table 表名 change 列名 列名 數據類型 character set 字符集名
表:alter table 表名 character set utf8
服務器編碼設置
多表結構設置
二、視圖

①簡介
·什麽是視圖?視圖是由查詢結果形成的一張虛擬表。視圖的主要作用就是查詢。
·什麽時候用到視圖?如果某個查詢結果出現的非常頻繁,也就是,要經常拿這個查詢結果來做子查詢。
·使用視圖的好處:簡化查詢語句,可以進行權限控制,大數據表分表的時候

·視圖與表的關系:視圖是表的查詢結果,自然表的數據變了,會影響視圖的結果。
·能否對視圖進行增刪改查的操作?
1>視圖的增刪改也會影響表;2>但視圖並不總是能增刪改的;視圖與表的數據一一對應時可以修改,對於視圖的insert還應註意;視圖必須包含表中沒有默認值的列。
②創建
create [or replace] [algorithm={undefined|merge|temptable}]
view view_name[(colum_list)]
as select_statement
[with[cascaded|local] check option]
③管理
·視圖的存放位置
select * from iinformation_schema.views; 查詢視圖的存放位置;show tables;也可以查看
·查看視圖的定義:show table status from 視圖名稱 like ‘視圖名稱‘\G
·刪除視圖,只能刪除視圖的定義,不能刪除數據,必須有drop權限
drop view if exists 視圖名稱
·update 視圖名稱 set salary=1500 where emp_no=1001;更新視圖中emp_no=1001的工資;
·某些視圖是可更新的,也就是說,可以在諸如update、delete或insert等語句中使用他們,以更新基表的內容,對於可更新的視圖,在視圖中的行和基表中的行之間必須具有一對一的關系;包含以下的視圖都是不可更新的
1>聚合函數sum() min() max() count()
2>distinct
3>group by
4>having
5>union或union all
6>位於選擇列表中的子查詢
7>join
8>from子句中的不可更新視圖
9>algorithm=temptable(使用臨時表總會使視圖成為不可更新的)
·關於with check option的理解與應用?
通過視圖進行的修改,必須也能通過該視圖看到修改的後的結果。
三、變量與流程控制
·局部變量:局部變量在存儲過程中被定義,那麽局部變量只有在存儲過程中才有效,其他範圍無效。
use companys;
delimiter $$;
create procedure p_vartest()
begin
declare a varchar(20) default ‘abc‘;
select a
end
$$
delimiter;
call p_vartest
·會話變量:客戶端與服務器端相關聯的時候,你設置的變量,就是客戶端所擁有的變量,這些變量就是會話變量。
查看所有會話變量show session variables;
show session variables like ‘auto%‘;
當A客戶端和B客戶端同時操作mysql數據庫,各自設置的變量只對自己起作用,互不幹擾,等下次在操作mysql的時候,mysql會把自己的一些變量作用於客戶端。
修改session會話變量方法:
set @@session.autocommit=‘off‘;
set 變量名=‘某個值’;
·全局變量:不管是sessionA還是sessionB,只要你針對MySQL全局變量做了修改,A訪問和B訪問都是訪問相同的變量值,
查看所有全局變量
show global variables;
查看某一個全局變量
show global variables like ‘auto%‘;
設置全局變量
set @@global.變量名=某個值
·選擇語句
use companys;
delimiter $$;
create procedure p_showage(in age int)
begin
if age>=18 then
select ‘成年人‘;
else
select ‘未成年人‘;
end if;
end
$$






























mysql高級之編程優化