diff --git "a/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/2022.9.23\344\275\234\344\270\232--\347\264\242\345\274\225/2022.09.23\344\275\234\344\270\232---\347\264\242\345\274\225.sql" "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/2022.9.23\344\275\234\344\270\232--\347\264\242\345\274\225/2022.09.23\344\275\234\344\270\232---\347\264\242\345\274\225.sql" new file mode 100644 index 0000000000000000000000000000000000000000..645e03859ccb9efc31c1a903d9b48800da835d83 --- /dev/null +++ "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/2022.9.23\344\275\234\344\270\232--\347\264\242\345\274\225/2022.09.23\344\275\234\344\270\232---\347\264\242\345\274\225.sql" @@ -0,0 +1,12 @@ +----1.创建tb_student(name)索引 填充因子设为50 +create nonclustered index IX_name on tb_student(name) with(fillfactor = 40) + +--2.创建tb_record(borrow_time,return_time) 使用索引查询没还书的同学并且让没还书的同学将图书归还 +create index IX_Br on tb_record(borrow_time,return_time) +select *,isnull(return_time , getdate())强制归回日期 from tb_record with(index = IX_Br) where return_time is null + +----3.增加新列id() 创建聚集索引tb_book(id) +alter table tb_book add id int +create clustered index IX_id on tb_book(id) + + diff --git "a/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/2022.9.28\344\275\234\344\270\232--.\344\272\213\345\212\241.sql.sql" "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/2022.9.28\344\275\234\344\270\232--.\344\272\213\345\212\241.sql.sql" new file mode 100644 index 0000000000000000000000000000000000000000..61cf56193466b5c04ba039cf5e8e16eb0d89b380 --- /dev/null +++ "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/2022.9.28\344\275\234\344\270\232--.\344\272\213\345\212\241.sql.sql" @@ -0,0 +1,99 @@ +--假设刘备取款6000,(添加check约束,设置账户余额必须>=0),要求:使用事务实现,修改余额和添加取款记录两步操作使用事务 +--账户余额>=0约束 +alter table BankCard add constraint CK_Money check(CardMoney >= 0) + +declare @myError int = 0 +declare @getMoney float = 6000 +declare @carID varchar(10) +declare @name varchar(10) +declare @Phone varchar(10) +set @name = '刘备' + +select @carID = (select b.CardNo from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name) +select @Phone = (select a.AccountPhone from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name) +--开始事务 +begin transaction A +update BankCard set CardMoney -= @getMoney where CardNo = @carID +set @myError += @@ERROR +insert into CardExchange values(@carID,0,@getMoney,getdate()) +set @myError += @@ERROR +--事务提交 +if(@myError = 0) +begin + commit transaction A +end +else +begin + rollback transaction B +end +go + +--2.刘备向张飞转账1000元,(添加check约束,设置账户余额必须>=0) +alter table BankCard add constraint CK_Money check(CardMoney >= 0) +declare @myError int = 0 +declare @getMoney float = 1000 +declare @carID varchar(10) +declare @carID1 varchar(10) +declare @name varchar(10) +declare @name1 varchar(10) +declare @Phone varchar(10) +declare @Phone1 varchar(10) +set @name = '刘备' +set @name1 = '张飞' +select @carID = (select b.CardNo from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name) +select @Phone = (select a.AccountPhone from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name) +select @carID1 = (select b.CardNo from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name1) +select @Phone1 = (select a.AccountPhone from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name1) + +begin transaction A +update BankCard set CardMoney -= @getMoney where CardNo = @carID +set @myError += @@ERROR +update BankCard set CardMoney += @getMoney where CardNo = @carID1 +set @myError += @@ERROR +insert into CardTransfer values(@carID,@carID1,@getMoney,getdate()) +set @myError += @@ERROR + +if(@myError = 0) +begin + commit transaction A +end +else +begin + rollback transaction B +end + + +--列转行 +CREATE TABLE grades1 ( + id int NOT NULL , + name varchar(20) DEFAULT NULL, + subject varchar(20) DEFAULT NULL, + score int DEFAULT NULL, + +) + +INSERT INTO grades1 VALUES (1, 'lyy', '英语', 100); +INSERT INTO grades1 VALUES (2, 'lyy', '数学', 98); +INSERT INTO grades1 VALUES (3, 'lyy', '语文', 97); +INSERT INTO grades1 VALUES (4, 'gss', '英语', 89); +INSERT INTO grades1 VALUES (5, 'gss', '数学', 88); +INSERT INTO grades1 VALUES (6, 'gss', '语文', 87); +INSERT INTO grades1 VALUES (7, 'liming', '英语', 79); +INSERT INTO grades1 VALUES (8, 'liming', '数学', 77); +INSERT INTO grades1 VALUES (9, 'liming', '语文', 75); + +select * from grades1 + +select name, +max(case subject when '英语' then score else 0 end)英语, +max(case subject when '数学' then score else 0 end)数学, +max(case subject when '语文' then score else 0 end)语文 +from grades1 +group by name + +select * from grades1 +pivot +( +max(score) +for subject in([英语],[数学],[语文]) +) as a \ No newline at end of file diff --git "a/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/\344\275\234\344\270\232/\344\275\234\344\270\232.txt" "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232.txt" similarity index 100% rename from "45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/\344\275\234\344\270\232/\344\275\234\344\270\232.txt" rename to "45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232.txt" diff --git "a/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/\347\254\224\350\256\260/2022-09-15-\345\273\272\345\272\223\345\273\272\350\241\250\347\272\246\346\235\237.txt" "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/\347\254\254\344\270\200\346\254\241\347\254\224\350\256\260/2022-09-15-\345\273\272\345\272\223\345\273\272\350\241\250\347\272\246\346\235\237.txt" similarity index 100% rename from "45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/\347\254\224\350\256\260/2022-09-15-\345\273\272\345\272\223\345\273\272\350\241\250\347\272\246\346\235\237.txt" rename to "45\345\217\267\351\251\254\351\221\253\346\266\233/\344\275\234\344\270\232/\347\254\254\344\270\200\346\254\241\347\254\224\350\256\260/2022-09-15-\345\273\272\345\272\223\345\273\272\350\241\250\347\272\246\346\235\237.txt" diff --git "a/45\345\217\267\351\251\254\351\221\253\346\266\233/\347\254\224\350\256\260/2022.9.23\347\254\224\350\256\260--\347\264\242\345\274\225/2022.9.23\347\254\224\350\256\260--\347\264\242\345\274\225.md" "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\347\254\224\350\256\260/2022.9.23\347\254\224\350\256\260--\347\264\242\345\274\225/2022.9.23\347\254\224\350\256\260--\347\264\242\345\274\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..3ac42ac2193ab39f64674c24f5b0955ea9acbada --- /dev/null +++ "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\347\254\224\350\256\260/2022.9.23\347\254\224\350\256\260--\347\264\242\345\274\225/2022.9.23\347\254\224\350\256\260--\347\264\242\345\274\225.md" @@ -0,0 +1,54 @@ +1.绱㈠紩 +1.1浣滅敤 +鎻愰珮鏌ヨ閫熷害 + +淇濊瘉鏁版嵁璁板綍鐨勫敮涓鎬 + +鏌ヨ浼樺寲闈犵储寮曡捣浣滅敤 + +鎻愰珮order by, group by 鎵ц閫熷害 + +1.2鍒嗙被 +1.2.1鑱氶泦绱㈠紩(clustered): +鏍规嵁鏁版嵁琛岀殑閿煎湪琛ㄦ垨瑙嗗浘涓殑鎺掑簭瀛樺偍杩欎簺鏁版嵁琛岋紝姣忎釜琛ㄥ彧鏈変竴涓仛闆嗙储寮曘傝仛闆嗙储寮曟槸涓绉嶅纾佺洏涓婂疄闄呮暟鎹噸鏂扮粍缁囦互鎸夋寚瀹氱殑涓鍒楁垨澶氬垪鍊兼帓搴(绫讳技瀛楀吀涓殑鎷奸煶绱㈠紩)(鐗╃悊瀛樺偍椤哄簭)銆 + +鈥 鑱氶泦绱㈠紩鐨勬剰鎬濆彲浠ョ悊瑙d负椤哄簭鎺掑垪锛屾瘮濡備竴涓富閿嚜澧炵殑琛ㄥ嵆涓鸿仛闆嗙储寮曪紝鍗砳d涓1鐨勫瓨鍦ㄤ簬绗竴鏉★紝id涓2鐨勫瓨鍦ㄤ簬绗簩鏉...鍋囦娇鏁版嵁搴撲腑鏄娇鐢ㄦ暟缁勬潵瀛樻斁鐨勮繖寮犺〃涓殑鏁版嵁锛岄偅涔堝鏋滄垜闇瑕佹煡鎵剧100鏉★紝閭d箞鐩存帴绗竴鏉℃暟鎹殑鍦板潃鍔犱笂100鍗充负绗竴鐧炬潯鐨勫湴鍧锛屼竴娆″氨鑳芥煡璇㈠嚭鏉ャ + +1.2.2闈炶仛闆嗙储寮 (nonclusterted): +鍏锋湁鐙珛浜庢暟鎹鐨勭粨鏋勶紝鍖呭惈闈炶仛闆嗙储寮曢敭鍊硷紝涓旀瘡涓敭鍊奸」閮芥湁鎸囧悜鍖呭惈璇ラ敭鍊肩殑鏁版嵁琛岀殑鎸囬拡銆傦紙绫讳技瀛楀吀涓殑鍋忔梺閮ㄩ绱㈠紩锛夛紙閫昏緫瀛樺偍椤哄簭锛夈 + +闈炶仛闆嗙储寮曞彲浠ョ畝鍗曠悊瑙d负鏈夊簭鐩綍锛屾槸涓绉嶄互绌洪棿鎹㈠彇鏃堕棿鐨勬柟娉曘備妇涓緥瀛愶紝鍦ㄤ竴涓猽ser琛ㄤ腑锛屾湁涓涓猧d_num锛屽嵆韬唤鍙凤紝姝や笉涓轰富閿甶d锛岄偅涔堣繖浜涙暟鎹湪瀛樺偍鐨勬椂鍊欓兘鏄棤搴忕殑锛屾瘮濡 + +id涓1鐨刬d_num涓100锛宨d涓2鐨刬d_num涓97锛宨d涓3鐨刬d_num涓98锛宨d涓4鐨刬d_num涓99锛宨d涓5鐨刬d_num涓96銆傘傘俰d涓67鐨刬d_num涓56銆傘傘 + +閭d箞濡傛灉鎴戣鏌ユ壘id_num涓56鐨勪汉锛岄偅涔堝彧鑳戒竴鏉′竴鏉$殑閬嶅巻锛宯鏉″氨闇瑕佹煡璇娆★紝鏃堕棿澶嶆潅搴︿负O(n)锛岃繖鏄潪甯歌楄垂鎬ц兘鐨勩 + +鎵浠ワ紝鐜板湪灏遍渶瑕佷负id_num澧炲姞闈炶仛闆嗙储寮曪紝娣诲姞浜嗛潪鑱氶泦绱㈠紩鍚庯紝浼氱粰id_num杩涜鎺掑簭锛堝唴閮ㄤ娇鐢ㄧ粨鏋勪负B+鏍戯級锛屽苟涓旀帓搴忓悗锛屾垜鍙渶瑕佹煡璇㈡鐩綍(鍗虫煡璇+鏍)锛屽緢蹇氨鐭ラ亾涓篿d涓56鐨勫湪鏁版嵁搴撲腑鐨勭67鏉★紝鑰屼笉闇瑕佸湪鍘婚亶鍘嗚〃涓殑鎵鏈夋暟鎹 鎵浠ワ紝鍦ㄩ潪鑱氶泦绱㈠紩涓紝涓嶉噸澶嶇殑鏁版嵁瓒婂锛岄偅涔堢储寮曠殑鏁堢巼瓒婇珮銆 + +1.2.3鎸夌収鏁版嵁鍞竴鎬у垎绫:鍞竴绱㈠紩銆侀潪鍞竴绱㈠紩 +1.2.4鎸夐敭鍒椾釜鏁板尯鍒嗭細鍗曞垪绱㈠紩锛屽鍒楃储寮 +1.2.5鍏朵粬鍒嗙被:绱㈠紩瑙嗗浘銆佸寘鍚у垪绱㈠紩銆佸叏鏂囩储寮曘乆ML绱㈠紩绛 +1.3鍒涘缓绱㈠紩 +1.3.1鍒涘缓鑱氶泦绱㈠紩锛氫竴鑸缓绔嬩富閿殑鏃跺欒嚜鍔ㄧ敓鎴 +create CLUSTERED INDEX 绱㈠紩鍚嶇О ON 琛ㄥ悕(瀛楁鍚) +1.3.2鍒涘缓闈炶仛闆嗙储寮 +create NONCLUSTERED INDEX 绱㈠紩鍚嶇О ON 琛ㄥ悕(瀛楁鍚) +1.3.3 + +--绱㈠紩鍚嶏細IX_, IDX_ + +--鍒犻櫎鎸囧畾绾︽潫 +alter table 琛ㄥ悕 +drop constraint 涓婚敭绾︽潫鍚嶇О + +--灏嗘寚瀹氬瓧娈佃缃垚涓婚敭闈炶仛闆嗙储寮 + +alter table 琛ㄥ悕 +add constraint 涓婚敭绾︽潫鍚嶇О primary key NONCLUSTERED(瀛楁鍚) + +--fillfactor 濉厖鍥犲瓙 涓椤甸渶瑕佸~鍏 % 鏁版嵁 榛樿鏄0 + +--鍗曞垪锛氱储寮曞垪涓彧鏈変竴涓瓧娈 +--澶氬垪锛氱储寮曚腑鏈夊涓瓧娈 + +--澶氬垪绱㈠紩闇瑕佺鍚堟渶宸﹀師鍒欙細鏍规嵁鍒涘缓鐨勭储寮曞垪椤哄簭锛屾寜鐓т粠宸﹀埌鍙崇殑椤哄簭鏌ヨ锛 \ No newline at end of file diff --git "a/45\345\217\267\351\251\254\351\221\253\346\266\233/\347\254\224\350\256\260/2022.9.28\347\254\224\350\256\260--\344\272\213\345\212\241.md.txt" "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\347\254\224\350\256\260/2022.9.28\347\254\224\350\256\260--\344\272\213\345\212\241.md.txt" new file mode 100644 index 0000000000000000000000000000000000000000..cbd50236a9ebf4775f128e219b2225628bcbbb08 --- /dev/null +++ "b/45\345\217\267\351\251\254\351\221\253\346\266\233/\347\254\224\350\256\260/2022.9.28\347\254\224\350\256\260--\344\272\213\345\212\241.md.txt" @@ -0,0 +1,26 @@ +浜嬪姟 +浜嬪姟锛 Transaction锛夌敱涓娆℃垨鑰呭娆″熀鏈搷浣滄瀯鎴愶紝鎴栬呰锛屼簨鍔$敱涓鏉℃垨鑰呭鏉 SQL 璇彞鏋勬垚銆 + +浜嬪姟涓殑鎵鏈 SQL 璇彞鏄竴涓暣浣擄紝鍏卞悓杩涢锛屼笉鍙垎鍓诧紝瑕佷箞鍏ㄩ儴鎵ц鎴愬姛锛岃涔堝叏閮ㄦ墽琛屽け璐ャ + +浜嬪姟鐨勫睘鎬(ACID) +涓鑸潵璇达紝浜嬪姟鍏锋湁鍥涗釜鏍囧噯灞炴э紝鍒嗗埆鏄師瀛愭э紙Atomicity锛屾垨绉颁笉鍙垎鍓叉э級銆佷竴鑷存э紙Consistency锛夈侀殧绂绘э紙Isolation锛屽張绉扮嫭绔嬫э級銆佹寔涔呮э紙Durability锛夛紝绠绉 ACID銆傚叿浣撹鏄庡涓嬶細 + +1) 鍘熷瓙鎬 +涓涓簨鍔′腑鐨勬墍鏈 SQL 璇彞锛岃涔堝叏閮ㄦ墽琛屾垚鍔燂紝瑕佷箞鍏ㄩ儴鎵ц澶辫触锛屼笉浼氱粨鏉熷湪涓棿鐨勬煇涓幆鑺傘備簨鍔″湪鎵ц杩囩▼涓彂鐢熼敊璇紝浼氳鍥炴粴锛圧ollback锛夊埌浜嬪姟寮濮嬪墠鐨勭姸鎬侊紝灏卞儚杩欎釜浜嬪姟浠庢潵娌℃湁鎵ц杩囦竴鏍枫 + +2) 涓鑷存 +鍦ㄤ簨鍔″紑濮嬩箣鍓嶅拰浜嬪姟缁撴潫浠ュ悗锛屾暟鎹簱鐨勫畬鏁存ф病鏈夎鐮村潖銆傝繖琛ㄧず鍐欏叆鐨勬暟鎹繀椤诲畬鍏ㄧ鍚堟墍鏈夌殑棰勮瑙勫垯锛屽叾涓寘鍚暟鎹殑绮剧‘搴︺佷覆鑱旀т互鍙婂悗缁暟鎹簱鍙互鑷彂鎬у湴瀹屾垚棰勫畾鐨勫伐浣溿 + +3) 闅旂鎬 +鏁版嵁搴撳厑璁稿涓苟鍙戜簨鍔″悓鏃跺鍏舵暟鎹繘琛岃鍐欏拰淇敼鐨勮兘鍔涳紝闅旂鎬у彲浠ラ槻姝㈠涓簨鍔″苟鍙戞墽琛屾椂鐢变簬浜ゅ弶鎵ц鑰屽鑷存暟鎹殑涓嶄竴鑷淬備簨鍔¢殧绂诲垎涓轰笉鍚岀骇鍒紝鍖呮嫭璇绘湭鎻愪氦锛圧ead uncommitted锛夈佽鎻愪氦锛坮ead committed锛夈佸彲閲嶅璇伙紙repeatable read锛夊拰涓茶鍖栵紙Serializable锛夈 姝婚攣 鎿嶄綔绯荤粺 + +4) 鎸佷箙鎬 +浜嬪姟澶勭悊缁撴潫鍚庯紝瀵规暟鎹殑淇敼灏辨槸姘镐箙鐨勶紝鍗充究绯荤粺鏁呴殰涔熶笉浼氫涪澶便 + +浜嬪姟鍒嗙被 +鑷姩鎻愪氦浜嬬墿锛 鏄疭QL Server榛樿鐨勪竴绉嶄簨鍔℃ā寮忥紝姣忔潯Sql璇彞閮借鐪嬫垚涓涓簨鍔¤繘琛屽鐞嗐 + +鏄惧紡浜嬪姟: T-sql鏍囨槑锛岀敱Begin Transaction寮鍚簨鍔″紑濮嬶紝鐢盋ommit Transaction 鎻愪氦浜嬪姟銆丷ollback Transaction 鍥炴粴浜嬪姟缁撴潫銆 + +闅愬紡浜嬪姟锛氫娇鐢⊿et IMPLICIT_TRANSACTIONS ON 灏嗗皢闅愬紡浜嬪姟妯″紡鎵撳紑锛屼笉鐢˙egin Transaction寮鍚簨鍔★紝褰撲竴涓簨鍔$粨鏉燂紝杩欎釜妯″紡浼氳嚜鍔ㄥ惎鐢ㄤ笅涓涓簨鍔★紝鍙敤Commit Transaction 鎻愪氦浜嬪姟銆丷ollback Transaction 鍥炴粴浜嬪姟鍗冲彲銆 \ No newline at end of file