Informix数据库如何对其他用户所属表执行CRUD操作?
Informix 跨账号操作非归属表的SQL编写规则
Informix中跨账号操作其他用户归属的表时,引用规则如下:
- 标准显式引用格式为
所有者用户名.表名,和Oracle的SCHEMA.TABLE逻辑完全一致,所有当前主流维护版本(11.x/12.x/14.x)均支持该写法,无版本兼容问题,跨账号操作时优先推荐该写法,不会产生歧义。 - 你提到的
OWNER:TABLE是Informix 7.x以前极老版本的遗留兼容语法,目前已被废弃,日常编写SQL不需要使用该格式。 - 满足以下两个条件时,可以直接写表名、不加所有者前缀执行CRUD:
- 连接的数据库未开启ANSI兼容模式(开启ANSI模式的库,操作非自身归属表必须加所有者前缀,否则报表不存在错误)
- 目标表名在整个数据库内无重名(不存在多个不同所有者下创建同名表的情况)
生产环境注意:即使满足直接写表名的条件,只要库内存在同名表,Informix会优先匹配当前登录账号自身名下的表,匹配失败才会遍历其他所有者下的同名表,极易出现操作错表的问题,跨账号操作时建议始终显式带上所有者前缀。
带所有者前缀的CRUD语句示例如下:
-- 查询示例 SELECT * FROM b_user.order_list WHERE order_id = 1001; -- 新增示例 INSERT INTO b_user.order_list (order_id, user_id, amount) VALUES (1001, 23, 99.9); -- 更新示例 UPDATE b_user.order_list SET amount = 89.9 WHERE order_id = 1001; -- 删除示例 DELETE FROM b_user.order_list WHERE order_id = 1001;
内容的提问来源于stack exchange,提问作者ROBLCSnail
相关产品推荐
相关产品推荐

