一、关系型数据库
关系型数据库中的数据存储在表(Table)中,表由行(row)和列(column)组成(也称为元组和属性)。一组表的定义被称为一个schema。
列:每一个列都有一个名字以及一个关联的数据类型,因此由于列的数据类型限制了存储在该列的数据范围。
行:表中的数据可以通过插入/删除行来进行数据的添加和删除。
键:key是一个或多个列的集合,唯一地确定了表中的特定行。
主键:例如,在一个员工表中,可以使用员工的身份证号作为员工表的主键,使用“primary key”关键字创建主键数据列。该主键保证了对每个员工来说都是唯一的。主键在物理层面上只有两个用途: 1. 惟一地标识一行。 2. 作为一个可以被外键有效引用的对象。
外键:是指一个键值来自于其他表(通常来自于其他表的主键)的键,因此一个表可以通过一个外键与另一个表关联起来进行联合查询。
二、SQL语句
给定两个表,用主键和外键设计一下schema,使其更好地显式定义这些schema之间的关系让别人更容易理解。
name | age |
陈一 | 18 |
陈二 | 19 |
陈三 | 20 |
陈四 | 21 |
age | interest | phone |
20 | game | 1111 |
18 | study | 2222 |
19 | book | 3333 |
21 | eat | 4444 |
1.两个表都未定义主键
HomeMenbers { name CHAR(20), age INTEGER(4) }; Description { age INTEGER(4), interest CHAR(20), phone CHAR(20) };
2.定义主键和外键
HomeMenbers { name CHAR(20), age INTEGER(4) PRIMARY KEY }; Description { age INTEGER(4), interest CHAR(20), phone CHAR(20) FOREIGN KEY (age) REFERENCES HomeMenbers };
进行了修改后,数据库就能主动承担起确保这些表之间的参照完整性。例如,不能添加一个在HomeMenbers表中不存在的人的信息到Description表中。
3.添加一行数据
>>INSERT INTO HomeMenbers VALUES ("陈五",22);
4.返回HomeMenbers表中所有的数据
>>SELECT * FROM HomeMenbers;
5.返回一列数据
>>SELECT name FROM HomeMenbers;
6.限制查询条件
>>SELECT name FROM HomeMenbers WHERE age > 18 AND age < 20; >>SELECT * FROM HomeMenbers ORDER BY age DESC LIMIT 3;
三、数据库事务
数据库中存放数据的完整性是最重要的:如果数据产生了冲突,每个基于它的应用程序都会产生故障或出错。虽然参照完整性有助于维护数据统一性,但即使数据库保持了参照完整性,仍然会发生其他形式的不一致性。一个保持数据完整性的补充机制是数据库事务。
一个事务将一组相关的数据库操作作为一个单一的单元。如果事务中的任何一个操作失败,那么整个事务就会失败,并且该事务所做的任何修改都会被回滚(rollback)。相反,如果所有的操作都成功了,那么所有的修改都会作为一个整体提交(commit)。
举个已经烂透了的例子——两个银行账户之间的转账。一个转账通常包括两个操作:从第一个账户中减少金额,然后将减少的金额添加至第二个账户中。如果从第一个账户中减少金额后,立即产生了一个错误,为了保持数据库中的资金平衡,那么这个时候我们希望系统检测到这个问题并将扣除的钱退还到原来的账户。所以,要么两个操作都成功提交,要么两个都不提交。多安全~~