温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是数据库Dynamic SQL

发布时间:2026-10-20 00:36:35 来源:亿速云 阅读:87 作者:小樊 栏目:数据库

数据库 Dynamic SQL(动态 SQL)指的是在程序运行期间,根据条件动态拼接、生成并执行的 SQL 语句,而不是在代码中写死(静态 SQL)。


一、静态 SQL vs 动态 SQL

1️⃣ 静态 SQL(Static SQL)

  • SQL 在编译/编写时就已经确定
  • 例子:
SELECT * FROM user WHERE id = 1;

2️⃣ 动态 SQL(Dynamic SQL)

  • SQL 在运行时根据参数、条件生成
  • 例子(伪代码):
sql = "SELECT * FROM user WHERE 1=1"
if name != null:
    sql += " AND name = " + name
if age != null:
    sql += " AND age > " + age

二、为什么需要 Dynamic SQL?

✅ 查询条件不确定
✅ 表名、字段名运行时才确定
✅ 需要根据不同业务拼接不同 SQL
✅ 减少大量 if-else 的重复 SQL 编写


三、常见使用场景

1️⃣ 多条件查询(搜索框)

SELECT * FROM product
WHERE 1=1
  AND category = ?
  AND price > ?

条件可能为空,需要动态拼接。


2️⃣ 动态表名 / 字段名

SELECT * FROM table_202501;

表名由时间动态决定。


3️⃣ 批量操作

INSERT INTO user VALUES (?,?),(?,?),(?,?);

插入数量不固定。


四、不同技术中的 Dynamic SQL

✅ MyBatis(最常见)

使用 <if>、<where>、<foreach> 等标签:

<select id="queryUser">
  SELECT * FROM user
  <where>
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age > #{age}
    </if>
  </where>
</select>

✅ JDBC(Java)

String sql = "SELECT * FROM user WHERE 1=1";
if (name != null) sql += " AND name = ?";

⚠️ 注意:容易引发 SQL 注入


✅ PL/SQL(Oracle)

EXECUTE IMMEDIATE 'SELECT * FROM ' || table_name;

五、Dynamic SQL 的风险 ⚠️

❌ SQL 注入

错误示例:

sql = "SELECT * FROM user WHERE name = '" + name + "'";

✅ 正确做法:

  • 使用 预编译(PreparedStatement)
  • 使用 ORM 框架(MyBatis / Hibernate)

六、总结一句话

Dynamic SQL 就是“运行时拼 SQL”,灵活但需注意安全。

如果你愿意,我可以:

  • 用 MyBatis 实例 讲
  • 对比 Dynamic SQL vs 存储过程
  • 讲 如何防止 SQL 注入

你想深入哪一块?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手