SQL是什么?在Rails中为什么我们几乎不使用SQL?- ActiveRecord的存在理由
许多初学者在这一点上感到困惑。
使用数据库不是需要SQL吗?
但是在Rails中,我们几乎不使用SQL就可以成为Web服务?
ActiveRecord到底扮演着什么角色,以至于这是可能的呢?
本文明确解释了这一核心。
1⃣ SQL是什么?(只概括本质)
SQL(Structured Query Language)是
与数据库交互的官方语言。
在向数据库发出请求时使用SQL。
例如:
SELECT * FROM users WHERE age > 20;
这句话的意思是
“从用户表中获取年龄大于20的记录”。
可以总结SQL可以做的事情有四件。
创建 - 创建数据
读取 - 读取数据
更新 - 更新数据
删除 - 删除数据
也就是说,CRUD。
所有的Web服务最终都是通过
SQL向数据库发出CRUD请求的结构。
2⃣ 但是在Rails中几乎不使用SQL。为什么?因为有ActiveRecord。
Rails的核心组件之一就是ActiveRecord。
ActiveRecord是ORM(对象关系映射)。
这意味着什么呢?
3⃣ ORM是什么?“对象(object)↔ 数据库(table)”自动连接系统
编程语言使用对象。
user = User.new(name: "bamcoding")
数据库使用记录。
users表的第1行
ORM的作用只有一个:
将“Ruby世界的对象”与“数据库世界的记录”自动连接起来。
通过这种方式,我们可以
像处理对象一样处理数据库。
4⃣ 用ActiveRecord替代SQL的方式
例1)读取数据(Read)
SQL:
SELECT * FROM users;
Rails:
User.all
例2)条件搜索
SQL:
SELECT * FROM users WHERE age > 20;
Rails:
User.where("age > 20")
或者更Ruby风格:
User.where(age: 21..)
例3)创建(Create)
SQL:
INSERT INTO users (name, age) VALUES ('bamcoding', 34);
Rails:
User.create(name: "bamcoding", age: 34)
例4)更新(Update)
SQL:
UPDATE users SET age = 35 WHERE id = 1;
Rails:
user = User.find(1)
user.update(age: 35)
例5)删除(Delete)
SQL:
DELETE FROM users WHERE id = 1;
Rails:
user = User.find(1)
user.destroy
5⃣ 核心:Rails开发者不使用SQL,而是使用“Ruby”来处理数据库
因为ActiveRecord会
将我发出的Ruby命令
在后台转换为SQL。
也就是说,
开发者不使用SQL,但Rails在内部生成并执行SQL。
这样一来,开发者可以
在不直接控制数据库的技术负担下
专注于业务逻辑的设计。
6⃣ ActiveRecord被称为“强大”的真正原因
ActiveRecord的优势不仅仅是“不需要使用SQL”。
那只是表面上的优点。
真正的核心在于以下四点。
1)模型(Model)与数据库表自动连接
创建User模型时
会自动连接到users表。
无需命名表名
无需指定映射
Rails通过约定自动连接
这本身极大地提高了开发速度。
2)关系设置极具直观性
例如:
class Building < ApplicationRecord
has_many :rooms
end
class Room < ApplicationRecord
belongs_to :building
end
这两行代码
使Rails默认执行以下操作:
创建适当的SQL JOIN
支持building.rooms调用
管理自动外键building_id
优化基于关系的查询
要想用SQL直接实现这些
需要写几十行JOIN、INDEX、条件语句。
ActiveRecord只需两行就能搞定。
3)安全性、防注入、查询优化由Rails代劳
直接使用SQL会带来的风险:
SQL注入
由于错误查询导致性能下降
SELECT * 滥用
由于缺少INDEX导致查询缓慢
ActiveRecord
会预防大部分问题
或将其转换为安全的SQL。
这是Web开发者的安全网。
4)Ruby语法与完美集成的开发体验
可以像Ruby一样组装查询:
User.where(active: true)
.where("age > ?", 20)
.order(created_at: :desc)
.limit(10)
看起来像Ruby代码
但内部生成了优化的SQL。
这种“代码组合”能力
使ActiveRecord成为最强大的ORM之一。
7⃣ 结论 - Rails开发者几乎不使用SQL的原因
ActiveRecord将SQL的所有复杂性抽象化了
开发者只需编写Ruby代码
模型-关系-查询-保存-删除都感觉像操作Ruby对象
生产力、安全性、可维护性显著提高
ActiveRecord不仅仅是一个简单的ORM
而是Rails生产力的核心引擎。