SlashDB 在 MySQL 中执行存储函数后未提交事务
SlashDB doesn't commit transaction after executing a stored function in MySQL
我在 MySQL 5.7 上安装了 SlashDB。我用它来提供自定义 REST API 调用,以允许其他人访问数据库中的数据。其中大部分是通过 'SQL Pass-thru' 功能实现的。
直接执行 SQL 查询时,会立即提交对数据库的更改。但是,当我执行存储函数时(通过 select [function name]
),情况并非如此。该函数将完美执行,但在我发出 commit;
之前不会提交对数据的任何更改。主要问题是这会导致表和其他 MySQL 对象的锁滞留。
有人知道这里发生了什么吗?
目前唯一的解决方法是手动将 ?autocommit=true
添加到 /etc/slashdb/databases.cfg
中的连接字符串。
例如
myChinook:
alternate_key: {}
autoconnect: true
autoload: true
autoload_user: {dbpass: chinook, dbuser: chinook}
connection: 127.0.0.1:3308/Chinook?autocommit=true
creator: admin
db_encoding: utf-8
db_id: myChinook
db_schema: null
db_type: mysql
desc: ''
excluded_columns: {}
execute: []
foreign_keys: {}
owners: [admin]
read: []
write: []
手动更改文件后,您需要重新启动 SlashDB 服务
sudo service slashdb stop
sudo service slashdb start
或者在存储函数上调用存储过程而不是 select。
我在 MySQL 5.7 上安装了 SlashDB。我用它来提供自定义 REST API 调用,以允许其他人访问数据库中的数据。其中大部分是通过 'SQL Pass-thru' 功能实现的。
直接执行 SQL 查询时,会立即提交对数据库的更改。但是,当我执行存储函数时(通过 select [function name]
),情况并非如此。该函数将完美执行,但在我发出 commit;
之前不会提交对数据的任何更改。主要问题是这会导致表和其他 MySQL 对象的锁滞留。
有人知道这里发生了什么吗?
目前唯一的解决方法是手动将 ?autocommit=true
添加到 /etc/slashdb/databases.cfg
中的连接字符串。
例如
myChinook:
alternate_key: {}
autoconnect: true
autoload: true
autoload_user: {dbpass: chinook, dbuser: chinook}
connection: 127.0.0.1:3308/Chinook?autocommit=true
creator: admin
db_encoding: utf-8
db_id: myChinook
db_schema: null
db_type: mysql
desc: ''
excluded_columns: {}
execute: []
foreign_keys: {}
owners: [admin]
read: []
write: []
手动更改文件后,您需要重新启动 SlashDB 服务
sudo service slashdb stop
sudo service slashdb start
或者在存储函数上调用存储过程而不是 select。