Heim > Datenbank > MySQL-Tutorial > mymysql与go-mysql-driver的一个差别

mymysql与go-mysql-driver的一个差别

WBOY
Freigeben: 2016-06-07 16:23:58
Original
1076 Leute haben es durchsucht

mymysql与go-mysql-driver的一个区别 今天要写个工具就想顺便学下 go 。网上翻了下发现用比较多的是 mymysql 和 go-mysql-driver 。 ?? 这两个驱动网上比较的文章也有些了,不过都没有提到一个点,个人觉得是很重要的,记录一下。 ?? ?????? 先看使用 go-mysq

mymysql与go-mysql-driver的一个区别

今天要写个工具就想顺便学下go。网上翻了下发现用比较多的是mymysqlgo-mysql-driver

??这两个驱动网上比较的文章也有些了,不过都没有提到一个点,个人觉得是很重要的,记录一下。

??

?????? 先看使用go-mysql-driver的例子。

?? db,_:=sql.Open("mysql",connect_string)

?? db.Query("set binlog_format=row")

?

?? rows,_:=db.Query("select @@binlog_format")

?? forrows.Next(){

???? varvstring

???? rows.Scan(&v)

???? fmt.Println(v)? // 输出是MIXED (global)

?? }??

?? rows.Close()

?? db.Close()

?

?从上面的输出可以看到,set语句无效。

原因是在database/sql这个库实现中, 上面的变量db维护的是一个线程池,而不是一个线程,因此前后两次执行db.Query并不保证在同一个session里面。

同样的, set @a=1,这种线程变量也是可能在后续的select中得不到1这个值。

?

?

由于mymysql 不是基于database/sql,以下代码能确保输出19

?

mydb := mysql.New("tcp", "", "ip:port”, user, password, dbname)

??? mydb.Connect()

??? mydb.Query("set @a=19")

??? res, _ := mydb.Start("select @a")

??? for {

????? row, _ := res.GetRow()

????? if row == nil {break}

????? fmt.Println(row.Str(0))

??? }??

???

??? mydb.Close()

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage