MySQL筆記

一、存儲過程

創(chuàng)建過程如下 先改變結(jié)束符號

delimiter && //表示以&&為結(jié)束符號

create procedure test(a int)

begin

select * from student where sno=a;

end &&

使用的時候用 call test(x);? x為int類型 表示帶參存儲過程

begin

declare a int;? //當需要定義參數(shù)的時候在begin里面定義 并且所有語句必須有分號;結(jié)尾 否則報錯

set a=5;

select * from student where sno=a;

二棚瘟、自定義函數(shù)

創(chuàng)建自定義函數(shù)過程如下 規(guī)則和存儲過程差不多

delimiter &&

create function test5(i int,o int,p int)

returns int

begin? // declare d int; 也可以在begin之后聲明一個變量

set p=i*o; //同理用set創(chuàng)建函數(shù)體

return p;

end &&

這個是帶參并且是begin里面有函數(shù)體的函數(shù)

使用的時候用? select test5(i,o,p) 賦值3個int即可 執(zhí)行結(jié)果只與函數(shù)體有關

三、觸發(fā)器

創(chuàng)建觸發(fā)器 首先也是delimiter一下 然后

delimiter &

create trigger test after insert on student for each row? //這里可以有after 和 before兩種觸發(fā)器

update student_h set row=row+1;? //當有函數(shù)體的時候用begin包裹起來

end &

四搜吧、數(shù)據(jù)庫所有賬戶

三種類型:create login login_name?? //登錄賬戶 指登錄sql server2008的賬戶 可以擁有多個user 如下

create user user_name?????????? // 數(shù)據(jù)庫用戶 隸屬于賬戶里面的盲赊,可以簡稱為映射 grant on 表名 to <用戶名,賬號名> with grant option表示該主體可以向其他主體授予所指定的權限

? deny? execute on test1 to studnet cascade 同理grant 屬于權限的一種? cascade=with grant option

? revoke 同理deny 表示收回權限

各類操作匯總:

數(shù)據(jù)庫操作:

新增:create database test;?

刪除:drop database if exists test1;?

修改:alter database test1 default character set gb2312;

表操作:

一伸眶、和表結(jié)構之類有關:

查看:

desc table_name;? Or? show columns from table_name;

新增:

create table test(

a int not null default 0 primary key auto_increment CHECK (a>0),

b char(10) not null,

c datetime惊窖,

CONSTRAINT chk_Person CHECK (b什么什么的 AND c 什么什么的)//這種是為了命名約束

//? CHECK (a>0)可以寫在這里

);? //當約束作用于兩列以上時候要寫在最后面

更改(列):

alter table test? ? //新增行

add column d char(1) not null default 'a' after b;?

//after可以換成first表示設為第一行(只有這兩種)

alter table test? ?

alter column c char(10); //修改行

[alter column b set default 'hello';]? // 也可以修改默認值

alter table test1

? ? drop column b;? //刪除行

alter table test?

? ? change column b e varchar(2) null default '啊';? //同時改列名和類型(將列名b改為e)

alter table test

modify column b char(5) first;? //只修改數(shù)據(jù)類型 可以使用first或者after修改它的順序

alter table test

rename to test_backup //修改table名字

重命名表:

rename table test_backup to test;

復制表:

create table test_copy like test; //結(jié)構完全復制

create table test_copy select * from test;? //將test作為結(jié)果集復制過去 不會復制約束和索引等

create table test_copy as select * from test; //同上 可以用括號將as后面的東西包裹起來

刪除表:

drop table [if exists] test;? //表里的外鍵可以用cascade策略 例如: on delete cascade 表示

在父表上update/delete記錄時,同步update/delete掉子表的匹配記錄

二厘贼、和數(shù)據(jù)有關:

插入:

insert into test values(1,'潘冠宇','2017-03-18 16:52:00');

insert into test(a,b) values(1,'潘冠宇');? //如果數(shù)據(jù)只插入某些列 那么要在表名后用圓括號括起來

insert into test set 列名=值,列名=值; //只對想輸入的列輸入且主鍵非空 not null自動賦值但會有warning

replace into test values(1,'張馨允','2017-03-18 16:52:00');?

//當要替換信息的時候可以用replace更改除主鍵以外的信息

刪除:

delete from test where 列名=值;? //

delete [*] from test 或者 turncate test //均表示刪除所有行? 還有一種從多個表刪除看書

修改:

update test set j=1.22,g='女' where f=1;? //修改多列的時候用逗號

用了ignore關鍵詞在更新中有錯誤也不會中斷

查詢:

select * from test;

select a,b from test;

{--簡單Case函數(shù)

case:

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '女'

ELSE '其他' END

--Case搜索函數(shù)

CASE WHEN sex = '1' THEN '男'

WHEN sex = '2' THEN '女'

ELSE '其他' END}

select a,case b

when ...? //可以使用上述的case函數(shù) 此為高級查詢

select a,b from test where a like '我_%';? //%表示匹配任意字符0到任意次數(shù) 下劃線_表示匹配一個任意字符 當列值有_的時候 需要轉(zhuǎn)義字符#去除下劃線_的特殊作用

regexp:

select * from test where a regexp '我';? //等同于where a like '%我%' 表示含有我字的值

select distinct * from test where g regexp '東莞|北京'; 表查詢帶有東莞和北京的記錄

group by a? //表示通過a中的每個值來分組

having 字句會對分組的過濾 比如count(*)<=3 那么通過group by分組之后的就只取小于等于3的

select a,b from test order by c limit 4,3(limit 3 offset 4); //limit表示限制從第5行開始的3行數(shù)據(jù)

在MySQL中 沒有top n的用法 需要用limit對數(shù)據(jù)進行選取 比如從0開始? limit 0,10

視圖操作:

創(chuàng)建:

create view view_name as select column_name(s) from table_name where condition [with check option] // with check option 用于指定在可更新視圖上的修改都需要滿足select中所指定的限制條件爬坑。

修改:? alter view...? //同創(chuàng)建一樣

? ? ? ? // 視圖的操作大多數(shù)和表一樣 在插入數(shù)據(jù)的時候 當有check option的選項時 那么在插入的時候必須滿足condition的條件比如:

插入: create view v as select * from test where age > 20 with check option;

mysql> insert into v1(ssex) values(11); //如果在創(chuàng)建的時候有 with check option

ERROR 1369 (HY000): CHECK OPTION failed 'test1.v1' //那么在插入數(shù)據(jù)不滿足創(chuàng)建的condition的時候就會報錯? 并且主表也不會創(chuàng)建

// 如果沒有加option? 那么數(shù)據(jù)會插入到主表上 但是視圖不會挑選這一條行記錄 所有數(shù)據(jù)隨時更新

刪除:

drop view v1;

更新:

update v1 set a='你好';

索引操作:

創(chuàng)建:

1、 create index index_name on test.test(a,b) [using btree];? //在test數(shù)據(jù)庫的test表對a和b列創(chuàng)建索引

2涂臣、 create table test(

a int not null primary key, //primary key也是一個索引 是對本列聲明非空的索引

b char(2),

name char(50),

index index_name(b),? //在創(chuàng)建表的時候可以同時創(chuàng)建索引 可以創(chuàng)建多個索引

constraint foreign key(name) references customers(name));

//外鍵也是一種索引 key通常是index的同義詞

3盾计、 alter table test add [constraint fk_name] foreign key(sno) references student(sno);

//上面這一條是增加外鍵約束 被參照的列必須是主鍵或者unique索引

alter table test add index index_name(a,b); //

查看:

show index from 表名;

刪除:

alter table test drop index index_name,drop paimary key;

//無法直接用? drop index 索引名稱; 那是標準SQL MYSQL不支持

存儲過程操作:

一、存儲過程:

創(chuàng)建:

delimiter &&

create procedure sp_name(in/out/inout cid int,in csex char(1))

//? in/out/inout 表示三種參數(shù)赁遗,in表示輸入?yún)?shù)署辉,out表示輸出參數(shù),inout表示輸入輸出參數(shù)岩四。

begin

update customers set cust_sex=csex where cust_id=cid;

end &&

delimiter ;

事件操作:

一哭尝、事件調(diào)度:

查看:

show variables like 'event_scheduler';

select @@event_scheduler;? //兩種方式都可以查看? 結(jié)果為1或者on表示開啟

開啟:

set global event_scheduler=1;

set global event_scheduler=ture;? //經(jīng)測試 這一條value不可以為true;

二、事件操作:

創(chuàng)建:

1剖煌、 delimiter &&

create event if not exists et

on schedule every 1 month //注意這里是 schedule 沒有 【r】2酿小!

// year quarter month day hour minute week second 等等

starts curdate() +interval 1 month

ends '2018-03-30'

do

begin

if year(curdate())<2018 then

insert into t1()

values(1,'你好'); //這個事件的功能是 每個月向表t1插入一條數(shù)據(jù)

? end if; 該事件于下個月開始 并且結(jié)束于2018年3月30號耕姊。

end &&?

2桶唐、 delimiter &&

create event t3

on schedule every 10 second

starts curdate() +interval 1 minute

ends '2017-03-21 21:50:00'? //可以精確到秒數(shù)

do

begin

insert into test(number) values(number+1);

end

&&

修改:

alter event et....? //打法和創(chuàng)建一樣

alter event et disable; // 事件關閉

alter event et enable; //事件再次開啟

alter event et rename to et1;? //事件改名

刪除事件:

drop event if exists et;

觸發(fā)器操作:

一茉兰、創(chuàng)建觸發(fā)器(標準):

create triggerigger_name trigger_time trigger_event on tbl_name for each row trigger_stmt

//trigger_time 有兩個選項分別是 before 和 after 表示觸發(fā)器被觸發(fā)的時刻

// trigger_event指定激活觸發(fā)器的語句的種類:insert delete update

// trigger_body 可使用begin..end 復合語句結(jié)構

create trigger t after insert on t1 for each row set @str='one customer added!';

刪除:

drop trigger [if exists] trugger_name;

二尤泽、insert觸發(fā)器(詳解):

//也可以被load data觸發(fā) 均表示新增數(shù)據(jù)

create trigger insert_trigger after insert on customers for each row set @str=new.id;

//往t2插入數(shù)據(jù)的時候往對應的t1表中增加人數(shù)

delimiter &&

create trigger tr1 after insert

on t2 for each row

begin

declare a int;

set a=(select count from t1 where sno=new.sno);

update t1 set count=a+1 where sno=new.sno;

end &&?

三、delete和update

//update和delete觸發(fā)器寫法于insert大同小異 在trigger_time和trigger_event上有所不同

并且在運用old和new臨時表的不同

//old上保存已刪除的數(shù)據(jù)記錄? new保存即將更新的數(shù)據(jù)规脸,包括insert和update

當涉及自身表的更新的時候 只能使用before update觸發(fā)器 而 after觸發(fā)器不被允許

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坯约,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子莫鸭,更是在濱河造成了極大的恐慌闹丐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件被因,死亡現(xiàn)場離奇詭異卿拴,居然都是意外死亡滥玷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門巍棱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛋欣,你說我怎么就攤上這事航徙。” “怎么了陷虎?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵到踏,是天一觀的道長。 經(jīng)常有香客問我尚猿,道長窝稿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任凿掂,我火速辦了婚禮伴榔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庄萎。我一直安慰自己踪少,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布碌奉。 她就那樣靜靜地躺著跨晴,像睡著了一般挚躯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上集漾,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音砸脊,去河邊找鬼具篇。 笑死,一個胖子當著我的面吹牛凌埂,可吹牛的內(nèi)容都是我干的栽连。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侨舆,長吁一口氣:“原來是場噩夢啊……” “哼秒紧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挨下,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤熔恢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后臭笆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叙淌,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡秤掌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹰霍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闻鉴。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茂洒,靈堂內(nèi)的尸體忽然破棺而出孟岛,到底是詐尸還是另有隱情,我是刑警寧澤督勺,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布渠羞,位于F島的核電站,受9級特大地震影響智哀,放射性物質(zhì)發(fā)生泄漏次询。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一瓷叫、第九天 我趴在偏房一處隱蔽的房頂上張望屯吊。 院中可真熱鬧,春花似錦摹菠、人聲如沸雌芽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽世落。三九已至,卻和暖如春糟需,著一層夾襖步出監(jiān)牢的瞬間屉佳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工洲押, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留武花,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓杈帐,卻偏偏與公主長得像体箕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挑童,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法累铅,類相關的語法,內(nèi)部類的語法站叼,繼承相關的語法娃兽,異常的語法,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,811評論 0 11
  • 6月18號尽楔,我去上海聽了一場行動派主辦的零極限公開課投储。那里面提了七個工具第练。第一個工具是草莓,主要功效是減肥玛荞。如果不...
    吳黃龍本人閱讀 4,216評論 0 6
  • 今天過九點才起娇掏,躺在床上腰酸背不痛,懷疑時姨媽要來了勋眯。最近食欲特別好婴梧,點了一杯豆?jié){,五塊錢的餛飩凡恍,最后又買了原味飯...
    疏瘦閱讀 387評論 0 0
  • 股指重新站上了3400點,情緒上明顯發(fā)生了變化,上周市場還有恐慌當中,本周連漲兩天都開始興奮起來了,之前我們...
    子曼股市資訊閱讀 114評論 0 0