新聞中心
mysql語法
1 mysql 的存儲(chǔ)過程里,沒有固定的輸出語句,要輸出內(nèi)容,使用 select .. 形式即可;
為江陽等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及江陽網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都做網(wǎng)站、江陽網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
select var_a;
select column_a from tb_a limit 2;
2 存儲(chǔ)過程里,如果只是輸出內(nèi)容(不進(jìn)行捕獲),用上邊1中的select即可;如果調(diào)用存儲(chǔ)過程后對(duì)輸出的值進(jìn)行后續(xù)捕獲,則需使用 out 指定輸出參數(shù);
3 @var_a 表示這是個(gè)會(huì)話變量,在存儲(chǔ)過程里可以直接設(shè)置值而不用聲明,如
set @var_a = 10;
但并不推薦在存儲(chǔ)過程里使用會(huì)話變量(因?yàn)檫@種變量在同一個(gè)mysql連接是都是生效的,執(zhí)行完存儲(chǔ)后仍存在),推薦使用聲明式的臨時(shí)變量,即以下方式:
declare var_a int;
set var_a = 10;
4 示例
drop PROCEDURE p_a;
create PROCEDURE p_a(out aa int)
begin
declare bb int;
set bb = 10;
select bb;
select * from t_student limit 1;
select CURRENT_DATE();
set aa = bb;
end;
#調(diào)用
set @temp = 50;
call p_a(@temp);
select @temp; #@temp 為會(huì)話變量,由存儲(chǔ)過程返回重設(shè)值了。
希望能解決您的問題。
MySQL 里面如何設(shè)置列的自增長 語法是什么?
MySQL中可以通過AUTO_INCREMENT屬性為新的行產(chǎn)生唯一的標(biāo)識(shí),如:
CREATE TABLE animals (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(10)
)
INSERT INTO animals (name) VALUES (‘Joe’), (‘Tom’), (‘Rose’);
SELECT * FROM animals;
1 Joe
2 Tom
3 Rose
mysql如何設(shè)置自增主鍵
1.主鍵語法
①創(chuàng)建時(shí):create table sc (
studentno int,
courseid int,
score int,
primary key (studentno) );
②修改時(shí):ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名);
前提是原先沒有設(shè)置主鍵。
2.外鍵語法
①創(chuàng)建時(shí):create table sc (
studentno int,
courseid int,
score int,
foreign key (courseid) );
②修改時(shí):
ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[約束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[主表名] (id)[主表列] ;
3.使用組合主鍵
如果一列不能唯一區(qū)分一個(gè)表里的記錄時(shí),可以考慮多個(gè)列組合起來達(dá)到區(qū)分表記錄的唯一性,形式
①創(chuàng)建時(shí):create table sc (
studentno int,
courseid int,
score int,
primary key (studentno,courseid) );
②修改時(shí):alter table tb_name add primary key (字段1,字段2,字段3);
前提是原來表中沒有設(shè)置主鍵,若原先已有主鍵則會(huì)報(bào)錯(cuò)。
MySQL 常用插入語法總結(jié)
當(dāng)MySQL表字段設(shè)置 unique key 或者 primary key 時(shí),被約束的字段就必須是唯一的。新插入數(shù)據(jù)直接使用 insert into ,如果出現(xiàn)唯一性沖突,就會(huì)拋出異常。我們應(yīng)該根據(jù)需求選擇合適的插入語句。
為了演示,我們先新建一張user表,SQL語句如下:
當(dāng)插入數(shù)據(jù)時(shí),如果唯一性校驗(yàn)出現(xiàn)重復(fù)問題,則報(bào)錯(cuò);
如果沒有重復(fù)性問題,則執(zhí)行插入操作。
簡單總結(jié):重復(fù)則直接報(bào)錯(cuò),sql 語句不執(zhí)行,不重復(fù)則插入。
示例
執(zhí)行結(jié)果
當(dāng)插入數(shù)據(jù)時(shí),如果唯一性校驗(yàn)出現(xiàn)重復(fù)問題,則忽略錯(cuò)誤,只以警告形式返回,不執(zhí)行此SQL語句;
如果沒有重復(fù)性問題,則執(zhí)行插入操作。
簡單總結(jié):重復(fù)則忽略,sql 語句不執(zhí)行,不重復(fù)則插入。
示例
執(zhí)行結(jié)果
當(dāng)插入數(shù)據(jù)時(shí),如果唯一性校驗(yàn)出現(xiàn)重復(fù)問題,則在原有記錄基礎(chǔ)上,更新指定字段內(nèi)容,其它字段內(nèi)容保留;
如果沒有重復(fù)性問題,則執(zhí)行插入操作。
簡單總結(jié):重復(fù)則更新指定字段,不重復(fù)則插入。
示例
執(zhí)行結(jié)果
表記錄, mobile_phone_number 從 '13800000077' 更新為 '13800000088' 了, update_time 也從 NULL 更新為有值了,但是 id 沒有變:
replace into表示插入替換數(shù)據(jù),當(dāng)插入數(shù)據(jù)時(shí),如果唯一性校驗(yàn)出現(xiàn)重復(fù)問題,刪除舊記錄,插入新記錄;
如果沒有重復(fù)性問題,則執(zhí)行插入操作,效果和insert into是一樣的。
簡單總結(jié):重復(fù)則先刪除再插入新記錄,不重復(fù)則插入
。
示例
執(zhí)行結(jié)果
表記錄, id 和 mobile_phone_number 變了, update_time 變?yōu)榱俗侄文J(rèn)值 NULL :
replace into 執(zhí)行的邏輯:
示例一
示例一 insert into ... on deplicate key update 操作在 binlog 中記錄為:
示例二
示例二 replace into 操作在binlog中記錄為:
從示例可以看出,使用 replace into 會(huì)有以下問題:
執(zhí)行結(jié)果
因?yàn)槿苛卸际侵付ǖ闹?,所以,相?dāng)于所有字段全部更新了一次。
binlog 中的記錄:
如果出現(xiàn)重復(fù)異常,希望捕獲異常,則使用 insert into ;
如果出現(xiàn)重復(fù)異常,希望保存舊紀(jì)錄,忽略新紀(jì)錄,則使用 insert ignore into ;
如果出現(xiàn)重復(fù)異常,希望更新指定字段,則使用 insert into … on duplicate key update ;
如果出現(xiàn)重復(fù)異常,希望刪除舊記錄,插入新記錄,則使用 replace into 。
mysql 變量設(shè)置問題
mysql變量的術(shù)語分類:
1.用戶變量:以"@"開始,形式為"@變量名"
用戶變量跟mysql客戶端是綁定的,設(shè)置的變量,只對(duì)當(dāng)前用戶使用的客戶端生效
2.全局變量:定義時(shí),以如下兩種形式出現(xiàn),set
GLOBAL
變量名
或者
set
@@global.變量名,對(duì)所有客戶端生效。只有具有super權(quán)限才可以設(shè)置全局變量
3.會(huì)話變量:只對(duì)連接的客戶端有效。
4.局部變量:作用范圍在begin到end語句塊之間。在該語句塊里設(shè)置的變量
declare語句專門用于定義局部變量。set語句是設(shè)置不同類型的變量,包括會(huì)話變量和全局變量
通俗理解術(shù)語之間的區(qū)別:
用戶定義的變量就叫用戶變量。這樣理解的話,會(huì)話變量和全局變量都可以是用戶定義的變量。只是他們是對(duì)當(dāng)前客戶端生效還是對(duì)所有客戶端生效的區(qū)別了。所以,用戶變量包括了會(huì)話變量和全局變量
局部變量與用戶變量的區(qū)分在于兩點(diǎn):
1.
用戶變量是以"@"開頭的。局部變量沒有這個(gè)符號(hào)。
2.
定義變量不同。用戶變量使用set語句,局部變量使用declare語句定義
3.
作用范圍。局部變量只在begin-end語句塊之間有效。在begin-end語句塊運(yùn)行完之后,局部變量就消失了。
所以,最后它們之間的層次關(guān)系是:變量包括局部變量和用戶變量。用戶變量包括會(huì)話變量和全局變量。
使用備忘,set
@var
若沒有指定GLOBAL
或SESSION
,那么默認(rèn)將會(huì)定義用戶變量
兩種方式定義用戶變量:
1."=",如
set
@a
=3,@a:=5
2.":="。select常常這樣使用
總結(jié):使用select
和set設(shè)置變量的區(qū)別,set可以使用以上兩種形式設(shè)置變量。而select只能使用":="的形式設(shè)置變量
實(shí)踐積累:用戶變量在mysql客戶端退出后,會(huì)自動(dòng)消失。之后我打開客戶端,使用"select
@a;"
顯示變了的值為null。說明,未定義的變量初始化是null
實(shí)際中的問題
設(shè)置常量對(duì)group_concat()的配置影響:
SET
@@GROUP_CONCAT_MAX_LEN=4
手冊(cè)中提到設(shè)置的語法是這樣的:
SET
[SESSION
|
GLOBAL]
group_concat_max_len
=
val;
以下兩種形式都能達(dá)到達(dá)到同樣的效果,但是有什么區(qū)別?
SET
@@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就變成了:SET
@@GROUP_CONCAT_MAX_LEN=4;
2011.2.25
之前的理解不怎么準(zhǔn)確?,F(xiàn)在對(duì)加深理解后的地方進(jìn)行總結(jié)。
mysql中變量的層次關(guān)系是:大體包括用戶變量和系統(tǒng)變量。系統(tǒng)變量包括系統(tǒng)會(huì)話變量和系統(tǒng)全局變量。
相互之間的區(qū)別:
因?yàn)橛脩糇兞烤褪怯脩舳x的變量,系統(tǒng)變量就是mysql定義和維護(hù)的變量。所以,用戶變量與系統(tǒng)變量的區(qū)別在于,是誰在管理這些變量。mysql一啟動(dòng)的時(shí)候就會(huì)讀取系統(tǒng)變量(這樣做目的是可以確定mysql的以何種機(jī)制或模式運(yùn)行)。
系統(tǒng)會(huì)話變量與用戶變量都是在當(dāng)前客戶端退出后消失。他們之間的區(qū)別可以這樣理解,雖然常??吹?set
@@varible"的形式去改變系統(tǒng)變量的值,但是并不涉及到定義系統(tǒng)變量。用戶變量是可以自己定義(初始化)。系統(tǒng)變量按照只是在改變值。
局部變量只在begin-end語句塊中定義并有效。執(zhí)行到該語句塊之后就消失了。定義的方式有明顯的特點(diǎn),使用declare語句。
使用系統(tǒng)變量理論上是可以使用兩種形式:
1.
前面帶有符號(hào)"@@"
2.
符號(hào)省略。比如我會(huì)看的如下形式:CURRENT_USER。但是,約定系統(tǒng)變量要使用"@@變量名"的形式,就是在前面加上符號(hào)"@@"
分享名稱:mysql怎么設(shè)置語法,mysql基礎(chǔ)語法大全
鏈接地址:http://fisionsoft.com.cn/article/dsidohe.html