跳转到内容

环/课程/MySQL 函数

来自维基教科书,开放的书籍,开放的世界

MySQL 函数

[编辑 | 编辑源代码]

在本章中,我们将学习环编程语言提供的 MySQL 函数。在使用这些函数之前,请加载 mysqllib.ring 库

	load "mysqllib.ring"
  • MySQL_Info()
  • MySQL_Init()
  • MySQL_Error()
  • MySQL_Connect()
  • MySQL_Close()
  • MySQL_Query()
  • MySQL_Insert_ID()
  • MySQL_Result()
  • MySQL_Next_Result()
  • MySQL_Columns()
  • MySQL_Result2()
  • MySQL_Escape_String()
  • MySQL_AutoCommit()
  • MySQL_Commit()
  • MySQL_Rollback()

MySQL_Info() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Info() 函数获取 MySQL 客户端版本。

语法

	MySQL_Info() ---> string contains the MySQL Client version

示例

	see "MySQL Client Version : " + mysql_info()

输出

	MySQL Client Version : 6.1.5

MySQL_Init() 函数

[编辑 | 编辑源代码]

我们可以通过 MySQL_Init() 函数开始使用 MySQL 客户端。

语法

	MySQL_Init() ---> MySQL Handle

MySQL_Error() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Error() 函数从 MySQL 客户端获取错误消息。

语法

	MySQL_Error(MySQL Handle) ---> Error message as string

MySQL_Connect() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Connect() 函数连接到 MySQL 数据库服务器。

语法

	MySQL_Connect(MySQL Handle, cServer, cUserName, cPassword) ---> lStatus

MySQL_Close() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Close() 函数关闭与 MySQL 数据库的连接

语法

	MySQL_Close(MySQL Handle)

MySQL_Query() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Query() 函数执行 SQL 查询

语法

	
	MySQL_Query(MySQL Handle, cSQLQuery)

创建数据库

[编辑 | 编辑源代码]

下面的示例连接到 MySQL 服务器,然后创建新的数据库。

	See "MySQL Test - Create Database" + nl
	con = mysql_init()

	See "Connect" + nl
	if mysql_connect(con,"localhost","root","root") = 0
		see "Cann't connect" + nl
		see "Error : " + mysql_error(con) + nl
		mysql_close(con)
		bye
	ok

	See "Create Database..." + nl
	mysql_query(con,"CREATE DATABASE mahdb")

	See "Close Connection" + nl
	mysql_close(con)

输出

	MySQL Test - Create Database
	Connect
	Create Database...
	Close Connection

创建表格并插入数据

[编辑 | 编辑源代码]

下面的示例创建新的表格并插入记录

	func main
		see "Create Table and Insert Records" + nl
		con = mysql_init()

		see "Connect" + nl
		if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
			system_error(con) 
		ok

		see "Drop table" + nl
		if mysql_query(con, "DROP TABLE IF EXISTS Employee")  system_error(con) ok
  
		see "Create table" + nl
		if mysql_query(con, "CREATE TABLE Employee(Id INT, Name TEXT, Salary INT)") 
		   system_error(con) ok
 
 		see "Insert data" + nl 
		if mysql_query(con, "INSERT INTO Employee VALUES(1,'Mahmoud',15000)") 
		   system_error(con) ok
  
		if mysql_query(con, "INSERT INTO Employee VALUES(2,'Samir',16000)") 
		   system_error(con) ok

		if mysql_query(con, "INSERT INTO Employee VALUES(3,'Fayed',17000)")  
		   system_error(con) ok

		see "Close connection" + nl
		mysql_close(con) 

	func system_error con
		see mysql_error(con)  mysql_close(con)  bye

输出

	Create Table and Insert Records
	Connect
	Drop table
	Create table
	Insert data
	Close connection

MySQL_Insert_ID() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Insert_ID() 函数获取插入的行 ID

语法

	MySQL_Insert_ID() ---> Inserted row id as number

示例

	con = mysql_init()
	see "connect to database" + nl
	mysql_connect(con,"localhost","root","root","mahdb")
	see "drop table" + nl
	mysql_query(con, "DROP TABLE IF EXISTS Customers")
	see "create table" + nl
	mysql_query(con, "CREATE TABLE Customers(Id INT PRIMARY KEY AUTO_INCREMENT, Name TEXT)")
	see "insert record" + nl
	mysql_query(con, "INSERT INTO Customers(Name) VALUES('Mahmoud')")
	see "insert record" + nl
	mysql_query(con, "INSERT INTO Customers(Name) VALUES('Samir')")
	see "insert record" + nl
	mysql_query(con, "INSERT INTO Customers(Name) VALUES('Fayed')")
	see "insert record" + nl
	mysql_query(con, "INSERT INTO Customers(Name) VALUES('Test 2015')")

see "inserted row id : " + mysql_insert_id(con) + nl see "close database" + nl mysql_close(con)

输出

	connect to database
	drop table
	create table
	insert record
	insert record
	insert record
	insert record
	inserted row id : 4
	close database

MySQL_Result() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Result() 函数获取查询结果(不带列名的数据)。

语法

	MySQL_Result(MySQL Handle) ---> List contains the query result

MySQL_Next_Result() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Next_Result() 函数移动到下一个查询结果。当我们在同一个查询中有多个 SQL 语句时,我们使用此函数。

语法

	MySQL_Next_Result(MySQL Handle)
[编辑 | 编辑源代码]

下面的示例在数据库上执行一个查询,然后打印结果。

	con = mysql_init()
	see "Connect to database" + nl
	mysql_connect(con, "localhost", "root", "root","mahdb")
	see "Execute Query" + nl
	mysql_query(con, "SELECT Name FROM Employee WHERE Id=1;"+
			 "SELECT Name FROM Employee WHERE Id=3")
	see "Print Result" + nl 
	see mysql_result(con)
	mysql_next_result(con)
	see mysql_result(con)
	see "close database" + nl
	mysql_close(con)

输出

	Connect to database
	Execute Query
	Print Result
	Mahmoud
	Fayed
	close database

MySQL_Columns() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Columns() 函数获取列名列表。

语法

	MySQL_Columns(MySQL Handle) ---> List contains columns information

示例

	con = mysql_init()
	see "Connect to database" + nl
	mysql_connect(con, "localhost", "root", "root","mahdb")
	see "Execute Query" + nl
	mysql_query(con, "SELECT * FROM Employee")
	see "Result" + nl 
	see mysql_columns(con)
	see "Close database" + nl
	mysql_close(con)

输出

	Connect to database
	Execute Query
	Result
	Id
	11
	3
	32768
	Name
	65535
	252
	16
	Salary
	11
	3
	32768
	Close database

MySQL_Result2() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Result2() 函数获取所有列名和查询结果,而不是使用 MySQL_Result() 函数获取不带列名的结果数据。

语法

	MySQL_Result2(MySQL Handle) ---> List (query result starts with columns names)

示例

	con = mysql_init()
	see "Connect to database" + nl
	mysql_connect(con, "localhost", "root", "root","mahdb")
	see "Execute Query" + nl
	mysql_query(con, "SELECT * FROM Employee")
	see "Print Result" + nl 
	see mysql_result2(con)
	see "Close database" + nl
	mysql_close(con)

输出

	Connect to database
	Execute Query
	Print Result
	Id
	Name
	Salary
	1
	Mahmoud
	15000
	2
	Samir
	16000
	3
	Fayed
	17000
	Close database


MySQL_Escape_String() 函数

[编辑 | 编辑源代码]

在使用 MySQL_Escape_String() 函数处理后,我们可以将二进制数据和特殊字符存储在数据库中

语法

	MySQL_Escape_String(MySQL Handle, cString) ---> String after processing

将图像保存到数据库

[编辑 | 编辑源代码]

示例

	See "Read file" + nl
	cFile = read("tests\mahmoud.jpg")
	con = mysql_init()
	See "Connect to database..." + nl
	mysql_connect(con, "localhost", "root", "root","mahdb")
	See "Escape string..." + nl
	cFile = mysql_escape_string(con,cFile)
	stmt = "INSERT INTO photo(id, data) VALUES(1, '" + cFile + "')"
	See "Insert data..." + nl
	mysql_query(con,stmt)
	See "Close database..." + nl
	mysql_close(con)

输出

	Read file
	Connect to database...
	Escape string...
	Insert data...
	Close database...

从数据库恢复图像

[编辑 | 编辑源代码]

示例

	con = mysql_init()
	See "Connect to database..." + nl
	mysql_connect(con, "localhost", "root", "root","mahdb")
	See "Read data from database..." + nl
	mysql_query(con,"SELECT data FROM photo WHERE id=1")
	See "Write new file" + nl
	result = mysql_result(con)
	write("tests\mahmoud2.jpg",result[1][1])
	See "Close database..." + nl
	mysql_close(con)

输出

	Connect to database...
	Read data from database...
	Write new file
	Close database...


MySQL_AutoCommit() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_AutoCommit() 函数启用或禁用自动提交功能。

语法

	MySQL_AutoCommit(MySQL Handle, lStatus)  # lstatus can be True/False

MySQL_Commit() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Commit() 函数提交对数据库的更新。

语法

	MySQL_Commit(MySQL Handle)

MySQL_Rollback() 函数

[编辑 | 编辑源代码]

我们可以使用 MySQL_Rollback() 函数回滚对数据库的更新。

语法

	MySQL_Rollback(MySQL Handle)

事务示例

[编辑 | 编辑源代码]

以下示例演示了 MySQL_Autocommit()、MySQL_Commit() 和 MySQL_RollBack() 函数的使用。

示例

	func main
	
		con = mysql_init()

		see "Connect" + nl
		if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
			system_error(con) ok

		see "Drop table" + nl
		if mysql_query(con, "DROP TABLE IF EXISTS Employee2") 
			system_error(con) ok
  
		see "Create table" + nl
		if mysql_query(con, "CREATE TABLE Employee2(Id INT, Name TEXT, Salary INT)")
			system_error(con) ok
 
 		see "Insert data" + nl 
		if mysql_query(con, "INSERT INTO Employee2 VALUES(1,'Mahmoud',15000)") 
			system_error(con) ok
  
		if mysql_query(con, "INSERT INTO Employee2 VALUES(2,'Samir',16000)")
			system_error(con) ok

		if mysql_query(con, "INSERT INTO Employee2 VALUES(3,'Fayed',17000)") 
			system_error(con) ok

		mysql_autocommit(con,False)
		mysql_query(con, "INSERT INTO Employee2 VALUES(4,'Ahmed',5000)")
		mysql_query(con, "INSERT INTO Employee2 VALUES(5,'Ibrahim',50000)")
		mysql_query(con, "INSERT INTO Employee2 VALUES(6,'Mohammed',50000)")
		See "Save transaction (y/n) " give nChoice
		if upper(nChoice) = "Y"
			mysql_commit(con)
		else
			mysql_rollback(con)
		ok

		see "Close connection" + nl
		mysql_close(con) 

	func system_error con

		see mysql_error(con)
		mysql_close(con)
		bye

输出

	Connect
	Drop table
	Create table
	Insert data
	Save transaction (y/n) y
	Close connection


华夏公益教科书