最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
MySQl簡(jiǎn)單命令講義

下文內(nèi)容主要給大家?guī)?lái)MySQL簡(jiǎn)單命令講義,這里所講到的知識(shí),與書(shū)籍略有不同,都是創(chuàng)新互聯(lián)專業(yè)技術(shù)人員在與用戶接觸過(guò)程中,總結(jié)出來(lái)的,具有一定的經(jīng)驗(yàn)分享價(jià)值,希望給廣大讀者帶來(lái)幫助。

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),橋東網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:橋東等地區(qū)。橋東做網(wǎng)站價(jià)格咨詢:028-86922220

SQL (結(jié)構(gòu)化 Structured 查詢 Query 語(yǔ)言 Language)
分類
DDL(數(shù)據(jù)定義語(yǔ)言) 表的定義、用戶的定義...   create drop alter
DML(數(shù)據(jù)操控語(yǔ)言) 對(duì)數(shù)據(jù)的增加、修改、刪除、查詢  insert update delete select
DCL(數(shù)據(jù)控制語(yǔ)言) grant(授權(quán)) revoke(回收)

DML

    insert into 表 (列...) values (值...);
    insert into 表 (列...) values (值...), (值...)...
    insert into 表1 (列...) select 列... from 表2
    update 表 set 列=新值, ...
    update 表 set 列=新值, ... where 條件
    delete from 表;
    delete from 表 where 條件
    select 列... from 表 
                inner|left join 表 on 連接條件
                where 條件
                group by 列... having 條件
                order by 列 asc|desc
                limit n, m

子查詢 (sub query)

求最高工資的員工信息
select max(sal),e.* from emp e; -- 會(huì)報(bào)錯(cuò)

select max(sal) from emp e;
-- 最大值 一行記錄 , 但名字有兩個(gè)

情況1:把子查詢當(dāng)做一個(gè)值

分解問(wèn)題:

select max(sal) from emp; --> 第一步:5000 把它看做一個(gè)值
select * from emp where sal = 5000; --> 第二步:寫(xiě)主查詢語(yǔ)句 
select * from emp where sal = (select max(sal) from emp); --> 第三步:替換

MySQl簡(jiǎn)單命令講義

情況2:把子查詢當(dāng)做一張表

每個(gè)部門(mén)的最高工資的員工

第一步:按部門(mén)分組
(select  max(sal) msal, deptno  from emp group by deptno) a
// 生成了臨時(shí)表 a, 其中有兩列: msal, deptno

第二步: 把上面的查詢結(jié)果看做一張臨時(shí)表,它可以與其他表之間做連接操作
select * from emp b inner join a on b.deptno=a.deptno and b.sal = a.msal;

第三步: 把子查詢代入
select * from emp b inner join 
    (select  max(sal) msal, deptno  from emp group by deptno) a 
    on b.deptno=a.deptno and b.sal = a.msal;

MySQl簡(jiǎn)單命令講義

case when

可以配合select工作, 把一列的取值根據(jù)不同的條件進(jìn)行翻譯
類似于 java 中的if else if
語(yǔ)法:

case
   when 條件1 then 結(jié)果1
   when 條件2 then 結(jié)果2
   ...
   else 結(jié)果n
end

2000以下顯示低工資,2000~3000顯示中等,3000以上顯示高工資

select empno, ename, sal, 
case 
    when sal <= 2000 then '低工資'
    when sal >2000 and sal <=3000  then '中等工資'
    else '高工資'
end 工資級(jí)別  from emp;

MySQl簡(jiǎn)單命令講義

dcl (了解)

grant 授權(quán)
revoke 回收權(quán)限

創(chuàng)建用戶

create user 用戶名 identified by '密碼';

MySQl簡(jiǎn)單命令講義
授權(quán)語(yǔ)法:

grant 權(quán)限 to 用戶名;

例如:把查詢test庫(kù)中所有表的查詢權(quán)限授權(quán)給user1
grant select on test.* to tuser;

MySQl簡(jiǎn)單命令講義

如果不給權(quán)限,只能進(jìn)行登陸,不能進(jìn)行其他操作,例如查詢,插入.
例:
MySQl簡(jiǎn)單命令講義
回收權(quán)限

revoke 權(quán)限 from 用戶名;

例如:回收之前分配的權(quán)限:
revoke select on test.* from tuser;

事務(wù)和鎖

事務(wù)

transaction  事務(wù) : 把多條sql語(yǔ)句視為一個(gè)整體執(zhí)行,這些sql 要么都成功, 其中有一個(gè)失敗了,之前的操作也需要撤銷(xiāo)

兩個(gè)人同時(shí)操作一張表的同一條數(shù)據(jù)

中國(guó)銀行賬戶表 account
id        name       balance(余額)
1         張三       2000

建設(shè)銀行賬戶
id        name       balance(余額)
2         張三       3000

```java邏輯
張三轉(zhuǎn)賬
try {
begin;
update account set balance=balance+1000 where id = 2;

 // 出現(xiàn)異常
update account set balance=balance-1000 where id = 1; 
commit;

} catch( Exception e ) {
rollback;
}

mysql的事務(wù)控制
默認(rèn)情況下,是一條語(yǔ)句一個(gè)事務(wù)
要多條語(yǔ)句一個(gè)事務(wù),需要通過(guò) `begin` `commit` `rollback` 來(lái)控制事務(wù)

begin;  // 表示事務(wù)的起點(diǎn) 等價(jià)方式: `start transaction`
sql1
sql2
...
commit(提交,表示結(jié)果都將生效) 和 rollback(回滾,用來(lái)撤銷(xiāo)事務(wù)內(nèi)的更改) 表示事務(wù)的終點(diǎn)

TCL (事務(wù)控制語(yǔ)言)

## 鎖(了解)
```sql
客戶1                                                               客戶2
begin;                                                              begin;
update emp set sal = 4000 where empno = 7369;
                                                            update emp set ename = 'abc' where empno = 7369; // 被阻塞
                                                            直到超時(shí)為止

MySQl簡(jiǎn)單命令講義
InnoDB 行級(jí)鎖, 只要兩個(gè)客戶端更新的是不同的行,互不干擾
MyISAM 表鎖,是鎖住整個(gè)表

增刪改(insert update delete) 都會(huì)在行上加排他鎖(X鎖)
查詢可以加共享鎖 (S鎖)表示可以同時(shí)查詢,但其他人不能增刪改(insert update delete)

select * from 表 lock in share mode;  添加共享鎖-別人可以再加共享鎖,但不能再加排他鎖

查詢時(shí)加排他鎖

select * from 表 for update;   添加排他鎖, -別人不能再加共享鎖和排他鎖

mysql對(duì)查詢有特別的優(yōu)化:不用鎖也能實(shí)現(xiàn)并發(fā)訪問(wèn): 多版本并發(fā)訪問(wèn)(MVCC)

查詢

1   張三    8000 舊版本
                修改
                1   張三    7000
select * from 表 就是利用的多版本并發(fā)查詢, 好處:并發(fā)性高!

java.util.concurrent.CopyOnWriteArrayList  線程安全的ArrayList: 修改時(shí)會(huì)產(chǎn)生一個(gè)集合的副本,修改都是在副本上進(jìn)行,查詢查的是舊集合的內(nèi)容,所以查詢和修改可以并行執(zhí)行,等修改結(jié)束會(huì)用副本替換舊的內(nèi)容
線程安全的List: Vector 全部方法加鎖

事務(wù)隔離性(了解)

有不同的隔離級(jí)別,
隔離級(jí)別越低,并發(fā)性越好,但數(shù)據(jù)的一致性差
隔離級(jí)別越高,并發(fā)性差,但數(shù)據(jù)的一致性高
由低到高四種:
讀未提交 < 讀提交 < 可重復(fù)讀(mysql默認(rèn)) < 序列化讀

錯(cuò)誤的級(jí)別由高到低
臟讀 , 不可重復(fù)讀, 幻讀

臟讀(讀未提交)

7369的工資1000
事務(wù)1                                              事務(wù)2
begin                                              begin
修改7369的工資為8000
                                                   select  sal from emp where empno=7369;// 8000
rollback

將隔離級(jí)別提高到讀提交,可以避免臟讀

不可重復(fù)讀

一邊查詢,另一邊做update操作
一個(gè)事務(wù)內(nèi)多次查詢結(jié)果不一致

7369的工資1000
事務(wù)1                                              事務(wù)2
begin                                              begin
                                                   select sal from emp where empno=7369; // 1000
修改7369的工資為8000
commit;
                                                   select  sal from emp where empno=7369; // 8000

要避免臟讀、不可重復(fù)讀:將隔離級(jí)別提高到可重復(fù)讀隔離級(jí)別

幻讀

一邊查詢,另一邊做insert操作

事務(wù)1                                              事務(wù)2
begin                                              begin
查詢到10,20,30,40條記錄
                                                   insert 50號(hào)部門(mén)
                                                   commit
insert 50號(hào)部門(mén) 報(bào)錯(cuò),主鍵沖突

要避免臟讀、不可重復(fù)讀、幻讀:將隔離級(jí)別提高到序列化讀
所謂的序列化讀就是把多版本并發(fā)退化到鎖的并發(fā)控制:select語(yǔ)句上會(huì)被偷偷加上共享鎖

事務(wù)四特性 (ACID)

原子性 A 多個(gè)sql要作為一個(gè)整體運(yùn)行,不可分割
一致性 C 一個(gè)事務(wù)內(nèi)結(jié)果應(yīng)當(dāng)一致
隔離性 I
持久性 D 事務(wù)一旦提交,事務(wù)內(nèi)的修改就應(yīng)當(dāng)永久生效

其他sql總結(jié) (了解)

查看有哪些庫(kù):  show databases;
查看庫(kù)的創(chuàng)建語(yǔ)句: show create database 庫(kù)名;
使用庫(kù):       use 庫(kù)名;
查看有哪些表: show tables;
查看表結(jié)構(gòu):   desc 表名;
查看建表語(yǔ)句: show create table 表名;
\G 可以取代; 效果是把表行轉(zhuǎn)列
查看系統(tǒng)變量的值: select @@系統(tǒng)變量名;

select @@transaction_isolation;   // 查看事務(wù)隔離級(jí)別
select @@port;                    // 查看云服務(wù)器端口號(hào)
select @@character_set_server;   // 查看默認(rèn)字符集
select @@secure_file_priv;
...

show variables like 'character%';

對(duì)于以上關(guān)于MySQl簡(jiǎn)單命令講義,如果大家還有更多需要了解的可以持續(xù)關(guān)注我們創(chuàng)新互聯(lián)的行業(yè)推新,如需獲取專業(yè)解答,可在官網(wǎng)聯(lián)系售前售后的,希望該文章可給大家?guī)?lái)一定的知識(shí)更新。


名稱欄目:MySQl簡(jiǎn)單命令講義
網(wǎng)頁(yè)鏈接:http://fisionsoft.com.cn/article/pioces.html