日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql sql语句 入门_mysql(3)mysql的sql语句入门

發(fā)布時間:2023/12/10 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql sql语句 入门_mysql(3)mysql的sql语句入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.登錄mysql與退出mysql

登錄:mysql? -u賬號 -p密碼 -h主機地址 -P端口號? -e 執(zhí)行的sql語句; //密碼一般不直接寫出,回車后隱藏寫入 ,-h可以不寫默認是localhost

退出:quit,exit? ,ctrl+c

備注:參數可分為全局和會話,可修改與不可修改,全局需要加上global,例如 set?? global 參數 =值,會話級別只對當前會話有效, 例如set? 【session】? autocommit=1;中間可以省略session,例如需要全局的話需要 set? global autocommit=1;不能持久化,重啟后是默認值,全局設置對已經開啟了會話的不起作用,只會對以后連接的會話有效,查看可以使用show? 【global/session】 【variables 】 【like pattern】 變量名 來查看。

備注:dbms數據庫管理系統(tǒng) ,dba數據庫管理員, sql(ddl 表結構,dml增刪改 ,dql 查詢,dcl數據庫控制,tcl事物控制)

2.數據的導入與導出

1)數據的導入:source (運行在mysql下的命令)

select version();//查看當前數據庫版本;

create? database 數據庫名稱;//創(chuàng)建數據庫

show databases ; //顯示所有的數據庫,產看數據庫是否已經導入,也可以使用 show? databases like ‘’pattern’? 的形式,_代表一個字符,%匹配多個字符

use?? 剛剛創(chuàng)建的數據庫;

source? 需要導入的表(文件名);//導入表,假如是表,那么需要在使用use 后導入相應的庫。

show tables ;//顯示該庫下的表

desc?? 原表名(不是文件名);//顯示表的結構

select? *? from? 表名;? //查看表內容

load?? data? infile ‘~/data.txt’?? into table persons?? fields?enclosed? by? ‘”’??erminated? by ‘|’ ? lines???staring? by? ‘ ’? ? terminated? by ‘’?? ;//導入; fields字段處理可選項? enclosed? by :? 表鎖字內容包裹符,默認是‘’ ,空字符串;? terminated? by:? 表鎖字段的結束符 默認是‘\t’ ;escape? by:特殊符號處理 方式 ,默認是“\\” 反斜杠; lines處理? staring? by? 開始符,默認空字符串? terminated? by:結束字符,默認空字符串

2)數據庫的導出

mysqldump(mysql? bin中的命令)

mysqldump? 數據庫 ?? > 地址? -uroot?? -p ;//默認-h本機

3)導出表

mysqldump? 數據庫名? 表名1 ? 表名2 ? > ~/person.sql?? -uroot?? -p ;//參數: -d只導出數據表結構不導出數據,導出默認字符采用,latin1,按原文件導出,不會亂碼。

select? * into file? ‘~/data.txt’? fields?enclosed? by? ‘”’??erminated? by ‘|’ ? lines???staring? by? ‘ ’? ? terminated? by ‘’?? from? persons;//導出,需要保證該文件不存在;? select? */字段列表? into file? 文件路徑 from 數據源 ;fields字段處理可選項? enclosed? by :? 表鎖字內容包裹符,默認是‘’ ,空字符串;? terminated? by:? 表鎖字段的結束符 默認是‘\t’ ;escape? by:特殊符號處理 方式 ,默認是“\\” 反斜杠; lines處理? staring? by? 開始符,默認空字符串? terminated? by:結束字符,默認空字符串

3.數據庫及表的創(chuàng)建以及刪除及修改及表的復制及視圖

1)數據庫的創(chuàng)建

Create? database 數據庫名稱;//創(chuàng)建數據庫

create? database? 數據庫名稱? charset? utf8;//指定字符集

備注:

關鍵字需要使用'',例如create database? 'database'? charset utf8? ,表也遵循該規(guī)則;

使用中文數據庫名,在沒有設置字符集時,可能會亂碼,那么需要使用set names 設置字符集,設置后保存在數據庫中的名字可能看起來實際亂碼,但是那不叫亂碼,是以另外一種形式表示。

數據庫不可以更改名稱,只可以更改字符集和 校對集//alter? database? 數據庫? charset =utf8? collate? utf8_bin;

2)數據庫的刪除

drop ?database? 數據庫名;

備注:刪除不可逆

3)表的創(chuàng)建

int,bigint(長整型),varchar(動態(tài)分配空間,效率換取空間,適合用于不固定長度的地方), char(固定長度,空間換取效率),date(默認的格式%Y-%m-%d),datetime,time,timestamp(帶時區(qū)的概念),double(m,n)(有效長度m,小數點后n位),float(用法同double),decimal(精度較高,用于錢有關的事物),blob(存放二進制文件,很少使用,16k),mediumblob(16m),

longblob(最大4g ,數據庫能存儲的單元最大也是4g),clob(存放文本文件),text等。

unique(可以為空,可以修飾一個或者多個字段,不可重復,但是null可以存在一個或者多個,存在聯合,unique(a,b),兩個都相同則不同,在建立unique會先建立索引),primary? key(主鍵,每個表必須有且只有一個主鍵,無主鍵可以認為是無效的表,主鍵附帶索引,且不能為null,不可以重復,存在聯合主鍵,但是不建議使用,因為存在部分依賴的問題不滿足第二范式),not? null(不為空),foreign? key (外鍵,可以為null,可以修飾一個或者多個字段,可以是單一外鍵或者是聯合外鍵,會先建立索引,且外鍵對應字段的修飾類型需要一致,包括級聯模式(on? cascade),置空模式(set? null),嚴格模式,在導入數據的時候可以設置set?? foreign_key_checks=0來關閉外鍵約束,增加速率,導入后設置為1開啟,一般不建議使用外鍵,外鍵不好控制),constraint 約束名(給約束取名字,便于刪除等操作),on delete cascade (級聯刪除),on update cascade(級聯更新),auto_increment(當插入0或者null時,默認會自增,假如設置的值大于當前自增后的值,那么自增值會設置為當前值,在小于且不發(fā)生沖突的前提下能插入,自增值保持原來的值,在其他情況下次可能會發(fā)生主鍵沖突,解決主鍵沖突的辦法下面有,假如想為0,那么可以用update,一張表只能有一個增長在innodb中必須位于索引之上;自增多少有初始默認值,可以通過設置來解決,(show?? variables? like ‘auto_increment%’)? set auto_increment_increment=5;設置自增為5,但是第一次還是自增原來的值,假如是復合索引,那么也是聯合索引的第一列發(fā)生自增,且是先排序后自增,只有存在兩個復合索引都相同時才自增,必須是整型)。

備注:

默認的排序規(guī)則是字符編碼集_ci,這個編碼集表示不區(qū)分大小寫,倘若需要區(qū)分大小寫,show? collation會顯示所有的排序規(guī)則,通過collate設置,create?? table? a(name? varchar?? not? null?? unique?? charset?? utf8? collate? utf8_bin),cs ,bin結尾的是區(qū)分大小寫的;// show? collation;//查看所有的校對字符集;//查看當前數據庫的校對集:show? variables? like? ‘collation_database’

主鍵必須先刪除后才能添加;alter table 表名 drop? primary? key;//不需要寫名稱,因為一張表只能有一個主鍵

charset可以設置字符編碼集? (create?? table? a(name? varchar?? not? null?? unique?? charset?? utf8))//show variables? like? ‘字符集’ ;查看相應的設置;當前數據庫的字符集show? variables? like? ‘character_set_database’;

設置局部變量@xxx? (set? @age=1;?? select @age;)

int? bigint等占用字節(jié)是定的,int 4個字節(jié) ,bigint8個字節(jié),tinyint 1個字節(jié),smallint 2個字節(jié) ,mediumint? 3個字節(jié),例如int(3),3對設置的值在沒有超過相應的int.max都可以插入

--表示注釋

客戶端和服務端相關的3個字符集;‘character_set_client ;‘character_set_results,‘character_set_collection;可以通過set? names? 字符集來一起設置;三個需要保持一致,當然也可以在my.cnf文件中配置,default_character_set=字符集;

varchar和char在嚴格模式下不允許插入比當前數字長度長的字符,char會刪除尾部的空格,varchar不會刪除前后的空格,但是varchar字符長度去除尾部空格后剛剛好等于varchar定義的長度,那么會去除空格后插入,不會報錯,varchar 單行長度65535 個字節(jié),0用來代表false和true的,null 占用一個存儲長度,varchar的變長也會占用1-2個字節(jié)長度(長度小于或等于255是一個字節(jié),否則是2個字節(jié))來確定占用的存儲的實際長度,,text占用10個字節(jié)

外鍵產生對子表的約束作用,如果外鍵值在父表中找不到對應的項,那么就會失敗(在可以為null的情況下,可以為null),一般不建議使用外鍵,不好控制,外鍵存在首先要是innodb引擎,其他引擎無效,外鍵的字段類型需要完全與主鍵的類型一致,一張表中外鍵的取名不能重復,存在三種模式district嚴格模式, cascade級聯模式,set null 置空模式,假如not null,那么置空失敗,district(默認的,要保證相應的順序)// constraint? 外鍵名? foreign key (字段名) references? 父表(字段名) on delete? 模式 on update 模式;

對于text 與blob存在空洞的問題,也就是刪除,還是占用空間,一般需要使用optimize? table 來整理磁盤碎片,使用散列碼(例如md5)可以優(yōu)化該效率,保存的時候是散列碼,尋找的時候也轉換成散列碼(例如 where? text1=md5(repeat'xxxx')),這個很少用;

例如電話號碼使用bigint,ip使用inet_aton裝換為整數使用bigint保存,取出后轉換。

例如

create? table? if not? exists? emp? charset? utf8;

create? table? if not? exists? db.emp? charset? utf8;//在db數據庫創(chuàng)建? emp表

create table 表名(字段1? 修飾(寬度)...)

create? table? students (

sno? int? primary? key? auto_increment,

sname? varchar(10) not null,

sgander? char(1) defalut '男'? charset utf8,

sgrade int ? not null? comment? '分數', //comment?? 描述,在desc 中不會顯示 ,但是在show? create? table? name 中會顯示;

tno int? not null,

tbirth?? date not null,

constraint? students_tno_fk? foreign key(tno)? references?? teachers(tno) on? delete? cascade

)engine =innodb? default charset=utf8;

備注:int,bigint? 定義的寬度沒有實際的意義

create? table? teachers(

tno? int? primary? key? auto_increment,

tname? varchar(10) not null,

)engine =innodb? default charset=utf8;

create? table? employees(

eno? int? primary? key? auto_increment,

ename? varchar(10) not null,

)engine =innodb? default charset=utf8;

4)表的修改:

rename? table? 表名? to? 新表名;//更改表名

alter? table? 表名? ? auto_increment=值;//off 或者true? 0或者1

alter? table? 表名?? modify 字段名;//去掉自增修飾即可,

alter? table 表名?? drop? index? 索引名稱 ;//刪除唯一鍵 ? ,唯一鍵默認使用字段的名稱作為索引名

alter? table? 表名? add??? 字段名? 數據類型?? first /? after? 字段名? //first 在第一個? after 字段名 位于某字段名之后,默認加在末端

alter? table? employees add? age int ;//添加字段

alter table? employees? modify? age int ;//修改字段

alter? table employees drop? age;//刪除字段

alter? table? students? drop? foreign key?? students_tno_fk;//刪除外鍵

alter? table? 表名 change? 舊字段名? 新字段名 數據類型 位置(first /after 字段名);

alter? table? students? add? constraint? students_tno_fk? foreign key(tno)? references?? teachers(tno)on update? cascade? ? ? on? delete? cascade//添加級聯刪除與更新;

alter? table? 表名? character set? 字符集;//對以前插入的數據無效,只對之后插入的數據有效

alter? database? character set? 字符集;//對以前插入的數據無效,只對之后插入的數據有效

5)刪除表

drop? table?? if exists ?? 表名;//如果存在就刪除 ,假如沒有if exists 不存在就會報錯;

drop? table? 表名1,表名2.//多表刪除

6)視圖的創(chuàng)建和刪除

視圖的創(chuàng)建

備注:可以使用join創(chuàng)建多表視圖,多表視圖不可以增刪,但是可以改,還需要有對應的字段,沒有的不能使用,例如視圖的id是不存在的,

create? view? students_view? as? select? *? from? studens;//對視圖中的數據更改會對students的表的元數據更改;

視圖的刪除

drop? view?? if? exists? students_view;//如果視圖存在就刪除

視圖的修改

alter?? view? 視圖名 as? select ...;

備注:視圖的作用保證數據的安全,隱藏無關數據,刪除視圖不會對原視圖造成影響,在單表中的增刪改,都有影響,多表中的改有影響;

備注:如果在select語句中包含count ,max, avg ,min,sum時,且順序要比外表的查詢語句靠右需要使用 temptable? ,其他情況下默認即可 //? create? algorithm=指定算法? view 視圖 as select..;

7)表的復制

create? table? students_copy as select? *? from? studens;//復制的表和原students沒有任何的關系;

create? table? 表名 like?? 表名 ;//表結構的復制;

8)索引的創(chuàng)建和刪除(主要用于百萬級的數據,或者用在不變化的數據(較多),不然沒有太大的意義)(詳細見優(yōu)化)

創(chuàng)建:

create? index? students_index? on? students(sname);//在students的sname上添加上一個索引;

create? unique? index? students_index? on? students(sname);//不能重復的索引;

刪除

drop? index? students_index? on? students;//刪除索引,在oracle中 on? students可以不寫;

備注:mysql 所使用的是b +tree的數據結構 (平衡樹(左旋,右旋),插入相對較慢一些,查詢很快)

4.數據庫及表的查詢操作及表中的數據

4.1)數據庫的查詢

show databases? ;? 查詢所有的表

show databases like ‘%es%’ ;//模糊查找過濾;

select? database();? 查看當前處于哪個數據庫;

4.2)表

use? test ;//使用庫

show tables ;//顯示該庫下的所有表

show? tables? like? ‘%es%’;//在數據庫test下模糊查找具有es字段的表;

show? create ?table 表名 ;//查看怎么創(chuàng)建的表

4.3)select? 語句

4.3.1)? +,-,*,/,%

select?? sgrade*2? as '2倍分'? ,sname from? students;//as 別名? ,+,-,/,%類似

4.3.2)> ,< ,>= , <=, != ,<>

select?? sgrade>90? as '是否大于90分,0表示false,1表示true'? ,sname from? students?? where sgrade >60;//在大于60分的同總共大于90的同學,< ,>= , <=, != ,<>類似

4.3.3)between 。。。and。。。

select?? count(*),sname from? students? where? sgrade? between? 80 and 100;//80 到100之間的人數

4.3.4)max,min ,sum ,count ,avg,distinct

select?? count(*),sname from? students;//這些函數不能用在where后面,*包括null,用字段不包括null,只能在分組的情況下能和其他非這些的字段匹配使用,否則不能匹配使用;

select??? count( distinct sname ) from students;

select???? distinct? sname ,sgrade? from??students ;//去和sname和sgrade兩個都重復的結果,distinct的位置不能變

4.3.5)str_to_date,date_format ,format,adddate(加日期) ,subdate(減日期),addtime(加時間),subtime(減時間)

Mysql的日期格式 %Y:年,%m:月,%d:日,%H:時,%i:分,%s:秒;備注:區(qū)分大小寫

Mysql的默認格式:%Y- %m-%d?? %H:時,%i:分,%s:秒? ,字符串會相應的轉型

select? name??? from students? where? sbirth>'2018-1-1';//自動轉型,int等寫成'6'也會自動轉型等, 出生晚于2018-1-1的人

select? name??? from students? where? sbirth>str_to_date('1-1-2018','%m-%d-%Y');//糾正字符格式;

select?? date_format(birth,'%m-%d-%Y') where? sbirth>str_to_date('1-1-2018','%m-%d-%Y');//糾正格式,按指定格式輸出; format處理數字的;

4.3.6)trim,upper,lower,substr(被處理字段,下標,長度),length,round,rand, ifnull(字段,如果為空的默認值);

select? upper(name) ?? from students? where? sbirth>'2018-1-1';//小寫變大寫 ,上述其他用法類似

4.3.7)order by 字段名 asc /desc

select?? sgrade,sname from? students? order? by sgrade ;//默認升序asc

select?? sgrade,sname from? students? order? by ?sgrade asc;//升序

select?? sgrade,sname from? students? order? by ?sgrade desc;//降序

select?? sgrade,sname from? students? order? by ?sgrade desc ,sname desc;//不同升序,相同降序

4.3.8)is null , in ,not ,like,regex(類似java),

select?? name? from? students? where? name is? null;//name為空的數據

select?? name? from? students? where? name is not? null ;//name? 不為空的數據

select?? name? from? students? where? name in (‘張三’,‘李四’);//找出是張三或者李四的人

select?? name? from? students? where? name not? in (‘張三’,‘李四’);//找出不是張三或者李四的人

select?? name? from? students? where? name like '%s_s%';//模糊查找,%表示0個或者多個字符,_表示一個字符

4.3.9)group? by?? having

select ? tno,? max(sgrade) from? students??? group? by? tno;//只能加分組字段(tno),其他字段不報錯,但是結果不對,然后還能使用count,max等組函數

select ? tno,? max(sgrade) from? students ?? where? tno !=1 ???? group? by? tno;//期初tno不等于1,后分組;

select? tno,? max(sgrade) from? students??where? tno !=1 ??? group? by? tno? having?? avg(sgrade)>80;//having后面能放 avg等字段;

select? tno,? max(sgrade) from? students??where? tno !=1 ??? group? by? tno? having?? avg(sgrade)>80?? order by desc ? limit1;//group by? having? orderby? limit的順序不能變

備注:? concat? 一個或者多個字符連接函數,with?? rollup;//任何一個小組都會統(tǒng)計,//select? c_id?? count(*)? from mytable? group by? age? with rolllup;

執(zhí)行順序:

from --where? --groupby--select--orderby

from----groupby--select--having--orderby

4.3.10)union(具有去重的作用,獲取的字段數必須一致(默認),假如不想去除重復? 使用union? all? order by 在聯合查詢中需要使用括號闊成一個整體才行,若要orderby 生效還需要使用limit搭配,limit使用最大值)

(select ? tno,? sgrade? from? students )union (select ? tno,? sgander? from? students );//連接顯示,也不會報錯。

4.3.11)password (),MD5(),encode(根據指定的字符串作為密碼加密),decode(根據指定的字符串作為密碼解密)

4.4)連接查詢

4.4.1)內連接//交集,條件都需要滿足才會顯示(一個重組的過程)

select?? s.name ,g.cls? from?? students s join grades g on s.sgrade between? g.gmin and g.gmax;//非等值連接

select?? s.name ,g.cls? from?? students s join grades g on? s.sgrade=g.sgrade;//等值連接

select?? s.name ,s.sname? from?? students s join students t on? s.tno=t.sno;//自連接

select?? s.name ,t.tname? from?? students s ? inner join teachers t on? s.tno=t.tno;//inner 可以省略,主要是便于閱讀,按left? right來判定連接

備注:還有一個交叉連接,沒有實際的意義?? cross? join == from? 表1,表2; 自然連接 natural? join? 根據字段匹配,沒有實際意義

4.4.2)外連接//左連接以左邊的表為基準,假如滿足右邊,則顯示左邊和右邊的重組,假如不滿足右邊,那么右邊為null(任何值與null運算都是null),

select?? s.name ,t.tname? from?? students s ? left? join teachers t on? s.tno=t.tno;//左外連接,左連接 join前面outer省略了

select?? s.name ,t.tname? from?? students s ? right? join teachers t on? s.tno=t.tno;//右外連接,右連接 join前面outer省略了

select?? s.name ,p.pname? from?? students? s? , persons p;//全連接,沒啥意義

4.4.3)多表連接

select?? s.name ,t.tname? from?? students s ? join teachers t on? s.tno=t.tno? join? grades g on?s.sgrade between? g.gmin and g.gmax ;

備注:先創(chuàng)建父表,再創(chuàng)建子表 ,先刪除子表在刪除子表, 插入數據先插父表,再插入子表

4.4.4)子連接

備注:還有 in? any? some? all 字段;? exists? 位于where之后 返回結構是0或者是1

select? 【select】 from? 【select】 where? 【selelct】//select返回的結果作為一個表或者一個值,不能放在limit中

select?? name?? from?? studens?? where? sgrade > select? avg(sgrade) from students;

select? s.sname ,(select? t.name from teachers t where s.tno=t.tno)? as tname from? students s;

4.4.5)limit

select ??sname,sgrade from? students? order by sgrade desc limit (pageNo-1)*pageSize,pageSize;//分頁僅適用于mysql

select?? sname? from? students order? by sgrade? desc limit 0,1;//0 ,可以省略,從1開始長度為1;、

4.4.6)now()//表示當前時刻,可以帶納秒now(6),最大6位,sysdate()//開始執(zhí)行該動作的時間? ,類似于可重復讀與不可重復讀的關系

4.4.7)case when...then..else...end或者case... when...then..else...end

select? sname ,case when sgrade>90 then '優(yōu)' when sgrade>80 then '良' else ‘加油’? end? as ‘段位’ ?from students;

select? sname ,case? tno? when?? 1 then '老師1' when 2 then '老師2' else ‘老師3’? end? as ‘老師’ ?from students;

4.4.8) 變量名

show variables??? like? ‘’//變量名的查看

select? @@變量名// 具體變量名的查看

set?? 變量名=xxx; //變量名的設置,會話級修改

set? global? 變量名=xxx; //全局修改,重新登錄才有效

5.增,刪,改

insert? into students (sname, sgrade...)? values('lili','90'...),...;//增 ,批量增加

insert? into?? stu1 select? * from stu;//將stu的插入stu1;

delete? from? students? where? id=1;//刪除

update?? students? set? sname =‘lili’ where id=2;//修改

update?? students? set? sname =‘lili’?? order? by? sal? limit 10;//修改前幾行,刪除也可以類似

6.數據庫引擎

查看所有的引擎:show engines;顯示yes表示當前支持的引擎,no表示不支持的引擎,需要安裝,默認的引擎回家defalut

innodb:服務器崩潰后自動恢復,acid兼容,支持提交,回滾等事務處理,支持級聯刪除和更新,行級鎖定,日志文件等,行鎖,支持高并發(fā),共享模式也是保存在三張表中,frm,..dir,..path分別是結構,數據,索引,多表空間存儲存在分表,結構frm文件,但是數據和索引保存在單獨的.idb文件中

memory:速度快,但是存于緩存中,不能持久化,表鎖

myisam:格式文件,數據文件,索引文件三張表組成,適用于查詢多,不適用增刪改多,表鎖

7.枚舉和集合

create? table? mytable (gender? enum(‘男’,‘女’));//enum 代表枚舉 ,用數字表示 ,可以使用gender +0 來計算;默認是嚴格模式,也必須是嚴格模式,只能插入枚舉中已經有的數據,最大65535個選項,占用一個字節(jié)來存儲,犧牲效率節(jié)省空間,從0開始;

create? table? mytable (sport? set(‘足球’,‘籃球’));//可以在set中多多選? 例如 insert into mytable values (‘足球,籃球’);也可以插入數組,規(guī)則是十進制轉換成2進制,1表示有,0表示沒有

8.對應關系

一對一:一張表的記錄對應另外一張表的一條記錄進行對象,反之亦然

一對多:一張表的一條記錄對應另一張表的多條記錄

多對多:一張表的一條記錄對應另一張表的多條記錄,反之亦然;

9.主鍵沖突

insert? into?? 表名 (字段名包含主鍵)? values (值列表)? on? duplicate? update 字段=新值;? //沖突更新

replace? into? 表名 (字段名包含主鍵) values (值列表) ;//查看是否存在? 存在就刪除后添加,不存在就添加

10.變量

select @變量名 ;//變量的定義 ,會話級別

set? @ 變量名:=值 ;//這里可以寫=,但是有些場合不能,因為=認為是==判斷

declare? 局部變量名 類型?? defalut? 默認值;//只能使用在 begin ...? end塊 中;

set? 局部變量名;//賦值

11.事務

acid//jdbc

可重復讀:發(fā)出數據后,發(fā)出的那一剎那,直至完成數據依舊保持在哪個時刻,就像now? 與sysdate

start? transaction ;

dml...

commit;(提交)//需要手動

備注:可以設置//set?? autocommit=off/0;設置后需要手動高的commit 和rollback,innodb是行鎖,在事務操作默認會升級為表鎖

start? transaction ;

dml....

rollback; (失敗后回滾)//需要手動

設置事務隔離級別

set?? global? transaction? isolation level read? commited;// read? uncommited? repeatable read? serializable

set autocommit? =off /on;省略了session,所有的ddl語句是不能回滾的,并且部分ddl語句會隱式提交,//oracle也是這樣

不全部回滾

start? transaction

語句..

savepoint? sp1;

語句

rollback to? sp1;回滾

12.數據庫表設計規(guī)范

1)有主鍵且原子不可再分;

2)所有的非主鍵完全依賴主鍵,而不是部分依賴主鍵,所有不能使用聯合主鍵;

3)非主鍵與主鍵不能存在傳遞性依賴;

備注:2),3)不一定要強制性實現,看實際情況。? 范式的作用主要是減少數據的冗余,但是一般來說會降低效率;后一范式必須滿足前一范式

13.觸發(fā)器

創(chuàng)建觸發(fā)器:

delimiter //? :以斜杠結束語句

create? trigger? 觸發(fā)器名稱? before/after(位置) insert(監(jiān)聽的事件) on 表名? for each row begin

insert? into?? test2? set a2=new.a1;//插入的時候執(zhí)行的語句

delete from? test3? where? a3=new.a1;//new 新值 old? 舊值(原來的值)

end//

select? triggers //查看觸發(fā)器;

show? create? trigger 觸發(fā)器名稱;//查看觸發(fā)過程;

select? * from?? information_schema.triggers?? where 條件;//查看觸發(fā)器信息

drop trigger? 觸發(fā)器名稱//刪除觸發(fā)器,觸發(fā)器不能修改,只能刪除后新建

備注:

一張表最多只能有6個觸發(fā)器,且只能有一種觸發(fā)時間的一種類型的觸發(fā)器,觸發(fā)器是總動觸發(fā)的

所有的觸發(fā)器都是在一張表中 information_schema.triggers,觸發(fā)器不能顯示或者映射的開始或者結束事務

14.分支結構

if?? 條件? then? 代碼? else 代碼? endif? //類似 if(條件,x,y)? ;

循環(huán)名稱: while? 判斷條件 do??? 代碼?? leave? /iterate ? 循環(huán)名稱 end while ; //leave 類似break? iterate類似continue

15.函數

create?? function? 函數名(參數) returns 數據類型-- 規(guī)定返回值類型

begin

函數體

返回值

end//作用于外部是一個延遲的過程

show? function status like? ‘’; //查看所有函數

show create? function 函數名;//查看創(chuàng)建語句

drop? function? 函數名; //函數只能先刪除后重建;

15存儲過程//一個沒有返回值的函數

create procedure 過程名稱 (參數)

begin

過程體

end

備注:過程沒有返回值 select不能訪問

show? procedure? status like? ‘’; //查看所有存儲過程

show create??procedure? 存儲過程名;//查看創(chuàng)建語句

drop? ?procedure? 存儲過程名; //只能先刪除后重建;

調用使用call? 存儲過程名;

備注:參數類型有3中 in 可以是值,out必須是變量,inout 必須是變量 //create?? procedure 過程名 (in? 形參名稱 數據類型 ,out?? 形參名稱 數據類型,inout? 形參名稱 數據類型),蒸鍋過程是滯后的,只有在內部完成之后,賦值才給傳入給外部的全局變量。

16.事件調度器

create?? event? 名稱 on? schedule? every? 5? second do?? 語句(insert... );//每個5s調度一次

show events;//查看調度器的狀態(tài)

show variables like ‘scheduler’;//查看調度器的狀態(tài) off 表示關閉;

alter? event 名稱? disable;//禁用調度器

drop event 調度器名稱;//刪除調度器;

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的mysql sql语句 入门_mysql(3)mysql的sql语句入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。