Learn Rails5.2- ActiveRecord: sqlite3的用法, Query查询语法。乐观锁和悲观锁案例,查询语法includes(), 多态关联,destory和delete, Scope, Validats, Migrations
这会产生一个album_id列,当建立belongs_to关联时,需要用到。
references算时一种结构,会产生integer.
Database Configuration
config/database.yml中可以看到默认的数据库配置。
使用sqlite3+路径, 进入控制台。
在rails console建立一条记录,可以通过底层数据库sqlite3查看:
$ sqlite3 db/development.sqlite3
> select * from countries;
表示成功。
一次创建多条数据需要使用一个数组的hashes。
Country.create([{name: "China"}, {name:"France"}])
Country.all返回得到一个数组的Country。它是一个ActiveRecord::Relation scope object
因此,Country.all可以使用each方法。
rails db:drop 删除数据库。rails db:create, rails db:migrate三剑客。
rails db:seed建立种子文件。
find , where
使用查询方法的使用,如果是多条,必然返回一个Array。
Country.find(1)返回的是一个单独的object,他的类是Country
Country.find([1])返回的则是一个集合[],他的类是 Array
这里用到了between..and..
这里使用了and连接了2个between..and..
这里使用了in, 用于精确的指定查询条件
这里order by 和 ASC, limit
所有查询语法,条件都可以使用?, (?, ?)代替,在语法最后使用Array,按顺序列出具体条件。
not ,or
这里使用了!=
这里使用了数据库的or,另外rails语法,or()方法连接的应该是同一个数据库
(0.2ms) SELECT COUNT(*) FROM "albums" WHERE ("albums"."release_year" = ? OR "albums"."name" = ?) [["release_year", 1967], ["name", "The Beathles"]]⚠️和 Album.where(release_year:1960..1966, id: 1..5).count 的区别
自定义SQL,使用find_by_sql()方法。
模糊查找like, >= , <=
使用了AND
使用了local variable在语法内部用了#{}插入符号
链式查询:limit
这里用到limit方法限制查询记录数量。
Ablum.where(release_year: 1965..1968).order(:release_year).limit(3)
=>SELECT "albums".* FROM "albums" WHERE "albums"."release_year" BETWEEN ? AND ? ORDER BY "albums"."release_year" ASC LIMIT ? [["release_year", 1965], ["release_year", 1968], ["LIMIT", 3]]
自动的优化查询:
因为order对sum来说是无关紧要的查询条件。所以SQL没有使用order查询。
reverse_order和 order
reverse_order反转查询顺序。
Album.where(release_year: 1960..1969).order(:name).reverse_order
Pluck()方法
从检索的记录中挑出需要的字段。
这里返回一个Array,包含了所以符合查询条件的记录的名字。
可以挑出多个字段,返回嵌套数组。
⚠️Album.pluck(:id)等同于Album.ids
Select()方法 类似pluck()
返回的是一个ActiveRecord::Relation。
Calculations
average()方法。根据检索的条件,计算平均值,返回BigDecimal.
maximum(), minimum(), sum(),用法一样。
SQL EXPLAIN
大型的数据库,EXPLAIN是一个很好的debugging 方法。可以显示详细的信息。
批处理:batches
find_each,
find_in_batches: yields batches to 块,作为一个模型的数组。
见其他博客,或guide。
lock_version 乐观锁optimistic
备注:之前看rails的guide以及API, 因为是英文同时没有step to step的案例,一直没有弄明白。因此,如果某个特点在一篇教材上不懂,标记下来,可以通过查找不同的资料,如教材。一个step to step的案例是最方便理解知识点的地方了。
通过乐观锁可以锁定一个数据库的数据。
如果有多个用户同时修改同一条记录,就可能会产生冲突。 加上
Learn Rails5.2- ActiveRecord: sqlite3的用法, Query查询语法。乐观锁和悲观锁案例,查询语法includes(), 多态关联,destory和delete, Scope, Validats, Migrations的更多相关文章
- Java 中对象锁和类锁的区别? 关键字 Synchronized的用法?
一 对象锁和类锁的关系 /* * 对象锁和[类锁] 全局锁的关系? 对象锁是用于对象实例方法,或者一个对象实例上的 this 类锁是用于类的静态方法或者一个类的class对象上的. Ag.class ...
- Learn Rails5.2-- rails base(含官方指导Debugging 摘录)
豆知识扩展: <meta> https://www.cnblogs.com/chentianwei/p/9183799.html css selector div > p 选择所有 ...
- Learn Rails5.2 Bundler ; Forms
如果一个Rubyer想要提供一个功能或某个程序或程序的集合给其他Rubyer使用,这个Rubyer可以创建一个package,这个package就叫做gems. 可以通过gem install安装. ...
- Learn Rails5.2- ActiveRecord: Migration , spring的使用(不兼容的解决办法)
偶然一次: 运行rails generate停止不动,网上查找答案,可能是bundle update 之后 spring 版本变化了,和正在运行的 spring 实例不兼容. Spring导致的同样的 ...
- Learn Rails5.2 Routes。( 很少用到的参数:constraints和redirect)
Naming a Route get 'home/index', as: "different_name" 会得到prefix: different_name代替home_inde ...
- Learn Rails5.2- Scaffolding and REST,flash.now, flash.keep; Access via JSON
用generator建立一个手脚架 Representational State Transfer (REST). 具像的状态转存. https://en.wikipedia.org/wiki/Re ...
- mysql慢查询Slow Query Log和未使用索引(Not Using Indexes)查询配置和使用
mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句. 慢查询配置和使用 在msyql ...
- mysql find_in_set 与 in 的用法与区别,mysql范围搜索,mysql范围查询
mysql find_in_set 与 in 的用法与区别 1.find_in_set 用于模糊查询,并且数据库中的值是用英文逗号分隔的: 例如: (1).去字段中查询 select find_in_ ...
- 【sqli-labs】 less61 GET -Challenge -Double Query -5 queries allowed -Variation4 (GET型 挑战 双查询 只允许5次查询 变化4)
http://192.168.136.128/sqli-labs-master/Less-61/?id=1' 单引号双括号闭合 192.168.136.128/sqli-labs-master/Les ...
随机推荐
- 使用log4net做应用程序全局日志记录保存在数据库中
几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题.经验表明,日志记录往往 ...
- php array_merge和运算符+
其实很多时候我都很疑惑为什么同维度的数组不能直接使用运算+直接进行相加,然后结果就是两个数组合并的在一起的新结果,这个就有点跟array_merge合并函数类似了,接下来就来看下这两种合并的方式到底有 ...
- Dolls---hdu4160(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4160 有n个长方体形的娃娃:当长宽高都小于另一个的时候可以放进去,每一个里面最多放一个,问最优的套法下 ...
- Linux环境下proc的配置c/c++操作数据库简单示例
在虚拟机上装了oracle11g数据库,原本想利用c/c++学习操作数据库.结果感觉摊上了一个大坑.从安装好oracle数据库到配置好proc的编译选项整整花了二天.但让我意识到自己自己几点薄弱:1. ...
- mysql 表的增删改查 修改表结构
四.修改表结构 语法: . 修改表名 ALTER TABLE 表名 RENAME 新表名; . 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 ...
- 解决下载ftp文件过程中,浏览器直接解析文件(txt,png等)的问题
搭建了一个ftp服务器,供用户进行上传下载,在下载过程中发现,一些文件,例如txt,jpg,png,pdf等直接被浏览器解析了.在浏览器中显示其内容,没有下载. 下面通过网上查询得到一些解决方法: 最 ...
- ajax请求,html调用js
1:html中调用js中的函数,js使用ajax请求向后台请求,返回数据. <!DOCTYPE html> <html lang="en"> <hea ...
- 深入理解Nginx
nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...
- linux安装Navicat,界面出现乱码解决方法
下载Navicat:navicat112_mariadb_cs_x64.tar.gz 点击" ./start_navicat"安装出现界面便面为乱码 解决办法:打开start_na ...
- php5.4一下 json_encode 不转义中文
转载地址:http://www.nowamagic.net/php/php_FunctionJsonEncode.php 在 php 中使用 json_encode() 内置函数(php > 5 ...