gosql
‘壹’ 怎么判断go-sql-driver 安装成功
go操作mysql的驱动包很多,这里讲解当下比较流行的Go-SQL-Driver/MySQL
1.下载安装
执行下面两个命令:
下载:go get github.com/Go-SQL-Driver/MySQL
安装:go install github.com/Go-SQL-Driver/MySQL
安装完成以后的文件截图
root/go_s是go工作目录,环境变量:$GOPATH中设置的值
2.导入包
import (
"database/sql"
_"github.com/Go-SQL-Driver/MySQL"
)
3.链接数据库
Open函数:
db, err := sql.Open("mysql", "用户名:密码@tcp(IP:端口)/数据库?charset=utf8")
例如:db, err := sql.Open("mysql", "root:111111@tcp(127.0.0.1:3306)/test?charset=utf8")
4.增删改查
下面例子中的表结构:
CREATE TABLE `userinfo` (
`uid` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(64) DEFAULT NULL,
`departname` varchar(64) DEFAULT NULL,
`created` date DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
截图:
增加
有两种方法:
1.直接使用Exec函数添加
result, err := db.Exec("INSERT INTO userinfo (username, departname, created) VALUES (?, ?, ?)","lily","销售","2016-06-21")
2.首先使用Prepare获得stmt,然后调用Exec添加
stmt, err := db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")
res, err := stmt.Exec("zhja", "研发", "2016-06-17")
另一个经常用到的功能,获得刚刚添加数据的自增ID
id, err := res.LastInsertId()
相关代码截图:
删除
删除和上面的增加语法一样,只是把其中的INSERT语句改为DELETE语句
修改
修改和上面的增加语法一样,只是把其中的INSERT语句改为UPDATE语句
查询
查询单条数据,QueryEow 函数
var username, departname, created string
err := db.QueryRow("SELECT username,departname,created FROM userinfo WHERE uid=?", 3).Scan(&username, &departname, &created)
代码截图:
查询多条数据,并遍历
Query 获取数据,for xxx.Next() 遍历数据
5.事务
在操作数据库之前执行,db.Begin()
例:tx, err := db.Begin()
保存到数据库:err := tx.Commit()
回滚:err := tx.Rollback()
注意设置事务以后操作数据库就不是db了,而是tx
‘贰’ SQL 中go的意义
go不是 Transact-SQL 语句,而是 osql 和 isql 实用工具及 SQL Server 查询分析器才能识别的命令。
go其实就是个分隔符,将语句分隔开,但go又不仅仅是个分隔符,比如你给的代码,如果没有go有可能会执行出错,究其原因,主要是因为其前后的语句是两个独立的事务。
go语句分隔的部分会被分别编译为两个执行计划。
‘叁’ sql中GO语句可用可不用吗什么时候有用以及如何使用
GO
向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。
例子1:
USE AdventureWorks;
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello, World.'
GO -- @MyMsg is not valid after this GO ends the batch.
-- Yields an error because @MyMsg not declared in this batch.
PRINT @MyMsg
GO
SELECT @@VERSION;
-- Yields an error: Must be EXEC sp_who if not first statement in
-- batch.
sp_who
GO
SQL Server 应用程序可以将多个 Transact-SQL 语句作为一个批发送到 SQL Server 的实例来执行。然后,该批中的语句被编译成一个执行计划。程序员在 SQL Server 实用工具中执行特殊语句,或生成 Transact-SQL 语句的脚本在 SQL Server 实用工具中运行时,使用 GO 作为批结束的信号。
例子2
USE AdventureWorks;
GO
DECLARE @NmbrContacts int
SELECT @NmbrContacts = COUNT(*)
FROM Person.Contact
PRINT 'The number of contacts as of ' +
CAST(GETDATE() AS char(20)) + ' is ' +
CAST(@NmbrContacts AS char (10))
GO
‘肆’ SQL语句中go有什么作用
如果只是执行一条语句,有没有GO都一样
如果多条语句之间用GO分隔开就不一样了
每个被GO分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。
例如:
首先同时执行下边的语句
select * from sysobjects where id=a
select getdate()
你会发现会报错,并且不会显示任何结果集
而你再执行
select * from sysobjects where id=a
go
select getdate()
go
你会发现尽管同样会报错,但结果集中包含select getdate()的结果。
‘伍’ SQL中GO 是用来干嘛的
SQL Server的工具中(比如:SQL Server Management Studio) 标志着一组T-SQL语句的结尾符号。
比如说:
USEAdventureWorks2012;
GO
DECLARE@NmbrPeopleint
SELECT@NmbrPeople=COUNT(*)
FROMPerson.Person;
PRINT'Thenumberofpeopleasof'+
CAST(GETDATE()ASchar(20))+'is'+
CAST(@NmbrPeopleASchar(10));
GO
不过这个是结尾标志符号是可以自定义的,你可以改为你想要的字符。
你可以在MSDN中找到更多关于Go语句的内容
http://msdn.microsoft.com/en-us/library/ms188037.aspx
‘陆’ 关于SQL “GO”用法
go就是用于一个sql语句的结束 比如说一个批处理语句是这样的 select *from b select *from a 在后一个select后面加上一个go这样可以一次执行两条sql 语句
‘柒’ 请问SQL中,GO、use的意思
GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个GO)
Use 是改变 对哪个数据库的操作
http://blog.sina.com.cn/s/blog_475689f301000bol.html
‘捌’ 请问SQL语句中go有什么作用
如果只是执行一条语句,有没有go都一样
如果多条语句之间用go分隔开就不一样了
每个被go分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。
例如:
首先同时执行下边的语句
select
*
from
sysobjects
where
id=a
select
getdate()
你会发现会报错,并且不会显示任何结果集
而你再执行
select
*
from
sysobjects
where
id=a
go
select
getdate()
go
你会发现尽管同样会报错,但结果集中包含select
getdate()的结果。
‘玖’ sql语句中go的用法
go之前的语句作为一个批处理执行,
为了区分多个批处理而设的分隔符.,代表一个批处理的结束.
批处理是包含一个或多个 Transact-SQL 语句的组
Create,Alter这些语句可能不能其他语句在同一个批处理中执行。
‘拾’ 关于sql 中 use go 的具体用法
SQL脚本是一种用SQL语言写的批处理文件(.sql),SQL脚本通常可以由SQL查询分析器来执行。
=====================================================
GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个GO)
语法
GO
注释
GO 不是Transact-SQL语句;而是可为cmdsql和osql实用工具及SQL Server查询分析器识别的命令。
SQL Server实用工具将GO解释为应将当前的Transact-SQL批处理语句发送给SQL Server的信号。当前批处理语句是自上一GO命令后输入的所有语句,若是第一条GO命令,则是从特殊会话或脚本的开始处到这条GO命令之间的所有语句。
GO命令和Transact-SQL语句不可在同一行上。但在GO命令行中可包含注释。
用户必须遵照使用批处理(.sql)的规则。
例如,在批处理(.sql)中的第一条语句后执行任何存储过程必须包含EXECUTE关键字。
再有,局部(用户定义)变量的作用域限制在一个批处理中,不可在GO命令后引用。
USE pubs
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello,World.'
GO --@MyMsg is not valid after this GO ends the batch.
--Yields an error because @MyMsg not declared in this batch.
PRINT @MyMsg
GO
SELECT @@VERSION;
--Yields an error: Must be EXEC sp_who if not first statement in
--batch.
sp_who
GO
SQL Server应用程序可将多条Transact-SQL语句作为一个批处理发给SQL Server去执行。在此批处理中的语句编译成一个执行计划。程序员在SQL Server实用工具中执行特定语句,或生成Transact-SQL语句脚本在SQL Server实用工具中运行,用GO来标识批处理的结束。
如果基于DB-Library、ODBC或OLE DB APIs的应用程序试图执行GO命令时会收到语法错误。SQL Server实用工具永远不会向服务器发送GO命令。
权限
GO 是一个不需权限的实用工具命令。可以由任何用户执行。
示例
下面的示例创建两个批处理。第一个批处理只包含一条USE pubs语句,用于设置数据库上下文。剩下的语句使用了一个局部变量,因此所有的局部变量声明必须在一个批处理中。这一点可通过在最后一条引用此变量的语句之后才使用GO命令来做到。
USE pubs
GO
DECLARE @NmbrAuthors int
SELECT @NmbrAuthors = COUNT(*)
FROM authors
PRINT 'The number of authors as of' +
CAST(GETDATE() AS char(20)) + 'is' +
CAST(@NmbrAuthors AS char (10))
GO
=================================================
USE //改变当前操作数据库
用法:
USE 数据库名
例:
CREATE DATABASE XX1 --创建XX1数据库
………………
GO
CREATE DATABASE XX2 --创建XX2数据库
………………
GO
USE XX1 --转到XX1数据库
GO
………… --对XX1数据库的操作
GO
USE XX2 --转到XX2数据库
GO
………… --对XX2数据库的操作
GO
USE在存储过程中不能直接使用
但可以这样用:
create proc test
as
exec('use pubs select * from jobs') --或者exec(use pubs) exec sp_adser 'xxxx'
go
--使用Exec(ute)语句配合USE来改变当前数据库,但数据库环境的更改只在Execute语句结束前有效,所以必须把后面的语句和Execute放到一起
exec test