groovy怎样从sql语句中截取表名_Mysql和SQL
基本概念
1.數(shù)據(jù)庫(kù)DataBase簡(jiǎn)稱:DB
2.什么數(shù)據(jù)庫(kù)?——用于存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。存儲(chǔ)過(guò)程是一個(gè)預(yù)編譯的SQL語(yǔ)句,優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì),就是說(shuō)只需創(chuàng)建一次,以后在該程序中就可以調(diào)用多次。
3.數(shù)據(jù)庫(kù)的特點(diǎn):持久化存儲(chǔ)數(shù)據(jù)。數(shù)據(jù)庫(kù)就是一個(gè)文件夾系統(tǒng)
MySQL服務(wù)啟動(dòng)
1.?手動(dòng):管理——服務(wù)——手動(dòng)關(guān)閉和開(kāi)啟。
2.cmd-->services.msc打開(kāi)服務(wù)的窗口
3.使用管理員打開(kāi)cmd
net start mysql:啟動(dòng)mysql的服務(wù)
net stop mysql:關(guān)閉mysql服務(wù)
MySQL登錄
1.mysql-uroot-p密碼
2.mysql-hip-uroot-p連接目標(biāo)的密碼
MySQL退出
1.exit(退出)
2.quit(辭職、退出)
索引的作用?它的優(yōu)點(diǎn)缺點(diǎn)是什么?
索引在數(shù)據(jù)庫(kù)的搜索時(shí)可以加速對(duì)數(shù)據(jù)的檢索。類似與現(xiàn)實(shí)生活中書(shū)的目錄,缺點(diǎn)是它減慢了數(shù)據(jù)錄入的速度,同時(shí)也增加了數(shù)據(jù)庫(kù)的尺寸大小。
在數(shù)據(jù)庫(kù)中查詢語(yǔ)句速度很慢,如何優(yōu)化?
1.建索引2.減少表之間的關(guān)聯(lián) 3.優(yōu)化sql,盡量用PreparedStatement來(lái)查詢,不要用Statement
索引類型有哪些?B-tree :b+樹(shù)、b-樹(shù)——葉子節(jié)點(diǎn)中的數(shù)據(jù)索引、二叉樹(shù),紅黑樹(shù)、Hash表
什么是事務(wù)?
事務(wù)就是被綁定在一起的SQL語(yǔ)句分組,有原子性,一致性,隔離性和持久性。
怎么驗(yàn)證MySQL的索引是否滿足需求
explain語(yǔ)法:explain select*from table where type=1。
數(shù)據(jù)庫(kù)的事務(wù)隔離
MySQL的事務(wù)隔離是在MySQL.ini配置文件最后添加:transaction-isolation=REPEATABLE-READ
可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。
Read-uncommitted:未提交讀,最低隔離級(jí)別、事務(wù)未提交前,就可被其他事務(wù)?生了幻覺(jué)。發(fā)生幻讀的原因也是另外一個(gè)事務(wù)新增或者刪除或者修改了第一個(gè)事務(wù)結(jié)果集里面的數(shù)據(jù),同一個(gè)記錄的數(shù)據(jù)內(nèi)容被修改了,所有數(shù)據(jù)行的記錄就變多或者變少了。
視圖:是一種虛擬的表,具有和物理表相同的功能。優(yōu)點(diǎn):對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),因?yàn)橐晥D可以有選擇性的選取數(shù)據(jù)庫(kù)里的一部分。
Oracle和Mysql的區(qū)別?
1)庫(kù)函數(shù)不同。
2)Oracle是用表空間來(lái)管理的,Mysql不是。
Oracle語(yǔ)句分三類:DDL、DML、DCL。DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)言,包括:Create語(yǔ)句:可以創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)的一些對(duì)象。Drop語(yǔ)句:可以刪除數(shù)據(jù)表、索引、觸發(fā)程序、條件約束以及數(shù)據(jù)表的權(quán)限等。Alter語(yǔ)句:修改數(shù)據(jù)表定義及屬性。Truncate語(yǔ)句:刪除表中的所有記錄,包括所有空間分配的記錄被刪除。DML(Data Manipulation Language)數(shù)據(jù)操控語(yǔ)言,包括:Insert語(yǔ)句:向數(shù)據(jù)表張插入一條記錄。Delete語(yǔ)句:刪除數(shù)據(jù)表中的一條或多條記錄,也可以刪除數(shù)據(jù)表中的所有記錄,但是它的操作對(duì)象仍是記錄。Update語(yǔ)句:用于修改已存在表中的記錄的內(nèi)容。DCL(Data Control Language)數(shù)據(jù)庫(kù)控制語(yǔ)言,包括:Grant語(yǔ)句:允許對(duì)象的創(chuàng)建者給某用戶或某組或所有用戶(PUBLIC)某些特定的權(quán)限。Revoke語(yǔ)句:可以廢除某用戶或某組或所有用戶訪問(wèn)權(quán)限
數(shù)據(jù)庫(kù)三范式是什么?
第一范式:列不可再分第二范式:行可以唯一區(qū)分,主鍵約束第三范式:三大范式是一級(jí)一級(jí)依賴的
什么是SQL?
Structured Query Language:結(jié)構(gòu)化查詢語(yǔ)言,定義了操作所有關(guān)系型數(shù)據(jù)庫(kù)的規(guī)則。每一種數(shù)據(jù)庫(kù)操作的方式存在不一樣的地方,稱為“方言”。Mysql,oracle,SQLserver, DB2
都是關(guān)系型數(shù)據(jù)庫(kù)。
SQL語(yǔ)句單行或多行書(shū)寫,以分號(hào)結(jié)尾。MySQL數(shù)據(jù)庫(kù)的SQL語(yǔ)句不區(qū)分大小寫,關(guān)鍵字建議使用大寫。單行注釋:--??注釋內(nèi)容或#注釋內(nèi)容(mysql特有),多行注釋:/*注釋*/
SQL分類
1) Data Definition Language (DDL 數(shù)據(jù)定義語(yǔ)言) 如:建庫(kù),建表 關(guān)鍵字:create,drop,alter等
2) Data Manipulation Language(DML 數(shù)據(jù)操縱語(yǔ)言),如:對(duì)表中的記錄操作增刪改 關(guān)鍵字:insert,delete,update等
3) Data Query Language(DQL 數(shù)據(jù)查詢語(yǔ)言),如:對(duì)表中的查詢操作 關(guān)鍵字:select,where等
4) Data Control Language(DCL 數(shù)據(jù)控制語(yǔ)言),如:對(duì)用戶權(quán)限的設(shè)置。關(guān)鍵字:GRANT,REVOKE等
DDL:操作數(shù)據(jù)庫(kù)、表——CRUD
1.C(Create):創(chuàng)建
創(chuàng)建數(shù)據(jù)庫(kù):
create database數(shù)據(jù)庫(kù)名稱;
創(chuàng)建數(shù)據(jù)庫(kù),判斷不存在,再創(chuàng)建:
create database if not exists數(shù)據(jù)庫(kù)名稱;
創(chuàng)建數(shù)據(jù)庫(kù),并指定字符集
create database數(shù)據(jù)庫(kù)名稱character set字符集名;
練習(xí):創(chuàng)建db4數(shù)據(jù)庫(kù),判斷是否存在,并制定字符集為gbk
create database if not exists db4 character set gbk;
2.R(Retrieve):查詢
*查詢所有數(shù)據(jù)庫(kù)的名稱:
show databases;
*查詢某個(gè)數(shù)據(jù)庫(kù)的字符集:查詢某個(gè)數(shù)據(jù)庫(kù)的創(chuàng)建語(yǔ)句
show create database數(shù)據(jù)庫(kù)名稱;
3.U(Update):修改
*修改數(shù)據(jù)庫(kù)的字符集
alter database數(shù)據(jù)庫(kù)名稱character set字符集名稱;
4.D(Delete):刪除
刪除數(shù)據(jù)庫(kù)
drop database數(shù)據(jù)庫(kù)名稱;
判斷數(shù)據(jù)庫(kù)存在,存在再刪除
drop database if exists數(shù)據(jù)庫(kù)名稱;
5.使用數(shù)據(jù)庫(kù)
*查詢當(dāng)前正在使用的數(shù)據(jù)庫(kù)名稱
*select database();
*使用數(shù)據(jù)庫(kù)
*use數(shù)據(jù)庫(kù)名稱;
2.DCL操作表
1.C(Create):創(chuàng)建
1.語(yǔ)法:
create table表名(
列名1數(shù)據(jù)類型1,
列名2數(shù)據(jù)類型2,
列名n數(shù)據(jù)類型n
);
*注意:最后一列,不需要加逗號(hào)(,)
*數(shù)據(jù)庫(kù)類型:
1.int:整數(shù)類型
age int,
2.double:小數(shù)類型
score double(5,2)
3.date:日期,只包含年月日,yyyy-MM-dd
4.datetime:日期,包含年月日時(shí)分秒yyyy-MM-dd HH:mm:ss
5.timestamp:時(shí)間錯(cuò)類型包含年月日時(shí)分秒yyyy-MM-dd HH:mm:ss
如果將來(lái)不給這個(gè)字段賦值,或賦值為null,則默認(rèn)使用當(dāng)前的系統(tǒng)時(shí)間,來(lái)自動(dòng)賦值
6.varchar:字符串
*name varchar(20):姓名最大20個(gè)字符
*zhangsan 8個(gè)字符張三2個(gè)字符
*創(chuàng)建表
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
*復(fù)制表:
*create table表名like被復(fù)制的表名;
2.R(Retrieve):查詢
*查詢某個(gè)數(shù)據(jù)庫(kù)中所有的表名稱
*show tables;
*查詢表結(jié)構(gòu)
*desc表名;
3.U(Update):修改
1.修改表名
alter table表名rename to新的表名;
2.修改表的字符集
alter table表名character set字符集名稱;
3.添加一列
alter table表名add列名數(shù)據(jù)類型;
4.修改列名稱類型
alter table表名change列名新列別新數(shù)據(jù)類型;
alter table表名modify列名新數(shù)據(jù)類型;
5.刪除列
alter table表名drop列名;
4.D(Delete):刪除
*drop table表名;
*drop table if exists表名;
*客戶端圖形化工具:SQLYog
DML:增刪改表中數(shù)據(jù)
1.添加數(shù)據(jù):
*語(yǔ)法:
*insert into表名(列名1,列名2,...列名n)values(值1,值2,...值n);
*注意:
1.列名和值要一一對(duì)應(yīng)。
2.如果表名后,不定義列名,則默認(rèn)給所有列添加值
insert into表名values(值1,值2,...值n);
3.除了數(shù)字類型,其他類型需要使用引號(hào)(單雙都可以)引起來(lái)
2.刪除數(shù)據(jù):
*語(yǔ)法:
*delete from表名[where條件]
*注意:
1.如果不加條件,則刪除表中所有記錄。
2.如果要?jiǎng)h除所有記錄
1.delete from表名;--不推薦使用。有多少條記錄就會(huì)執(zhí)行多少次刪除操作
2.TRUNCATE TABLE表名;--推薦使用,效率更高先刪除表,然后再創(chuàng)建一張一樣的表。
3.修改數(shù)據(jù):
*語(yǔ)法:
*update表名set列名1=值1,列名2=值2,...[where條件];
*注意:
1.如果不加任何條件,則會(huì)將表中所有記錄全部修改。
##DQL:查詢表中的記錄
*select*from表名;
1.語(yǔ)法:
select
字段列表
from
表名列表
where
條件列表
group by
分組字段
having
分組之后的條件
order by
排序
limit
分頁(yè)限定
2.基礎(chǔ)查詢
1.多個(gè)字段的查詢
select字段名1,字段名2...from表名;
*注意:
*如果查詢所有字段,則可以使用*來(lái)替代字段列表。
2.去除重復(fù):
*distinct
3.計(jì)算列
*一般可以使用四則運(yùn)算計(jì)算一些列的值。(一般只會(huì)進(jìn)行數(shù)值型的計(jì)算)
*ifnull(表達(dá)式1,表達(dá)式2):null參與的運(yùn)算,計(jì)算結(jié)果都為null
*表達(dá)式1:哪個(gè)字段需要判斷是否為null
*如果該字段為null后的替換值。
4.起別名:
*as:as也可以省略
3.條件查詢
1.where子句后跟條件
2.運(yùn)算符
*>、=、=、<>
*BETWEEN...AND
*IN(集合)
*LIKE:模糊查詢
*占位符:
*_:單個(gè)任意字符
*%:多個(gè)任意字符
*IS NULL
*and或&&
*or或||
*not或!
--查詢年齡大于20歲
SELECT*FROM student WHERE age>20;
SELECT*FROM student WHERE age>=20;
--查詢年齡等于20歲
SELECT*FROM student WHERE age=20;
--查詢年齡不等于20歲
SELECT*FROM student WHERE age!=20;
SELECT*FROM student WHERE age<>20;
--查詢年齡大于等于20小于等于30
SELECT*FROM student WHERE age>=20&&age<=30;
SELECT*FROM student WHERE age>=20 AND age<=30;
SELECT*FROM student WHERE age BETWEEN 20 AND 30;
--查詢年齡22歲,18歲,25歲的信息
SELECT*FROM student WHERE age=22 OR age=18 OR age=25
SELECT*FROM student WHERE age IN(22,18,25);
--查詢英語(yǔ)成績(jī)?yōu)閚ull
SELECT*FROM student WHERE english=NULL;--不對(duì)的。null值不能使用=(!=)判斷
SELECT*FROM student WHERE english IS NULL;
--查詢英語(yǔ)成績(jī)不為null
SELECT*FROM student WHERE english IS NOT NULL;
--查詢姓馬的有哪些?like
SELECT*FROM student WHERE NAME LIKE'馬%';
--查詢姓名第二個(gè)字是化的人
SELECT*FROM student WHERE NAME LIKE"_化%";
--查詢姓名是3個(gè)字的人
SELECT*FROM student WHERE NAME LIKE'___';
--查詢姓名中包含德的人
SELECT*FROM student WHERE NAME LIKE'%德%';
查詢緩存(了解):MySQL拿到一個(gè)查詢請(qǐng)求后→會(huì)先到查詢緩存看看之前是不是執(zhí)行過(guò)這條語(yǔ)句→命中就返回緩存的value。【他跟Redis一樣,只要是你之前執(zhí)行過(guò)的語(yǔ)句,都會(huì)在內(nèi)存里面用key-value形式存儲(chǔ)著。緩存在MySQL8.0之后就取消了——查詢的緩存容易被清空消失(原因)】?
MySQL的內(nèi)連接、左連接、右連接有什么區(qū)別?
內(nèi)連接:inner join;左連接:left join;右連接:right join。
內(nèi)連接是把匹配的關(guān)聯(lián)數(shù)據(jù)顯示出來(lái);左連接是把表全部顯示出來(lái),右邊的表顯示出符合條件的數(shù)據(jù)
MySQL索引是怎么實(shí)現(xiàn)的?
索引是滿足某種特定查找算法的數(shù)據(jù)結(jié)構(gòu),而這些數(shù)據(jù)結(jié)構(gòu)會(huì)以某種方式指向數(shù)據(jù),從而實(shí)現(xiàn)高效查找數(shù)據(jù)。不同的數(shù)據(jù)引擎實(shí)現(xiàn)有所不同。
MySQL中的索引是B+樹(shù)實(shí)現(xiàn)的,B+樹(shù)的搜索效率,可以到達(dá)二分法的性能,找到數(shù)據(jù)區(qū)域之后就找到了完整的數(shù)據(jù)結(jié)構(gòu)了,所有索引的性能也是更好的。
MySQL常用的引擎?
InnoDB引擎:InnoDB引擎提供了對(duì)數(shù)據(jù)庫(kù)acid事務(wù)的支持,并且還提供了行級(jí)鎖和外鍵的約束,它的設(shè)計(jì)的目標(biāo)就是處理大數(shù)據(jù)容量的數(shù)據(jù)庫(kù)系統(tǒng)。MySQL運(yùn)行的時(shí)候,InnoDB會(huì)在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引。但是該引擎是不支持全文搜索,同時(shí)啟動(dòng)也比較的慢,它是不會(huì)保存表的行數(shù)的,所以當(dāng)進(jìn)行select count(*)from table指令的時(shí)候,需要進(jìn)行掃描全表。由于鎖的粒度小,寫操作是不會(huì)鎖定全表的,所以在并發(fā)度較高的場(chǎng)景下使用會(huì)提升效率的。
MyIASM引擎:MySQL的默認(rèn)引擎,但不提供事務(wù)的支持,也不支持行級(jí)鎖和外鍵。因此當(dāng)執(zhí)行插入和更新語(yǔ)句時(shí),即執(zhí)行寫操作的時(shí)候需要鎖定這個(gè)表,所以會(huì)導(dǎo)致效率會(huì)降低。不過(guò)和InnoDB不同的是,MyIASM引擎是保存了表的行數(shù),于是當(dāng)進(jìn)行select count(*)from table語(yǔ)句時(shí),可以直接的讀取已經(jīng)保存的值而不需要進(jìn)行掃描全表。所以,如果表的讀操作遠(yuǎn)遠(yuǎn)多于寫操作時(shí),并且不需要事務(wù)的支持的,可以將MyIASM作為數(shù)據(jù)庫(kù)引擎的首選。
什么是鎖?
鎖:在所以的DBMS中,鎖是實(shí)現(xiàn)事務(wù)的關(guān)鍵,鎖可以保證事務(wù)的完整性和并發(fā)性。
MySQL的行鎖和表鎖、樂(lè)觀鎖和悲觀鎖
MyISAM只支持表鎖,InnoDB支持表鎖和行鎖,默認(rèn)為行鎖。
表級(jí)鎖:開(kāi)銷小,加鎖快,不會(huì)出現(xiàn)死鎖。鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)量最低。
行級(jí)鎖:開(kāi)銷大,加鎖慢,會(huì)出現(xiàn)死鎖。鎖力度小,發(fā)生鎖沖突的概率小,并發(fā)度最高。
樂(lè)觀鎖:每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在提交更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù)。
悲觀鎖:每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)阻止,直到這個(gè)鎖被釋放。
數(shù)據(jù)庫(kù)的樂(lè)觀鎖需要自己實(shí)現(xiàn),在表里面添加一個(gè)version字段,每次修改成功值加1,這樣每次修改的時(shí)候先對(duì)比一下,自己擁有的version和數(shù)據(jù)庫(kù)現(xiàn)在的version是否一致,如果不一致就不修改,這樣就實(shí)現(xiàn)了樂(lè)觀鎖。
MySQL問(wèn)題排查都有哪些手段
使用show processlist命令查看當(dāng)前所有連接信息。
使用explain命令查詢SQL語(yǔ)句執(zhí)行計(jì)劃。
開(kāi)啟慢查詢?nèi)罩?#xff0c;查看慢查詢的SQL。
總結(jié)
以上是生活随笔為你收集整理的groovy怎样从sql语句中截取表名_Mysql和SQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 强险最多赔多少钱啊?
- 下一篇: 人民币一套多少钱啊?