SQL是什么?

SQL是什么?Rails几乎不使用SQL的原因以及ActiveRecord的作用解释。初学者开发者的困惑解决。

bamchi 495

SQL是什么?在Rails中为什么我们几乎不使用SQL?- ActiveRecord的存在理由

许多初学者在这一点上感到困惑。

  • 使用数据库不是需要SQL吗?

  • 但是在Rails中,我们几乎不使用SQL就可以成为Web服务?

  • ActiveRecord到底扮演着什么角色,以至于这是可能的呢?

本文明确解释了这一核心。


1⃣ SQL是什么?(只概括本质)

SQL(Structured Query Language)是

与数据库交互的官方语言

在向数据库发出请求时使用SQL。

例如:

SELECT * FROM users WHERE age > 20;

这句话的意思是

“从用户表中获取年龄大于20的记录”。

可以总结SQL可以做的事情有四件。

  1. 创建 - 创建数据

  2. 读取 - 读取数据

  3. 更新 - 更新数据

  4. 删除 - 删除数据

也就是说,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生产力的核心引擎

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

继续阅读

Get notified of new posts

We'll email you when Bamchi Blog publishes new content.

Your email will only be used for new post notifications.