Model
๋ชจ๋ธ ํด๋์ค ์์ฑ
์ข ๋ฅ
์ค๋ช
์
๋ชจ๋ธ ํด๋์ค
์ฒซ ๊ธ์ ๋๋ฌธ์,๋จ์ํ
Book
๋ชจ๋ธ ํด๋์ค ํ์ผ ์ด๋ฆ
์ฒซ๊ธ์ ์๋ฌธ์, ๋จ์ํ
book.rb
ํ ์ด๋ธ
์ฒซ๊ธ์ ์๋ฌธ์, ๋ณต์ํ
books
ํ ์คํธ ์คํฌ๋ฆฝํธ
xxxx_test.rb(์ฒซ๊ธ์ ์๋ฌธ์,๋จ์ํ)
book_test.rb
๋ง์ด๊ทธ๋ ์ด์
ํ์ผ๋ก ํ
์ด๋ธ ์์ฑ
๋ง์ด๊ทธ๋ ์ด์ : ํ ์ด๋ธ ๋ ์ด์์์ ์์ฑ ๋๋ ๋ณ๊ฒฝํ๊ธฐ ์ํ ๊ตฌ์กฐ.
rails dbconsole
or rails db
์ ์ฌ์ฉํ๋ฉด config/database.yml์ ์ ์๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ผ์ด์ธํธ๋ฅผ ์คํํ ์ ์๋ค.
.tables
: ํ
์ด๋ธ ๋ชฉ๋กํ์ .schema books
: booksํ
์ด๋ธ์ ๊ตฌ์กฐํ์ธ select*from books;
: booksํ
์ด๋ธ๋ด์ฉํ์ธ
์ด๋ ์ด์๊ฒ ๋ณด๊ณ ์ถ๋ค๋ฉด
.headers on
.mode columns
๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
.exit
or .quit
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ผ์ด์ธํธ ์ข
๋ฃ
๋ฐ์ดํฐ ์ถ์ถ
1. Primary Key๋ก ๊ฒ์์ ํ๋ค. (find
)
find
)find(keys)
keys:์ฃผ ํค(๋ฐฐ์ด๋ก ์ง์ ํ ์๋ ์๋ค.)
2. ์์์ ํ๋๋ก ๊ฒ์(find_by
)
find_by
):๊ฒ์ ์กฐ๊ฑด์ผ๋ก ๊ฐ์ฅ ์ฒ์ ๊ฒ์๋๋ ๋ ์ฝ๋๋ฅผ ์ถ์ถํ๋ค. find_by key: value [, ... ]
find_by
๊ฐ ๋ฆฌํดํ๋ ๋ฐ์ดํฐ๋ ํญ์ ํ๋์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ
์ด๋ธ ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋๊ฐ ํ๋๋ง ์์๋๋ง ์ฌ์ฉํ๋ค.
3. ์ง์ ํ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด ์ถ์ถ(pluck(column, ... )
)
pluck(column, ... )
): ์ฌ๋ฌ๊ฐ์ ํ๋๋ฅผ ์ง์ ํด์ ์ถ์ถํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก๋ค.
ex)
Book.where(publish: '์ ์ดํ').pluck(:title, :price)
4. ๋ฐ์ดํฐ ์กด์ฌํ์ธ(exists?
)
exists?
): ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ง ์๊ณ ์ง์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์๋์ง ์ ๋๋ง ํ์ธํ๊ณ ์ถ์๋.
5. Named Scope(์ด๋ฆ์๋ ์ค์ฝํ)
scope name , -> {exp}
: ํน์ ํ ์กฐ๊ฑด์ ๋๋ ์ ๋ ฌ์์ ๋ฏธ๋ฆฌ ๋ชจ๋ธ์ชฝ์ ์ด๋ฆ์ ๋ถ์ฌ ์ ์ฅํด๋๊ณ , ํ์ ์ด์ฉํ๊ณ ์ถ์๋ ์ด๋ฆ์ ํธ์ถํด์ ์ฌ์ฉํ๋ค.
ex)
6. ๊ธฐ๋ณธ์ค์ฝํ ์ ์(default_scope exp
)
default_scope exp
): ๋ชจ๋ธ ๊ด๋ จ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์๋์ผ๋ก ์กฐ๊ฑด์ด ์ ์ฉ๋๊ฒํ๋ ๊ธฐ๋ณธ์ค์ฝํ
ex)
7. ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋ ์ ์ถ์ถ(count
)
count
): ํน์ ์กฐ๊ฑด์ ๋ง๋ ๊ฒฐ๊ณผ ์งํฉ ๊ฐ์๋ฅผ ์ถ์ถํ ๋ ์ฌ์ฉ.
ex)
ํ๊ท (average(col)
) / ์ต์(minimum(col)
) / ์ต๋(maximum(col)
) / ํฉ (sum(col)
)
average(col)
) / ์ต์(minimum(col)
) / ์ต๋(maximum(col)
) / ํฉ (sum(col)
)๊ฒ์์ฒ๋ฆฌ - ์ฟผ๋ฆฌ ๋ฉ์๋
:find
, find_by
๋ฉ์๋์ ๋ค๋ฅด๊ฒ ํธ์ถํ๋ ์์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ง ์๋๋ค. ์ดํ์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ํ์ํ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ค. (์ง์ฐ๋ก๋(Lazy Load))
1.where
where(exp)
: ๊ธฐ๋ณธ์ ์ธ ์กฐ๊ฑด์ (exp๋ ์กฐ๊ฑด์์ ๋ํ๋ด๋ ํด์)ex)
@books = Book.where(name: 'dahye')
where์์ AND๋,
, BETWEEN ์..
, IN์name: [dahye, miyoen]
์ ํตํด์ ์ฌ๋ฌ๊ฐ์ง ์กฐ๊ฑด์ ํ๋ฒ์ ๊ฒ์ํ ์ ์๋ค.where((exp [value, ... ])
: placeholder(๋งค๊ฐ ๋ณ์๋ฅผ ๋๋ ์ฅ์)๋ฅผ ์ด์ฉํ ์กฐ๊ฑด์.
2.not
: ๋ถ์ ์กฐ๊ฑด์
ex)
Book.where.not(isbn: parmas[:id])
3.order(sort)
: ๋ฐ์ดํฐ์ ๋ ฌ
4.redorder
: ๋ฐ์ดํฐ ์ฌ์ ๋ ฌ
5.select(cols)
: ์ถ์ถํ ํ๋ ๋ช
์์ ์ง์
6.distinct([flag])
: ์ค๋ณต๋์ง ์๋ ๋ ์ฝ๋ ์ถ์ถ(์ค๋ณต์ ๊ฑฐ)
7.limit(rows)
/ offset(off)
: ์ง์ ๋ฒ์ ๋ ์ฝ๋ ์ถ์ถ
8.first
/ last
: ์ฒซ ๋ ์ฝ๋ / ๋ง์ง๋ง ๋ ์ฝ๋ ์ถ์ถ
9.group(key)
: ๋ฐ์ดํฐ ๊ทธ๋ฃนํ(ํน์ ํ ํค๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ ์ถ์ ๊ฒฝ์ฐ
10.having(exp, [,value, ... ])
: ๊ทธ๋ฃนํํ ๊ฒฐ๊ณผ์ ์ถ๊ฐ ์กฐ๊ฑด
11.!
: ๋์ !
๋ฅผ ๋ถ์ฌ ์กฐ๊ฑด์์ ์ฌ๋ฌ๊ฐ์ ์ค์๊ฑธ์ณ ๋จ๊ณ์ ์ผ๋ก ์ ์ฉํ๋๊ฒ ๊ฐ๋ฅํด์ง.
12.unscope(skips)
: ์ฟผ๋ฆฌ๋ก ๋ง๋ ์กฐ๊ฑด์ ๊ฑฐ
13.none
: ์๋ฌด๊ฒ๋ ์๋ ๊ฒฐ๊ณผ
๋ ์ฝ๋ ์ถ๊ฐ / ์์ / ์ ๊ฑฐ
์ฌ๋ฌ๊ฐ ๋ ์ฝ๋ ํ๋ฒ์ ์์ (update_all(updates)
)
update_all(updates)
)ex)
๋ ์ฝ๋ ์ ๊ฑฐ(destroy
/ delete
/ destroy_all(cond)
)
destroy
/ delete
/ destroy_all(cond)
): destroy
๋ SELECT -> DELETE ์์, delete
๋ DELETE๋ง ํธ์ถํ๋ค. ์ด๋ฌํ ์ฐจ์ด๋ก association or callback ๊ธฐ๋ฅ์ ์ฐจ์ด๊ฐ ๋๋ค. ๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ ์ ๊ฑฐ๋ง ํ ๋๋ delete๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข๋ค.
: destroy_all
์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋๋ฅผ ํ๊บผ๋ฒ์ ์ ๊ฑฐํ ๋ ์ฌ์ฉ.
ํธ๋์ญ์
์ฒ๋ฆฌ(transaction
)
transaction
): ๋ชจ๋ ๋ช ๋ น์ด์ ์ฑ๊ณต, ์คํจ๋ฅผ ํ๊บผ๋ฒ์ ๋ชจ์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค. ๋ง์ฝ ํ๊ฐ๋ผ๋ ์คํจํ๋ค๋ฉด ํธ๋์ญ์ ์ฒ๋ฆฌ๋ ์คํจํ๊ณ ์ด๋๊น์ง ์คํ๋๋ ๋ชจ๋ ๋ช ๋ น์๊ฐ ๋ฌดํจํ๋๋ค.
commmit : ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ํ์ ํ๋ ๊ฒ
Rollback : ์ฒ๋ฆฌ๋ฅผ ์คํจํด ํธ๋์ญ์ ์ํ๋ฅผ ๋๋๋ฆฌ๋๊ฒ.
ํธ๋์ญ์ ๋ถ๋ฆฌ ๋ ๋ฒจ : ์ฌ๋ฌ๊ฐ์ ํธ๋์ญ์ ์ ๋์ ์คํํ ๊ฒฝ์ฐ์ ๋์์ ํ์. ๋ถ๋ฆฌ ๋ ๋ฒจ์ด ๋์ผ๋ฉด ๊ทธ๋งํผ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋์์ง์ง๋ง ์คํ์ฑ์ ๋ฎ์์ง๋ค.
์ถฉ๋ : ๋์์ ์์ ํ๋ ๊ฒฝ์ฐ์ ๋ฐ์
ํ ์ด๋ธ์
lock_version
์ถ๊ฐ๋์์คํ์ ์ด์ค๋น
์คํ์ ์ด ์๋ํ์ธ
์์ธ๊ฒ์ถ๋ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌ
์ฉ์ด์ ๋ฆฌ
rake db:seed
: ์๋ํ์ผ์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ๋ ๋ช
๋ น์ด์ด๋ค. rake db:drop
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ ์ญ์
Last updated