goland使用mysql返回預存程序的使用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。網上找了很多關於goland使用mysql返回預存程序帶傳回值的,golandgit上的mysql不支援預存程序在一個exec裡面,只能一個exec,另一個query才能取到結果,這樣就不能再高並發的情況下保證select取到的結果正確,為此實驗了好多方法,最後只有這種方法,具體看圖goland mysql執行預存程序不支援多個返回集,用query在多個傳回值的時候回取不到結果集代碼如下:rows, _ := db.Query(fmt.Sprintf("call usp_activeAccount('%s','%s')", "t22ss33t111", "123456"))for rows.Next() {var result stringvar accountid introws.Scan(&result, &accountid)fmt.Println(result)fmt.Println(accountid)}這樣是可以取到結果集,但是必須usp_activeAccount這個預存程序 select返回只能有一個,不支援多個select結果集,具體看我的預存程序:```sqlCREATE DEFINER=`root`@`localhost` PROCEDURE `usp_activeAccount`(in userid varchar(50), in password varchar(32))begin set @accountid = -1; set @result = '0000'; if @result = '0000' and exists(select 1 from tbl_account A where A.accountName = userid) thenset @result = '0002';end if; if @result = '0000' then-- 開始事務-- BEGINif not exists(select @accountid:= A.accountid from tbl_account A where A.accountName = userid) then -- 由於go語言只支援一個select,所以只能用exist解決-- select @accountid:= A.accountid from tbl_account A where A.accountName = userid -- if found_rows() = 0 then-- 開始插入帳號資訊insert into tbl_account(accountName,password)select userid,MD5(password);if row_count() = 1 thenset @accountid = @@IDENTITY;elseset @result = '0003';end if;end if;if @result = '0000' THENcommit;elserollback;end if;end if; select @result, @accountid;end```補充還有種就是直接用go 語句,就是消耗下效能代碼如下:db.Exec(fmt.Sprintf("call usp_login('%s','%s')", "a1a", "123456"))rows,_:= db.Query("select @result, @accountid")defer rows.Close()for rows.Next() {var result stringvar accountid interr := rows.Scan(&result, &accountid)if err != nil {//fmt.Println("ssssssssssssssssssssssssssss")}//fmt.Println(result, accountid)}*/tx, _:= db.Begin()tx.Query("select A.accountid,")/*_, err := tx.Exec(fmt.Sprintf("call usp_login('%s','%s')", "a1a", "123456"))if err != nil {fmt.Println("ssssssssssssssssssssssssssss")}rows,_:= tx.Query("select @result, @accountid")defer rows.Close()for rows.Next() {var result stringvar accountid interr := rows.Scan(&result, &accountid)if err != nil {fmt.Println("ssssssssssssssssssssssssssss")}//fmt.Println(result, accountid)}*/tx.Commit()效能測試表:10000次sql,相差8秒423 次點擊  ∙  1 贊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.