Dalam MySQL, kursor berfungsi sebagai penunjuk dan digunakan terutamanya untuk melintasi set keputusan rekod yang dikembalikan dengan menanyakan pangkalan data untuk melaksanakan operasi yang sepadan. Kursor sebenarnya ialah mekanisme yang mengekstrak satu rekod pada satu masa daripada set hasil yang mengandungi berbilang rekod data. Sistem pengurusan pangkalan data relasi pada asasnya berorientasikan set Dalam MySQL, tiada bentuk ungkapan untuk menerangkan satu rekod dalam jadual, melainkan klausa WHERE digunakan untuk mengehadkan hanya satu rekod untuk dipilih, jadi kadangkala kursor mesti digunakan untuk memilih satu rekod pemprosesan data.
Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.
MySQL Cursor (Kursor)
Kursor sebenarnya ialah kaedah yang boleh mengekstrak satu rekod pada satu masa daripada set hasil yang merangkumi berbilang mekanisme rekod data.
Kursor bertindak sebagai penunjuk.
Walaupun kursor boleh melintasi semua baris dalam hasil carian, ia hanya menghala ke satu baris pada satu masa.
Fungsi kursor adalah untuk melintasi rekod yang dikembalikan dengan menanyakan pangkalan data untuk melaksanakan operasi yang sepadan.
Sistem pengurusan pangkalan data hubungan pada asasnya berorientasikan set Dalam MySQL, tiada ungkapan untuk menerangkan satu rekod dalam jadual, melainkan klausa WHERE digunakan untuk mengehadkan hanya satu rekod untuk dipilih. . Jadi kadangkala kita mesti menggunakan kursor untuk memproses data pada satu rekod.
Secara amnya, kursor digunakan untuk mencari baris tertentu set hasil untuk mengubah suai data.
Penggunaan kursor
1. Isytiharkan kursor: declare 游标名称 CURSOR for table;
(Jadual di sini boleh menjadi sebarang koleksi yang anda tanya)
2. Buka kursor yang ditakrifkan: open 游标名称;
3 Dapatkan baris data seterusnya: FETCH 游标名称 into testrangeid,versionid;
4. semak): di sini Ia bergantung pada situasi tertentu
5. Lepaskan kursor: CLOSE 游标名称;
Nota: Setiap ayat prosedur tersimpan mysql mesti diakhiri dengan;, dan medan sementara yang digunakan perlu diisytiharkan sebelum menentukan kursor.
Contoh
- BEGIN --定义变量 declare testrangeid BIGINT; declare versionid BIGINT; declare done int; --创建游标,并存储数据 declare cur_test CURSOR for select id as testrangeid,version_id as versionid from tp_testrange; --游标中的内容执行完后将done设置为1 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; --打开游标 open cur_test; --执行循环 posLoop:LOOP --判断是否结束循环 IF done=1 THEN LEAVE posLoop; END IF; --取游标中的值 FETCH cur_test into testrangeid,versionid; --执行更新操作 update tp_data_execute set version_id=versionid where testrange_id = testrangeid; END LOOP posLoop; --释放游标 CLOSE cur_test; END -
Contoh 2:
Kami kini akan menggunakan prosedur tersimpan untuk membuat fungsi untuk mengira iPhone Berapakah jumlah inventori dan keluarkan jumlahnya kepada konsol.
--在windows系统中写存储过程时,如果需要使用declare声明变量,需要添加这个关键字,否则会报错。 delimiter // drop procedure if exists StatisticStore; CREATE PROCEDURE StatisticStore() BEGIN --创建接收游标数据的变量 declare c int; declare n varchar(20); --创建总数变量 declare total int default 0; --创建结束标志变量 declare done int default false; --创建游标 declare cur cursor for select name,count from store where name = 'iphone'; --指定游标循环结束时的返回值 declare continue HANDLER for not found set done = true; --设置初始值 set total = 0; --打开游标 open cur; --开始循环游标里的数据 read_loop:loop --根据游标当前指向的一条数据 fetch cur into n,c; --判断游标的循环是否结束 if done then leave read_loop; --跳出游标循环 end if; --获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作, set total = total + c; --结束游标循环 end loop; --关闭游标 close cur; --输出结果 select total; END; --调用存储过程 call StatisticStore();
fetch adalah untuk mendapatkan baris data yang dihalakan oleh kursor pada masa ini dan halakan penuding ke baris seterusnya Meneruskan pelaksanaan apabila kursor sudah menghala ke baris terakhir akan menyebabkan limpahan kursor.
Apabila menggunakan kursor gelung, ia tidak akan memantau sama ada ia telah mencapai sekeping data terakhir seperti berikut akan menyebabkan gelung tak terhingga; ralat NOT FOUND pratakrif MySQL kursor akan dicetuskan apabila limpahan berlaku, jadi kod berikut digunakan di atas untuk menentukan acara berterusan apabila ralat tidak ditemui dicetuskan dan untuk mengubah suai nilai pembolehubah yang dilakukan apabila peristiwa ini berlaku.
read_loop:loop fetch cur into n,c; set total = total+c; end loop;
Jadi kod berikut ditambah pada gelung:
declare continue HANDLER for not found set done = true;
Jika nilai selesai adalah benar, tamatkan gelung. Teruskan melaksanakan kod berikut
--判断游标的循环是否结束 if done then leave read_loop; --跳出游标循环 end if;Penggunaan Terdapat tiga cara untuk menggunakan kursor: Yang pertama ialah pelaksanaan di atas, menggunakan gelung gelung;
- Cara kedua adalah seperti berikut, menggunakan gelung sementara:
- Cara ketiga ialah menggunakan pelaksanaan ulangan:
drop procedure if exists StatisticStore1; CREATE PROCEDURE StatisticStore1() BEGIN declare c int; declare n varchar(20); declare total int default 0; declare done int default false; declare cur cursor for select name,count from store where name = 'iphone'; declare continue HANDLER for not found set done = true; set total = 0; open cur; fetch cur into n,c; while(not done) do set total = total + c; fetch cur into n,c; end while; close cur; select total; END; call StatisticStore1();Sarang kursor
drop procedure if exists StatisticStore2; CREATE PROCEDURE StatisticStore2() BEGIN declare c int; declare n varchar(20); declare total int default 0; declare done int default false; declare cur cursor for select name,count from store where name = 'iphone'; declare continue HANDLER for not found set done = true; set total = 0; open cur; repeat fetch cur into n,c; if not done then set total = total + c; end if; until done end repeat; close cur; select total; END; call StatisticStore2();
Dalam mysql, setiap blok permulaan permulaan ialah kawasan skop bebas Memandangkan peristiwa ralat yang sama dalam MySql hanya boleh ditakrifkan sekali, jika ada adalah berbilang takrifan, ia akan menggesa Pengendali Pendua diisytiharkan dalam blok yang sama semasa penyusunan.
Perkara di atas adalah untuk melaksanakan gelung bersarang Sudah tentu, contoh ini tidak masuk akal. Lihat sahaja.
drop procedure if exists StatisticStore3; CREATE PROCEDURE StatisticStore3() BEGIN declare _n varchar(20); declare done int default false; declare cur cursor for select name from store group by name; declare continue HANDLER for not found set done = true; open cur; read_loop:loop fetch cur into _n; if done then leave read_loop; end if; begin declare c int; declare n varchar(20); declare total int default 0; declare done int default false; declare cur cursor for select name,count from store where name = 'iphone'; declare continue HANDLER for not found set done = true; set total = 0; open cur; iphone_loop:loop fetch cur into n,c; if done then leave iphone_loop; end if; set total = total + c; end loop; close cur; select _n,n,total; end; begin declare c int; declare n varchar(20); declare total int default 0; declare done int default false; declare cur cursor for select name,count from store where name = 'android'; declare continue HANDLER for not found set done = true; set total = 0; open cur; android_loop:loop fetch cur into n,c; if done then leave android_loop; end if; set total = total + c; end loop; close cur; select _n,n,total; end; begin end; end loop; close cur; END; call StatisticStore3();
SQL Dinamik
Mysql menyokong fungsi SQL dinamik
[Cadangan berkaitan:
tutorial video mysqlset @sqlStr='select * from table where condition1 = ?'; prepare s1 for @sqlStr; --如果有多个参数用逗号分隔 execute s1 using @condition1; --手工释放,或者是 connection 关闭时, server 自动回收 deallocate prepare s1;]
Atas ialah kandungan terperinci Apakah kegunaan kursor mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Mysqldiffersfromothersqldialectsyntaxforlimit, auto-increment, stringcomparison, subqueries, andperformanceanalysis.1) mySqlusSlimit, whilesqlserverestopandoracleusesusesrownum.2)

Pemisahan MySQL meningkatkan prestasi dan memudahkan penyelenggaraan. 1) Bahagikan jadual besar ke dalam kepingan kecil dengan kriteria tertentu (seperti julat tarikh), 2) secara fizikal membahagikan data ke dalam fail bebas, 3) MystQL boleh memberi tumpuan kepada partisi yang berkaitan apabila pertanyaan, 4) Pengoptimal pertanyaan boleh melangkau partisi yang tidak berkaitan, 5) Memilih strategi partisi yang tepat dan mengekalkannya secara tetap adalah kunci.

Bagaimana untuk memberikan dan membatalkan keizinan di MySQL? 1. Gunakan pernyataan geran untuk memberikan kebenaran, seperti GrantallPrivileGeSondatabase_name.to'username'@'host '; 2. Gunakan pernyataan membatalkan untuk membatalkan kebenaran, seperti RevokeAllPrivileGeSondatabase_name.from'username'@'host 'untuk memastikan komunikasi tepat pada masanya perubahan kebenaran.

InnoDB sesuai untuk aplikasi yang memerlukan sokongan transaksi dan kesesuaian yang tinggi, sementara myisam sesuai untuk aplikasi yang memerlukan lebih banyak bacaan dan kurang menulis. 1.InnoDB menyokong kunci transaksi dan peringkat bank, sesuai untuk sistem e-dagang dan perbankan. 2.Myisam menyediakan bacaan dan pengindeksan yang cepat, sesuai untuk sistem pengurusan blog dan kandungan.

Terdapat empat jenis utama dalam MySQL: innerjoin, leftjoin, rightjoin dan fullouterjoin. 1.InnerJoin Mengembalikan semua baris dalam dua jadual yang memenuhi syarat gabungan. 2.LeftJoin Mengembalikan semua baris di meja kiri, walaupun tidak ada baris yang sepadan di meja yang betul. 3. Rightjoin bertentangan dengan leftjoin dan mengembalikan semua baris di meja kanan. 4.FullouterJoin Mengembalikan semua baris dalam dua jadual yang memenuhi atau tidak memenuhi syarat gabungan.

MysqloffersvariousstorageEngines, eachSuitedfordifferentusecases: 1) innodbisidealforapplicationsNeedingacidcomplianceandhighconcurrency, supportingtransactionsandforeignkeys.2) myisamisbestforread-heavyworkloads, lacktransactive.2)

Kelemahan keselamatan biasa dalam MySQL termasuk suntikan SQL, kata laluan yang lemah, konfigurasi kebenaran yang tidak betul, dan perisian yang tidak dimulakan. 1. Suntikan SQL boleh dicegah dengan menggunakan pernyataan pra -proses. 2. Kata laluan yang lemah boleh dielakkan dengan secara paksa menggunakan strategi kata laluan yang kuat. 3. 4. Perisian yang tidak ditetapkan boleh ditampal dengan kerap memeriksa dan mengemas kini versi MySQL.

Mengenal pasti pertanyaan perlahan dalam MySQL boleh dicapai dengan membolehkan log pertanyaan perlahan dan menetapkan ambang. 1. Dayakan log pertanyaan perlahan dan tetapkan ambang. 2. Lihat dan menganalisis fail log pertanyaan perlahan, dan gunakan alat seperti mysqldumpslow atau pt-que-digest untuk analisis mendalam. 3. Mengoptimumkan pertanyaan perlahan dapat dicapai melalui pengoptimuman indeks, penulisan pertanyaan dan mengelakkan penggunaan pilih*.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Dreamweaver Mac版
Alat pembangunan web visual

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft
