数据库大体可以分为 关系型数据库 和 非关系型数据库。
关系型数据库与非关系型数据库的 区别:
关系型数据库 | 非关系型数据库 | |
---|---|---|
常见数据库 | Oracle、MySQL、SQL Server | memcached、redis |
使用SQL | 是 | 不强制要求,一般不基于SQL实现 |
事务支持 | 支持 | 不支持 |
复杂操作 | 支持 | 不支持 |
海量读写操作 | 效率低 | 效率高 |
基本结构 | 基于表和列,结构固定 | 灵活性比较高 |
使用场景 | 业务方面的OLTP系统 | 用于数据的缓存、或基于统计分析的OLAP系统 |
注:OLTP(On-Line Transaction Processing)是指联机事务处理,OLAP(On-Line Analytical Processing)是指联机分析处理。
类型 | 表示 | 说明 |
---|---|---|
小数 | decimal | DECIMAL(3,1) 表示共有3位数,有1位是小数 |
整型 | int | tiny int < small int < int < big int |
字符型 | varchar | Varchar(300字以内变长) < text < longtext |
char | 定长 | |
时间型 | date | 年-月-日 |
time | 时:分:秒 | |
datetime | 年-月-日 时:分:秒 表达式DEFAULT:current_timestamp表示自动插入当前系统时间 | |
timestamp | 时间戳:从1970-01-01 00:00:00 经过的秒数 |
缩写 | 全称 | 说明 |
---|---|---|
PK | Primary Key | 主键,每条数据的唯一标识 |
NN | Not Null | 不允许为NULL |
UQ | Unique | 唯一键,不允许重复 |
AI | Auto_Increment | 自增的,自动增长 |
UN | Unsigned | 无符号的 |
B | Binary | |
ZF | Zero Fill | |
G | Generated | |
FK | Foreign Keys | 外键 |
初学者行为准则:
外键:将一张表和其它表的主键关联起来,防止出现非一致性的操作。
比如,我们的图书管理系统中有三张表books
、readers
、records
,当我们在records表中增删借阅记录时,理想中是应该影响到其它两张表中的信息。但实际上 books表中书的状态没有发生改变,readers中借阅者的信息也没有改变。
所以我们为了数据的一致性,在 records
表中设置外键,并且锁定到另外两张表的唯一主键。
SQL语句:
ALTER TABLE `lib_0403`.`records`
ADD INDEX `fk_bid_idx` (`bid` ASC),
ADD INDEX `fk_rid_idx` (`rid` ASC);
;
ALTER TABLE `lib_0403`.`records`
ADD CONSTRAINT `fk_bid`
FOREIGN KEY (`bid`)
REFERENCES `lib_0403`.`books` (`bid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_rid`
FOREIGN KEY (`rid`)
REFERENCES `lib_0403`.`readers` (`rid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
外键约束 | 说明 |
---|---|
RESTRICT | 父表数据被删除,会阻止删除。默认就是这一项 |
NO ACTION | 在MySQL中,同RESTRICT |
CASCADE | 级联删除 |
SET NULL | 父表数据被删除,子表数据会设置为NULL |
总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是MySQL的学习,认识了数据库,学习数据库理论,以及MySQL的数据类型和字段约束,还有如何设置外键。之后的学习内容将持续更新!!!