考试考完了。是那种计算机的社会考试,恶补一些以前疏忽的东西,顺便考个证的,考务费才105钱。整体感受是,虚惊一场……
我从一开始就搞错课程了,本来应该考三级,名字是“数据库XX”,但是我决定考二级,叫“mysqlXXX“。数据库的范围更大一点,三级比两级也难。
备考时间大概一个月吧,从买教材开始。不过mysql因为工作要用,增删改查是很熟的,但确实,我看了公司测试服的数据,就一个view,没有trigger,没有event,procedure,function……
emm,谁跟我说来着的,java程序员喜欢什么事都用sql解决??
以及要吐槽,昨天公司服务器神tm又被攻击了,把所有索引都拖走清空了,留了一句话,英文的,大意是,你还想要你的数据吗,还要的话赶紧给我0.05比特币!啊……虽然比特币现在是挺高的,但是第一次看到赎金不是整数的。
接着说view,trigger,event,procedure,function。我原来用ror写程序的时候,除了表、索引,非空,默认值这些会弄一弄,视图?触发器?不存在的啦。
比如要做一个视图,基于学生表,做一张男生表的视图。
那只要在models文件夹下的student.rb里加一句就可以达到类似效果:
scope :male_all, -> {where (['sex= ?','男'])}
之后,如果是查询所有学生,使用Student.all,查询所有男生,使用Student.male_all
还可以再连其他搜索条件比如:
Student.male_all.where('age>?',10).order('studentNo desc).offset(0).limit(10)
作为补充,来讲一下rails下是怎么做查询的。
下面是sql主要的查询语句形式
SELECT 查询列表 FROM 表
【join_typeJOIN 表2 ON 连接条件
WHERE 筛选条件
GROUP BY 分组字段 HAVING 分组后筛选
ORDER BY 排序字段
LIMIT offset,size】;
最粗暴的方式就是使用find_by_sql,把语句直接扔进去,就可以了。
如果想要好好利用activerecord,那么用rails代码可以写出这样的东西:
Student.select(name, sum(score)
).joins([:klass]
).where(klass.name='三年一班'
).group(name
).having(sum(score)>600
).order(sum(score) desc
).limit(0
).offset(10)
其中,如果一开始就要select筛选列,或者where筛选条件,或者使用定义的scope,那么.all就是不用写的。
第二,joins是inner join,也就是交运算,而使用includes关键词的话则是left outer join。joins和includes是非常常用的两个关键字,前者会根据条件缩减行数,后者则不会缩减行数。
第三,:class 是在model中已经预先配置好的关系,这些关系包括belongs_to, has_one, has_many, has_and_belongs_to_many。透过一个奇妙的through关键字还可以做到:
student
belongs_to :klass # 即在student表中有klass_id外键
klass
belongs_to :grade
has_many :students
grade
has_many :klasses
那么
student
has_one :grade, :through => :klass
grade
has_many :students, :through => :klass
再来说trigger,rails在model里可以写一堆callback的东西,比如before_save, after_save, before_create, after_destroy等等。
参考:https://www.jianshu.com/p/4cde0edc5899
create触发的回调(按顺序)before_validation、after_validation、before_save、before_create、after_create、after_save
update触发的回调 before_validation、after_validation、before_save、before_update、around_update、after_update、after_save
destroy触发的回调 before_destroy、after_destroy
touch触发的回调 after_touch
至于event,同类的效果我在工作中用sidekiq来做。
存储过程,存储函数么……天天写代码不就是在写函数吗!
网友评论