提示:以下是本篇文章正文内容,Java系列学习将会持续更新
数据库基础
一、数据类型
类型 | 表示 | 说明 |
---|---|---|
小数 | decimal | DECIMAL(3,1) 表示共有3位数,有1位是小数 |
整型 | int | tiny int < small int < int < big int |
字符型 | varchar(n) | Varchar(300字以内变长) < text < longtext |
char(n) | 定长,如果插入的长度小于定义长度时,则用空格填充。 | |
二进制文件 | blob(n) | blob < longblob |
时间型 | 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 | 外键 |
初学者行为准则:
- 每张表都有一个id,无所谓叫什么。没有业务含义,只是作为编号主键。类型为int,约束为PK、NN、AI
- 每个字段都带上Not NULL
- 如果有的字段需要保持唯一,则勾选UQ。如用户账号
三、外键
外键:将一张表和其它表的主键关联起来,防止出现非一致性的操作。
比如,我们的图书管理系统中有三张表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的数据类型和字段约束,还有如何设置外键。之后的学习内容将持续更新!!!