MySQL数据库是基于 阿里云PolarDB 托管在云端的数据库,相对云数据库,支持关联查询、事务等操作。作为开发者,您可以在云函数里面使用标准SQL对数据进行操作(增删改查等常用数据操作),在小程序端不支持使用。阅读本文,了解云函数中使用MySQL数据库的常用方法。(云SDK mp-cloud-sdk >= 1.3.0)
限制项目 |
配额额度 |
数据查询 |
默认最大500条 |
允许的SQL |
Select、Update、Delete、Replace |
禁止的SQL |
Create、Alter、Truncate、Drop |
注:MySQL不限制单表大小,但单表大小受磁盘空间大小限制。
请到小程序应用控制台,在云开发模式下,选择云数据库,开通MySQL数据空间服务,并在对应的环境创建MySQL数据表,对表的字段以及索引可以进行编辑。创建完成后,点击发布,上线表。
控制台提供了快速查询表中数据的功能。
context.cloud.dataspace.executeSql(sql: string, params: array): Promise<Result>
字段名 | 类型 | 必选 | 默认值 | 说明 |
sql |
string | 是 |
- | 待执行的SQL,一般为Select、Insert、Update、Delete开头的语句 |
params |
array | 否 | - | sql中使用的参数 |
特别注意:对于数据库中为NULL的字段,请使用IFNULL语法处理。否则会导致Node中无法解析该列字段的问题。
返回一个Promise, resolve结果为数组。
(注意:SDK采用连接池管理,执行SQL后不需要显示释放连接。)
exports.select = async (context) => { try { let data = await context.cloud.dataspace.executeSql('SELECT * FROM cx_tet where id > ?', [context.data.id]); return data.length; } catch (err) { console.log(err); return { success:false, msg: err, } } } exports.insert = async (context) => { try { let data = await context.cloud.dataspace.executeSql('insert into cx_tet(name,age) values(?,?)', ['cx',18]); return data; } catch (err) { console.log(err); return { success:false, msg: err, } } } exports.update = async (context) => { try { let data = await context.cloud.dataspace.executeSql('update cx_tet set name = ? where age = ?', ['cxx',18]); return data; } catch (err) { console.log(err); return { success:false, msg: err, } } } exports.delete = async (context) => { try { let data = await context.cloud.dataspace.executeSql('delete from cx_tet where age = ?', [18]); return data; } catch (err) { console.log(err); return { success:false, msg: err, } } }
context.cloud.dataspace.beginTransaction(): Promise<Conn>
返回一个Promise, resolve结果数据库连接。
(注意:SDK采用连接池管理,开启事务后务必提交或者回滚,否则连接不会释放,超过SDK最大连接数后,将导致不可用。)
// conn为 beginTransaction 返回的连接 conn.executeSql(sql: string, params: array): Promise<Result>
字段名 | 类型 | 必选 | 默认值 | 说明 |
sql |
string | 是 |
- | 待执行的SQL,一般为Select、Insert、Update、Delete开头的语句 |
params |
array | 否 | - | sql中使用的参数 |
特别注意:对于数据库中为NULL的字段,请使用IFNULL语法处理。否则会导致Node中无法解析该列字段的问题。
返回一个Promise, resolve结果为数组。
连接执行事务提交后,连接即释放。不允许再执行SQL,如有需求,可重新开启事务或使用简单SQL执行。
// conn为 beginTransaction 返回的连接 conn.commit(): Promise<String>
连接执行回滚后,连接即释放。不允许再执行SQL,如有需求,可重新开启事务或使用简单SQL执行。
// conn为 beginTransaction 返回的连接 conn.rollback(): Promise<String>
exports.transaction = async (context) => { try { console.log(new Date().getTime()); let conn = await context.cloud.dataspace.beginTransaction(); console.log("beginTransaction"); let datas = await conn.executeSql('SELECT * FROM cx_tet where id > ?',[5]); let updates = await conn.executeSql('UPDATE cx_tet set age = ? where id > ?',[30,5]); //事务提交 await conn.commit(); //新查询,开启新事务 let conn2 = await context.cloud.dataspace.beginTransaction(); let datas2 = await conn2.executeSql('SELECT * FROM cx_tet where id > ?',[5]); //事务提交 await conn2.commit(); console.log(new Date().getTime()); console.log(updates); console.log(datas2.length); return JSON.stringify(datas.length); } catch (err) { console.log(err); return { success:false, msg: err, } } }