Open MJingv opened 5 years ago
不使用任何业务相关
的字段作为主键外键
中间表
,关联两个一对多关系,就形成了多对多关系SELECT id, name,AVG(score) average FROM classes, students WHERE score >= 80 OR gender = 'M' ORDER BY score LIMIT 3 OFFSET 0 INNER JOIN classes c ON s.class_id = c.id;
/ | SQL | NoSQL |
---|---|---|
存储方式 | 表 结构 |
Json键值对 (矩阵、图) |
模式 | sql模式(主键、索引、各种限制) | 无模式(随时写入) |
规范化 | 存id关联,少冗余 | 会存用户所有信息,查询快 |
事务 | 有 | 替代方案 |
语法 | sql | 各自语法 |
价格 | 收费 | 免费 |
优势 | 复杂查询、事务 | 性能、数据无耦合,可拓展性优秀 |
INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;
DELETE FROM <表名> WHERE ...;
把多条语句作为一个整体进行操作的功能,被称为数据库事务
ACID
A:Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行; C:Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100; I:Isolation,隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离; D:Duration,持久性,即事务完成后,对数据库数据的修改被持久化存储。
对于单条SQL语句,数据库系统自动将其作为一个事务执行,这种事务被称为隐式事务
手动把多条SQL语句作为一个事务执行,使用BEGIN
开启一个事务,使用COMMIT
提交一个事务,这种事务被称为显式事务
可以用ROLLBACK回滚事务,整个事务会失败
隔离级别
Isolation | Level | 脏读(Dirty Read) | 不可重复读(Non Repeatable Read) | 幻读(Phantom Read) |
---|---|---|---|---|
Read Uncommitted | Yes | Yes | Yes | |
Read Committed | - | Yes | Yes | |
Repeatable Read | - | - | Yes | |
Serializable | - | - | - |
脏读(Dirty Read)
Read Uncommitted是隔离级别最低的一种事务级别。在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据
,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读不可重复读(Non Repeatable Read)
在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。幻读(Phantom Read)
在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,并且,再次读取同一条记录,它就神奇地出现了readerStream.pipe(writerStream);
在关系中能唯一标识元组的属性集称为关系模式的超键
不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!
用户选作元组标识的一个候选键程序主键
如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键
1NF是对属性的原子性
约束,要求属性具有原子性,不可再分解
2NF是对记录的惟一性
约束,要求记录有惟一标识,即实体的惟一性,更通俗说有主键ID
3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余
若关系模式属于第二范式,且每个属性都不传递依赖于键码,则R属于BC范式
SELECT * FROM A
INNER JOIN B ON A.book_id=B.book_id;
SELECT * FROM A
LEFT JOIN B ON A.book_id=B.book_id;
SELECT * FROM A
RIGHT JOIN B ON A.book_id=B.book_id;
SELECT * FROM A
FULL JOIN B ON A.book_id=B.book_id;
sql
select
2个值
中间多个
可能值% 表示多个字值, 下划线表示一个字符; M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。 %M% : 表示查询包含M的所有内容。 %M : 表示查询以M在倒数第二位的所有内容。
ORDER BY DESC