下载本手册

2.6动态SQL

存在用于转义SQL名称和标识符的引号函数。Session.quoteName()根据当前连接的设置转义给定的标识符。

注意

引号函数不能用于转义值。使用的值绑定语法Session.sql()相反看见第2.4节,“在会话中使用SQL”例如。

MySQL Shell JavaScript代码

函数createTestTable(session,name){//使用escape函数引用names/identifier quoted\u name=session.quoteName(name);session.sql(“DROP TABLE IF EXISTS”+quoted_name).execute();var create=“创建表”;create+=引用的名称;create+=“(id INT NOT NULL主键自动递增)”;session.sql(create.execute();return session.getCurrentSchema().getTable(名称);}var mysqlx=require('mysqlx');var session=mysqlx.getSession('用户:密码@localhost:33060/test');var default_schema=session.getDefaultSchema().name;session.setCurrentSchema(默认模式);//创建一些表var table1=createTestTable(会话“test1”);var table2=createTestTable(会话,“test2”);

MySQL Shell Python代码

def createTestTable(会话,名称):#使用转义函数引用名称/标识符quoted_name=session.quote_name(name)session.sql(“DROP TABLE IF EXISTS”+quoted_name).execute()create=“create TABLE”create+=quoted_name create+=”(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)“session.sql(create).execute()返回session.get_current_schema().get_TABLE(name)frommysqlsh import mysqlx session=mysqlx.get\u session('用户:密码@localhost:33060/test')default_schema=session.get_default_schema().name session.set_current_schema(default_schema)#创建一些表table1=createTestTable(session,'test1')table2=createTestTable(session,'test2')

Node.js JavaScript代码

var mysqlx=require('mysqlx');函数createTestTable(session,name){var create='创建表';创建+=名称;create+='(id INT NOT NULL主键自动递增)';return session.sql('DROP TABLE IF EXISTS'+name).execute().then(function(){return session.sql(create).execute();});}var会话;getSession({user:'user',password:'password'});return session.sql('use myschema').execute()}).then(function(){//创建一些表return Promise.map([createTestTable(session,'test1'),createTestTable(session,'test2')]))}).then(function(){session.close();})});

C代码

var session=MySQLX.GetSession(“服务器=localhost;端口=33060;user=用户;密码=密码;"); SQL(“use test;”)。执行();session.GetSchema(“test”);//创建一些表var table1=CreateTestTable(会话,“test1”);var table2=CreateTestTable(会话,“test2”);
private Table CreateTestTable(Session Session,string name){//使用escape函数引用name/identifier string quoted\u name=“`”+name+“`”;session.SQL(“DROP TABLE IF EXISTS”+quoted_name).Execute();var create=“创建表”;create+=引用的名称;create+=“(id INT NOT NULL主键自动递增)”;session.SQL(create.Execute();return session.Schema.GetTable(名称);}

Python代码

#连接器/Python def createTestTable(会话,名称):#使用转义函数引用名称/标识符quoted_name=session.quote_name(name)session.sql(“DROP TABLE IF EXISTS”+quoted_name).execute()create=“create TABLE”create+=quoted_name create+=”(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT)“session.sql(create).execute()返回session.get_current_schema().get_TABLE(name)frommysqlsh import mysqlx session=mysqlx.get\u session('用户:密码@localhost:33060/test')default_schema=session.get_default_schema().name session.set_current_schema(default_schema)#创建一些表table1=createTestTable(session,'test1')table2=createTestTable(session,'test2')

Java代码

Java当前不支持quoteName()方法。

C++代码

#include//注意:以下功能尚未由//Connector/C++实现://-datasource配置文件,//-quoteName()方法。Table createTestTable(Session&Session,const string&name){string quoted\u name=string(“`”)+Session.getDefaultSchemaName()+L“`.`”+name+L“`”;session.sql(string(“DROP TABLE IF EXISTS”)+带引号的\u name).execute();string create=“创建表”;create+=引用的名称;create+=L“(id INT NOT NULL主键自动递增)”;session.sql(create.execute();return session.getDefaultSchema().getTable(name);}会话(33060,“用户”、“密码”);table1=createTestTable(会话,“test1”);table2=createTestTable(会话,“test2”);

使用X DevAPI的代码不需要转义标识符。这对于使用集合和关系表是正确的。