mysql 外键和事务_Mysql (五)事务和外键
一、 什么是事務(wù):簡單說,所謂事務(wù)就是一組操作,這組操作要么都成功執(zhí)行,要么都不執(zhí)行。
二、 事務(wù)的使用流程
1. 第一步:開啟事務(wù),start transaction;
2. 第二步:正常操作SQL語句,但是這些SQL語句被沒有真正更改數(shù)據(jù)庫的數(shù)據(jù)信息
3. 第三步:提交事務(wù),commit,當(dāng)提交事務(wù)后,SQL語句會被真正執(zhí)行,數(shù)據(jù)庫中的信息會被改變,注意如果要取消第二步的所有操作,那么可以使用rollback(回滾)語句
三、 事務(wù)的特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)
1. 原子性:一個事務(wù)中的所有操作,要么全部完成,要么全部不完成,不會結(jié)束在中間某個環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過一樣。
2. 一致性:數(shù)據(jù)在事務(wù)前后保持一致
3. 隔離性:某個事務(wù)的操作對其他事務(wù)不可見
4. 持久性:當(dāng)事務(wù)完成后,其影響應(yīng)該保留下來,不能撤銷
四、 事務(wù)使用的注意事項:存儲引擎必須是innodb,因為myisam不支持事務(wù)
create table account(
id int,
name char(10),
money int
);
insert into account values
(1,'張三',3000),
(2,'李四',3000);
update account set money = money - 500 where id = 1;
update account set money =money +500 where id =2;
start transaction; 開啟
update account set money = money - 500 where id = 1;
update account set money =money +500 where id =2;
commit;
五、 視圖
1. 定義:視圖是由查詢結(jié)果形成的一張?zhí)摂M表
2. 格式:create view 視圖名稱 as select語句;
create view v as select * from student where ssex ='男';
select * from department left join employee on department.did = employee.did;
select aname,id,age from (select employee.*,aname from department left join employee on department.did = employee.did) as a;
create view v2 as select * from department left join employee on department.did = employee.did; 不允許有重復(fù)字段,報錯
create view v2 as select employee.*,aname from department left join employee on department.did = employee.did;
select * from v2;
select * from v2 where did =1;
3. 什么時候用視圖:如果某個查詢結(jié)果出現(xiàn)的非常頻繁,也就是,要經(jīng)常拿這個查詢結(jié)果做子查詢
4. 視圖的作用
(1)簡化操作,不用進行多表查詢
(2)可以進行權(quán)限控制把表的權(quán)限封閉,但是開放相應(yīng)的視圖權(quán)限,視圖里只開放部分數(shù)據(jù)列。比如我們的goods商品表,我們不想讓別人看到我們的銷售價格,這時候我們就可以把查看商品表的權(quán)限封閉,創(chuàng)建一張視圖create view showGoods as select goods_id,goods_name from goods;不出現(xiàn)銷售價格列就可以了。
5. 修改視圖:alter view 視圖名 as select語句;
6. 刪除視圖:drop view 視圖名1,視圖名2…;
7. 視圖與基本表的關(guān)系
(1) 視圖是表的查詢結(jié)果,基本表的數(shù)據(jù)變了,會影響視圖的結(jié)果
(2)從單表中獲取的視圖的增刪改會影響基本表
(3) 多表視圖時,可以通過視圖給某個表插入數(shù)據(jù)
(4)多表視圖時,不可以通過視圖刪除數(shù)據(jù)
(5)多表視圖時,可以通過視圖更改數(shù)據(jù),注意:在更改時,被更改的數(shù)據(jù)必須是在視圖中有所體現(xiàn)的,如果在視圖中沒有體現(xiàn)出來,那么修改的語法沒有錯誤,但是真實表中的數(shù)據(jù)不會被改變
注意:有些視圖時不可以更新的,如包含distinct、group by、having、union、union all、聚合函數(shù)等
select s1.*,cno,degree from s1 inner join s2 on s1.sno = s2.sno;
create view vv as select s1.*,cno,degree from s1 inner join s2 on s1.sno = s2.sno;
insert into vv values (111,'aaa','女','2018-01-01 00:00:00',99999,'6-110',100);
多表查詢不行
insert into vv (sno,sname,ssex,sbirthday,class) values (111,'aaa','女','2018-01-01 00:00:00',99999);
插入成功,但跟誰都連不上,沒有。
select * from s1;
delete * from vv where sno =111; 4)多表視圖時,不可以通過視圖刪除數(shù)據(jù)
update vv set sname = 'bbb' where sno =111; 沒變
update vv set ssex = '男' where sno =111; 還是沒變
在更改時,被更改的數(shù)據(jù)必須是在視圖中有所體現(xiàn)的,如果在視圖中沒有體現(xiàn)出來,那么修改的語法沒有錯誤,但是真實表中的數(shù)據(jù)不會被改變
update vv set sname = 'ok' where sno =103; 變了
注意:有些視圖時不可以更新的,如包含distinct、group by、having、union、union all、聚合函數(shù)等
select * from s1;
alter view vv as select * from s1 union select * from s1;
update vv set sname = 'ok2' where sno =107; 不可修改
六、 MySQL常見操作
1. 創(chuàng)建用戶:Create user ‘用戶名’@’允許登錄的地址/服務(wù)器’ identified by ‘密碼’
2. 刪除用戶:drop user ‘用戶名’@’服務(wù)器地址’;注意:需要管理員才可以刪除
3. 更改密碼
1) 用戶更改自己的密碼:Set password=password(‘密碼’);
2) 管理員更改用戶密碼:Set password for ‘用戶名’@’允許登錄的地址’=password(‘密碼’);
4. 為用戶授予權(quán)限
1) 格式:grant 權(quán)限1,權(quán)限2.. on 某庫.某個對象 to ‘用戶名’@’允許登錄的位置’ 【identified by ‘密碼’】;
2) 說明:
l權(quán)限列表,就是,多個權(quán)限的名詞,相互之間用逗號分開,比如: select, insert, update
l也可以寫:all
l某庫.某個對象,表示,給指定的某個數(shù)據(jù)庫中的某個“下級單位”賦權(quán);
l下級單位有:表名,視圖名等
l其中,有2個特殊的語法:
*.*: 代表所有數(shù)據(jù)庫中的所有下級單位;
某庫.* :代表指定的該庫中的所有下級單位;
3,【identified by ‘密碼’】是可省略部分,如果不省略,就表示賦權(quán)的同時,也去修改它的密碼;
但:如果該用戶不存儲,此時其實就是創(chuàng)建一個新用戶;并此時就必須設(shè)置其密碼了
5. 剝奪權(quán)限:revoke 權(quán)限列表 on 某庫.某個對象 from ‘用戶名’@’允許登錄的位置’
七、 忘記登錄密碼的解決方法
1. 進入命令行界面,輸入net stop mysql
2. mysqld --skip-grant-tables
3. 此時可以免密碼登錄:mysql -u root –p
4. 登錄后設(shè)置新密碼:update mysql.user set authentication_string=password('msh8888') where user='root' and Host = 'localhost';
5. 刷新權(quán)限表flush privileges;
八、 SQL語句的分類
1. 數(shù)據(jù)定義語言(DDL):用于創(chuàng)建、修改、和刪除數(shù)據(jù)庫內(nèi)的數(shù)據(jù)結(jié)構(gòu),如:
1) 創(chuàng)建和刪除數(shù)據(jù)庫(CREATE DATABASE || DROP DATABASE);
2) 創(chuàng)建、修改、重命名、刪除表(CREATE TABLE || ALTER TABLE|| RENAME TABLE||DROP TABLE);
3) 創(chuàng)建和刪除索引(CREATEINDEX || DROP INDEX)
2. 數(shù)據(jù)查詢語言(DQL):從數(shù)據(jù)庫中的一個或多個表中查詢數(shù)據(jù)(SELECT)
3. 數(shù)據(jù)操作語言(DML):修改數(shù)據(jù)庫中的數(shù)據(jù),包括插入(INSERT)、更新(UPDATE)和刪除(DELETE)
4. 數(shù)據(jù)控制語言(DCL):用于對數(shù)據(jù)庫的訪問,如:
1) 給用戶授予訪問權(quán)限(GRANT);
2) 取消用戶訪問權(quán)限(REMOKE)
總結(jié)
以上是生活随笔為你收集整理的mysql 外键和事务_Mysql (五)事务和外键的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 春雨润无声是哪首诗 春雨润无声是哪首诗介
- 下一篇: VIVO手机解锁密码忘记了怎么办