SetMaxOpenConns
최대값을 설정해야 합니다. 데이터베이스 연결 수 . n이 0보다 크고 최대 유휴 연결 수보다 작은 경우, " >SetMaxOpenConns
최대값을 설정해야 합니다. 데이터베이스 연결 수 . n이 0보다 크고 최대 유휴 연결 수보다 작은 경우,
Go 언어에서 SQL이란 무엇입니까?
Dec 22, 2022 am 11:55 AMSQL은 "Structured Query Language"를 말하며 데이터베이스 생성, 데이터베이스 삭제, 레코드 쿼리, 레코드 수정, 필드 추가 등 데이터베이스를 운영하기 위한 언어입니다. SQL은 관계형 데이터베이스의 표준 언어입니다. MySQL, Oracle, SQL Server, MS Access, Sybase, Informix, Postgres 등과 같은 모든 관계형 데이터베이스 관리 시스템(RDBMS)은 SQL을 표준 처리 언어로 사용합니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.
SQL이란 무엇입니까
SQL은 데이터베이스 생성, 데이터베이스 삭제, 레코드 조회, 레코드 수정, 필드 추가 등 데이터베이스를 운영하는 언어입니다. SQL은 ANSI에 의해 표준화된 언어이지만 구현 방식은 다양합니다.
SQL은 Structured Query Language의 약어로, 중국어로 "Structured Query Language"로 번역됩니다. SQL은 관계형 데이터베이스에 저장된 데이터를 저장, 검색 및 수정하는 데 사용되는 컴퓨터 언어입니다.
SQL은 관계형 데이터베이스의 표준 언어입니다. MySQL, Oracle, SQL Server, MS Access, Sybase, Informix, Postgres 등과 같은 모든 관계형 데이터베이스 관리 시스템(RDBMS)은 SQL을 표준 처리 언어로 사용합니다.
SQL의 목적
SQL은 다음과 같은 용도로 인해 널리 사용됩니다.
사용자가 관계형 데이터베이스 시스템의 데이터에 액세스할 수 있도록 허용합니다.
사용자가 데이터를 설명할 수 있도록 허용합니다.
SQL 모듈, 라이브러리 또는 전처리기를 다른 프로그래밍 언어에 포함할 수 있습니다.
사용자가 데이터베이스, 테이블 및 데이터 항목(레코드)을 생성하고 삭제할 수 있습니다.
- 사용자가 데이터베이스에서 뷰, 저장 프로시저 및 함수를 생성할 수 있습니다.
- 사용자가 테이블, 저장 프로시저 및 뷰에 대한 권한을 설정할 수 있습니다.
- Go 언어 운영 데이터베이스(MySQL)
Go 언어 표준 라이브러리는 데이터베이스 운영을 위한 SQL 라이브러리를 제공하며, SQL 언어를 사용하여 데이터베이스를 운영할 수 있습니다.
1.1 Connect
1.1.1 종속성 다운로드
1
go get -u github.com/go-sql-driver/mysql
로그인 후 복사
1.1.2 MySQL 드라이버 사용
1 |
|
1
func Open(driverName, dataSourceName string) (*DB, error)
로그인 후 복사
OpenOpen a dirverName
, 1 |
|
dataSourceName으로 지정됨 지정된 데이터 소스에는 일반적으로 최소한 데이터베이스 파일 이름과 연결에 필요한 기타 정보가 포함됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Open 함수는 해당 매개변수가 올바른 형식인지 확인할 뿐 실제로 데이터베이스에 대한 연결을 생성하지는 않습니다. 데이터 소스의 이름이 실제이고 유효한지
확인하려면Ping 메소드를 호출
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
SetMaxOpenConns
최대값을 설정해야 합니다. 데이터베이스 연결 수 . n이 0보다 크고 최대 유휴 연결 수보다 작은 경우,
최대 유휴 연결 수는 최대 열린 연결 수 제한과 일치하도록 감소됩니다. n<=0인 경우 열린 연결의 최대 개수는 제한되지 않습니다. SetMaxOpenConns
设置与数据库建立连接的最大数目。 如果n大于0且小于最大闲置连接数,会将最大闲置连接数减小到匹配最大开启连接数的限制。 如果n<=0,不会限制最大开启连接数,默认为0(无限制)
1.1.5SetMaxIdleConns
1 |
|
连接池中的最大闲置连接数
如果n大于最大开启连接数,则新的最大闲置连接数会减小到匹配最大开启连接数的限制。 如果n<=0,不会保留闲置连接。
1.2CRUD
1.2.1 建库建表
我们先在MySQL中创建一个名为sql_test
的数据库
1 |
|
进入该数据库:
1 |
|
执行以下命令创建一张用于测试的数据表:
1 2 3 4 5 6 |
|
1.2.2 查询
单行查询
单行查询db.QueryRow()
执行一次查询,并期望返回最多一行结果(即Row)。QueryRow总是返回非nil的值,直到返回值的Scan方法被调用时,才会返回被延迟的错误。(如:未找到结果)
1 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
多行查询
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
1.2.3 插入数据
插入、更新和删除操作都使用Exec
기본값은 0(제한 없음)입니다.
1
func (db *DB)
Exec
(query string, args ...
interface
{}) (Result, error)
로그인 후 복사The 최대 유휴 연결 풀 번호
1 |
|
의 연결 n
이 최대 열린 연결 수🎜보다 큰 경우 새로운 최대 유휴 연결 수는 최대 열린 연결 수🎜의 제한 🎜과 일치하도록 줄어듭니다. 🎜n<=0이면 유휴 연결 🎜이 유지되지 않습니다. 🎜🎜🎜🎜1.2CRUD🎜🎜🎜🎜1.2.1 데이터베이스 및 테이블 구축🎜🎜🎜먼저 MySQL에서sql_test
라는 데이터베이스를 생성합니다🎜1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
🎜단일 행 쿼리🎜
🎜Single -row querydb.QueryRow()
는 쿼리를 실행하고 최대 한 행의 결과(예: Row)를 반환할 것으로 예상합니다. QueryRow는 항상 nil이 아닌 값을 반환하며 값을 반환하는 Scan 메서드가 호출될 때까지 지연된 오류를 반환하지 않습니다. (예: 결과 없음)🎜1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
|
1 |
|
🎜🎜다중 행 쿼리🎜
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Exec
메서드를 사용합니다. 🎜1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1.2.5删除数据
具体删除数据的示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
总体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
|
1.3MySQL预处理
1.3.1什么是预处理?
普通SQL语句执行过程:
客户端对SQL语句进行占位符替换得到完整的SQL语句。
客户端发送完整SQL语句到MySQL服务端
MySQL服务端执行完整的SQL语句并将结果返回给客户端。
预处理执行过程:
把SQL语句分成两部分,命令部分与数据部分。
先把命令部分发送给MySQL服务端,MySQL服务端进行SQL预处理。
然后把数据部分发送给MySQL服务端,MySQL服务端对SQL语句进行占位符替换。
MySQL服务端执行完整的SQL语句并将结果返回给客户端
1.3.2为什么要预处理?
优化MySQL服务器重复执行SQL的方法,可以提升服务器性能,提前让服务器编译,一次编译多次执行,节省后续编译的成本。
避免SQL注入问题。
1.3.3 Go实现MySQL预处理
1 |
|
查询操作的预处理示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
插入、更新和删除操作的预处理十分类似,这里以插入操作的预处理为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
总结 其实就多了一个db.Prepare(sqlStr)
1.3.4 SQL注入问题
我们任何时候都不应该自己拼接SQL语句!
1 2 3 4 5 6 7 8 9 10 11 12 |
|
此时以下输入字符串都可以引发SQL注入问题:
1 2 3 |
|
数据库 | 占位符语法 |
---|---|
MySQL | <span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, 微软雅黑, Tahoma, Arial, sans-serif">?</span> |
PostgreSQL | $1 , $2 等 |
SQLite | ? 和$1 |
Oracle | <span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, 微软雅黑, Tahoma, Arial, sans-serif">:name</span> |
위 내용은 Go 언어에서 SQL이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Golang을 사용하여 파일을 안전하게 읽고 쓰는 방법은 무엇입니까?

Golang 데이터베이스 연결을 위한 연결 풀을 구성하는 방법은 무엇입니까?

Golang 프레임워크의 오류 처리에 대한 모범 사례는 무엇입니까?
