SQL是什么?

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

• bamchi • 5,535
目录

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生产力的核心引擎。

评论

发表评论

您的邮箱不会公开,仅用于回复通知。

继续阅读

获取新文章通知

Bamchi Blog 发布新内容时,我们会通过邮件通知您。

您的邮箱仅用于新文章通知。