MySql与SqlServer的一些常用用法的差别
由于工作的原因:上家公司的数据库全采用MySql,所以不得不用它。因此也学到了MySql的一些知识,但考虑到今后可能没机会使用了,所以想趁现在离职在家休息,打算把这些东西整理一下,也为了万一今后能用上,留个参考的资源。考虑到一直在使用SqlServer,所以
由于工作的原因:上家公司的数据库全采用MySql,所以不得不用它。因此也学到了MySql的一些知识,但考虑到今后可能没机会使用了,所以想趁现在离职在家休息,打算把这些东西整理一下,也为了万一今后能用上,留个参考的资源。考虑到一直在使用SqlServer,所以就打算直接与SqlServer对比来写。
本文将主要列出MySql与SqlServer不同的地方,且以常用的存储过程的相关内容为主。
1. 标识符限定符
SqlServer | [] |
MySql | `` |
2. 字符串相加
SqlServer | 直接用 + |
MySql | concat() |
3. isnull()
SqlServer | isnull() |
MySql | ifnull() 注意:MySql也有isnull()函数,但意义不一样 |
4. getdate()
SqlServer | getdate() |
MySql | now() |
5. newid()
SqlServer | newid() |
MySql | uuid() |
6. @@ROWCOUNT
SqlServer | @@ROWCOUNT |
MySql | row_count() 注意:MySql的这个函数仅对于update, insert, delete有效 |
7. SCOPE_IDENTITY()
SqlServer | SCOPE_IDENTITY() |
MySql | last_insert_id() |
8. if ... else ...
SqlServer |
IF Boolean_expression { sql_statement | statement_block } [ ELSE { sql_statement | statement_block } ] -- 若要定义语句块,请使用控制流关键字 BEGIN 和 END。 Salin selepas log masuk |
MySql |
IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list] END IF Salin selepas log masuk |
注意:对于MySql来说,then, end if是必须的。类似的还有其它的流程控制语句,这里就不一一列出。
9. declare
其实,SqlServer和MySql都有这个语句,用于定义变量,但差别在于:在MySql中,DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。这个要求在写游标时,会感觉很BT.
10. 游标的写法
SqlServer |
declare @tempShoppingCart table (ProductId int, Quantity int) insert into @tempShoppingCart (ProductId, Quantity) select ProductId, Quantity from ShoppingCart where UserGuid = @UserGuid declare @productId int declare @quantity int declare tempCartCursor cursor for select ProductId, Quantity from @tempShoppingCart open tempCartCursor fetch next from tempCartCursor into @productId, @quantity while @@FETCH_STATUS = 0 begin update Product set SellCount = SellCount + @quantity where productId = @productId fetch next from tempCartCursor into @productId, @quantity end close tempCartCursor deallocate tempCartCursor Salin selepas log masuk |
MySql |
declare m_done int default 0; declare m_divId int; declare m_newsId int; declare _cursor_SN cursor for select divid, newsid from _temp_SN; declare continue handler for not found set m_done = 1; create temporary table _temp_SN select divid, newsid from divNews group by divid, newsid having count(*) > 1; open _cursor_SN; while( m_done = 0 ) do fetch _cursor_SN into m_divId, m_newsId; if( m_done = 0 ) then -- 具体的处理逻辑 end if; end while; close _cursor_SN; drop table _temp_SN; Salin selepas log masuk |
注意:为了提高性能,通常在表变量上打开游标,不要直接在数据表上打开游标。
11. 分页的处理
SqlServer |
create procedure GetProductByCategoryId( @CategoryID int, @PageIndex int = 0, @PageSize int = 20, @TotalRecords int output ) as begin declare @ResultTable table ( RowIndex int, ProductID int, ProductName nvarchar(50), CategoryID int, Unit nvarchar(10), UnitPrice money, Quantity int ); insert into @ResultTable select row_number() over (order by ProductID asc) as RowIndex, p.ProductID, p.ProductName, p.CategoryID, p.Unit, p.UnitPrice, p.Quantity from Products as p where CategoryID = @CategoryID; select @TotalRecords = count(*) from @ResultTable; select * from @ResultTable where RowIndex > (@PageSize * @PageIndex) and RowIndex <p>当然,SqlServer中并不只有这一种写法,只是这种写法是比较常见而已。</p> Salin selepas log masuk |
MySql |
create procedure GetProductsByCategoryId( in _categoryId int, in _pageIndex int, in _pageSize int, out _totalRecCount int ) begin set @categoryId = _categoryId; set @startRow = _pageIndex * _pageSize; set @pageSize = _pageSize; prepare PageSql from 'select sql_calc_found_rows * from product where categoryId = ? order by ProductId desc limit ?, ?'; execute PageSql using @categoryId, @startRow, @pageSize; deallocate prepare PageSql; set _totalRecCount = found_rows(); end Salin selepas log masuk |
MySql与SqlServer的差别实在太多,以上只是列出了我认为经常在写存储过程中会遇到的一些具体的差别之处。
去年我将一些MySql的常用函数作了一番整理,如需要请点击此处下载。

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

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kemahiran pemprosesan struktur data besar: Pecahan: Pecahkan set data dan proseskannya dalam bahagian untuk mengurangkan penggunaan memori. Penjana: Hasilkan item data satu demi satu tanpa memuatkan keseluruhan set data, sesuai untuk set data tanpa had. Penstriman: Baca fail atau hasil pertanyaan baris demi baris, sesuai untuk fail besar atau data jauh. Storan luaran: Untuk set data yang sangat besar, simpan data dalam pangkalan data atau NoSQL.

Prestasi pertanyaan MySQL boleh dioptimumkan dengan membina indeks yang mengurangkan masa carian daripada kerumitan linear kepada kerumitan logaritma. Gunakan PreparedStatements untuk menghalang suntikan SQL dan meningkatkan prestasi pertanyaan. Hadkan hasil pertanyaan dan kurangkan jumlah data yang diproses oleh pelayan. Optimumkan pertanyaan penyertaan, termasuk menggunakan jenis gabungan yang sesuai, membuat indeks dan mempertimbangkan untuk menggunakan subkueri. Menganalisis pertanyaan untuk mengenal pasti kesesakan; gunakan caching untuk mengurangkan beban pangkalan data;

Membuat sandaran dan memulihkan pangkalan data MySQL dalam PHP boleh dicapai dengan mengikuti langkah berikut: Sandarkan pangkalan data: Gunakan arahan mysqldump untuk membuang pangkalan data ke dalam fail SQL. Pulihkan pangkalan data: Gunakan arahan mysql untuk memulihkan pangkalan data daripada fail SQL.

Bagaimana untuk memasukkan data ke dalam jadual MySQL? Sambung ke pangkalan data: Gunakan mysqli untuk mewujudkan sambungan ke pangkalan data. Sediakan pertanyaan SQL: Tulis pernyataan INSERT untuk menentukan lajur dan nilai yang akan dimasukkan. Laksanakan pertanyaan: Gunakan kaedah query() untuk melaksanakan pertanyaan sisipan Jika berjaya, mesej pengesahan akan dikeluarkan.

Salah satu perubahan utama yang diperkenalkan dalam MySQL 8.4 (keluaran LTS terkini pada 2024) ialah pemalam "Kata Laluan Asli MySQL" tidak lagi didayakan secara lalai. Selanjutnya, MySQL 9.0 mengalih keluar pemalam ini sepenuhnya. Perubahan ini mempengaruhi PHP dan apl lain

Untuk menggunakan prosedur tersimpan MySQL dalam PHP: Gunakan PDO atau sambungan MySQLi untuk menyambung ke pangkalan data MySQL. Sediakan penyata untuk memanggil prosedur tersimpan. Laksanakan prosedur tersimpan. Proses set keputusan (jika prosedur tersimpan mengembalikan hasil). Tutup sambungan pangkalan data.

Mencipta jadual MySQL menggunakan PHP memerlukan langkah berikut: Sambung ke pangkalan data. Buat pangkalan data jika ia tidak wujud. Pilih pangkalan data. Buat jadual. Laksanakan pertanyaan. Tutup sambungan.

Pangkalan data Oracle dan MySQL adalah kedua-dua pangkalan data berdasarkan model hubungan, tetapi Oracle lebih unggul dari segi keserasian, skalabiliti, jenis data dan keselamatan manakala MySQL memfokuskan pada kelajuan dan fleksibiliti dan lebih sesuai untuk set data bersaiz kecil. ① Oracle menyediakan pelbagai jenis data, ② menyediakan ciri keselamatan lanjutan, ③ sesuai untuk aplikasi peringkat perusahaan ① MySQL menyokong jenis data NoSQL, ② mempunyai langkah keselamatan yang lebih sedikit, dan ③ sesuai untuk aplikasi bersaiz kecil hingga sederhana.
