文档中心 > 店铺动态卡片-开发指引

MySQL数据库使用说明

更新时间:2023/02/09 访问次数:6987

 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数据空间服务,并在对应的环境创建MySQL数据表,对表的字段以及索引可以进行编辑。创建完成后,点击发布,上线表。


image.png


控制台提供了快速查询表中数据的功能。


image.png


三、简单SQL

 

1. 方法签名


context.cloud.dataspace.executeSql(sql: string, params: array): Promise<Result>


2. 参数说明


字段名 类型 必选 默认值 说明

sql

string

-

待执行的SQL,一般为Select、Insert、Update、Delete开头的语句

params

array -

sql中使用的参数


特别注意:对于数据库中为NULL的字段,请使用IFNULL语法处理。否则会导致Node中无法解析该列字段的问题。


3. 返回值说明


返回一个Promise, resolve结果为数组。

注意:SDK采用连接池管理,执行SQL后不需要显示释放连接。

 

4. 示例

 

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,  }  
  } 
}

 

四、事务管理

 

1. 开启事务


context.cloud.dataspace.beginTransaction(): Promise<Conn>


返回值说明


返回一个Promise, resolve结果数据库连接。

注意:SDK采用连接池管理,开启事务后务必提交或者回滚,否则连接不会释放,超过SDK最大连接数后,将导致不可用。

 

2. 执行SQL


// conn为 beginTransaction 返回的连接 
conn.executeSql(sql: string, params: array): Promise<Result>

 

1)参数说明


字段名 类型 必选 默认值 说明

sql

string

-

待执行的SQL,一般为Select、Insert、Update、Delete开头的语句

params

array -

sql中使用的参数


特别注意:对于数据库中为NULL的字段,请使用IFNULL语法处理。否则会导致Node中无法解析该列字段的问题。


2)返回值说明


返回一个Promise, resolve结果为数组。

 

3. 事务提交


连接执行事务提交后,连接即释放。不允许再执行SQL,如有需求,可重新开启事务或使用简单SQL执行。


// conn为 beginTransaction 返回的连接 
conn.commit(): Promise<String>

 

4. 事务回滚


连接执行回滚后,连接即释放。不允许再执行SQL,如有需求,可重新开启事务或使用简单SQL执行。


// conn为 beginTransaction 返回的连接 
conn.rollback(): Promise<String>

 

5. 示例


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,  }  
  } 
}


FAQ

关于此文档暂时还没有FAQ
返回
顶部