SQL is a standard language for storing, manipulating and retrieving data in databasee.
关系型数据库:RDBMS(Relational Database Mangement System)
SQLite3:
Rails默认的轻量级数据库,集成于Rails中,在db/development.sqlite3这个档案中。
用途:单机用途。所以在实际部署的时候会换成MySQL等数据库服务器。
MySQL:
目前流行的开源数据库。这是一个数据库服务器,要连接它需要数据库的账号密码。
Mac上用 brew install mysql 安装MySQL,推荐再安装 Sequal Pro 这套Gui(Graphical User interface,图形用户界面)软件
如果有人问你数据库的原理,叫他看这篇文章http://blog.jobbole.com/100349/
一些学习资料:
https://www.udacity.com/course/intro-to-relational-databases--ud197
https://launchschool.com/books/sql/read/introduction
https://www.codecademy.com/learn/learn-sql
https://www.codecademy.com/learn/sql-analyzing-business-metrics
https://en.wikibooks.org/wiki/SQL_Exercises
https://pgexercises.com/
http://sqlzoo.net/wiki/SQL_Tutorial
rdbms的特点:
一 schema:使用前先定义tables和columns,同时定义每个column的Data Type.
Data Type:
varchar或text:
Integer,Decimal,Float:
Blob二进制:可以存放档案。但是通常不建议把档案直接塞数据库,一来数据库塞太大不容易备份和管理、二来没有什么好处,因为你也没办法针对二进制档案进行条件搜寻和过滤。人们对于读档案也有心理准备会比较慢。所以通常只会在数据库里面纪录档案的 metadata 例如档名、大小、MimeType 等等,而实际的档案则放在档案系统上,或是上传到七牛或AWS S3等空间。
Boolean:
Date, Time, Datetime:
pasting
create_table :events do |t| t.string :name t.text :description t.integer :capacity t.integer :user_id, :null => false //这个是限制constraint,这里是不能为空;
大多验证一般放在rails model中,这样比较有弹性,在DB层是硬性条件,无法跳过。 t.timestamps end
二 SQL standard language (Structured Query Language)
所有关系型数据库都使用SQL的结构化查询语言,来操作database.for example:
1. INSERT INTO events VALUES ("RubyConf", 100); //插入一条数据到events表
2. SELECT * FROM events; //拿出所有数据
三 ACID(4个特性)
Transaction:a process of doing business.把一组动作打包一起执行。使用BEGIN;...COMMIT; 可以保证数据存取的正确性;要么一起成功,要么一起失败。
Atomicity: 一个transaction就是一个原子。
Consistency:一致性,保证transaction前后数据库的完整性没有被破坏。
Isolation:隔离性:数据库允许多个并发的transaction同时进行,互不干扰。
Durability持久性:数据的修改是永久的。
这4个特性,让关系型数据库在多人连线操作数据库的时候,保证数据的?。