第一章 背景知识
数据库分为关系数据库(Mysql,Oracle)和非关系数据库(Redis无表结构,MongoDB有一定表结构);
关系数据库中的每张表都包含一项作为每行唯一标识的信息(主键);
术语和定义
术语 | 定义 | java |
---|---|---|
实体 | 数据库用户所关注的对象,如顾客,部门等 | |
列 | 存储在表中的独立数据片段即字段field | 属性,成员变量 |
行 | 所有列的一个集合,完整描述了一个实体或实体上的某个行为,亦称为记录 | 一个对象 |
表 | 行的集合,既可以保存在内存中(未持久化),亦可以保存在硬存中(已持久化) | 实体类 |
结果集 | 未持久化表的别称,一般为SQL查询的结果 | 集合 |
主键 | 用于唯一标识表中每个行的一个或多个列 | |
外键 | 一个或多个用于识别其他表中某一行的列 |
第二章 创建和使用数据库
缺失的字句:
SELECT now() ; # mysql 查询当前时间 now()是内建函数,返回当前时间和日期 y-m-d h:m:s
某些数据库服务器规定查询语句中必须包含from字句,并在其中至少指明一个表名,如Oracle。若仅仅只是需要调用一个函数,Oracle为此提供了一个特殊的表dual伪表,该表只包含一个名为dummy的列,并只有一个数据行。为了与Oracle保持兼容,MySQL也提供了伪表dual,因此前面的日期查询可以写成下面这样:
SELECT now()
FROM dual; # 若没使用Oracle可以省略dual表,不带from
2.1数据类型
只涉及字符型,数值型,日期型
字符型数据
字符型数据可以使用定长char或不定长varchar的字符串,两者不同点在于固定长度的字符串使用空格向右填充,以保证占用同样的字节数;变长字符串不需要向右填充,且所有字节数可变。
char列可以设置的最大长度为255个字节,char(5)表示需要存储最大长度 不超过5个字符的字符串;varchar列最多可以存储65535字字节,并且占用一个字节存储长度。
字符集:
SHOW CHARRCTER SET; # 查看服务器支持字符集
varchar(20) character set utf8 为数据列指定其字符集
create database foreign_sales character set utf8 为数据库指定字符集
文本数据:
文本类型 | Maximum number of bytes(字节) |
---|---|
tinytext | 255 |
text | 65 535 |
mediumtext | 167 77 215 |
longtext | 4 294 967 295 |
性能上:char>varchar>text
选择文本类型时注意:
若被装载到文本列中的数据超出了该类型的最大长度,数据将会被截断
在向文本列装载数据时,不会消除数据的尾部空格
当使用文本列排序或分组时,只会使用前1024个字节,当然若需要可以放宽此限制
数值型数据
类型 | 带符号的范围 | 无符号的范围 |
---|---|---|
tinyint 1字节 | -128-127 | 0-255 |
smallint 2字节 | -32 768-32 768 | 0-65 535 |
mediumint 3字节 | -8 388 608-8 388 607 | 0-16 777 215 |
int 4字节 | -2 147 483 648-2 147 483 647 | 0-4 294 967 295 |
bigint 8字节 | -9 233 372 036 854 775 808-9 223 372 036 854 775 807 | 0-18 446 744 073 709 551 615 |
注意:Int(n)括号里面的数字n无论写成多少,都是占4个字节的空间,最多能存10位数,n不是代表能存多少位数,只是显示宽度
类型 | 存储大小 |
float(p,s) p存放数的长度 float(5,2) 111.11 | 4字节 |
double(p,s) s精度即保留小数 | 8字节 |
时间数据
类型 | 默认格式 | 允许的值 |
---|---|---|
date 3字节 | YYYY-MM-DD | 1000-01-01~9999-12-31 |
datetime 8/5字节 | YYYY-MM-DD HH:MI:SS | 1000-01-01 00:00:00~9999-12-31 23:59:59 |
timestamp 4字节 | YYYY-MM-DD HH:MI:SS | 1970-01-01 00:00:00~2037-12-31 23:59:59 |
year 1字节 | YYYY | 1901~2155 |
time 3字节 | HHH:MI:SS | -838:59:59~838:59:59 |
注意:
datetime的可用范围比timestamp大,物理存储上只比timestamp多占1个字节的空间,整体性能上的消耗并不算大,因此生产环境可用使用datetime时间类型。
datetime数据类型在MySQL5.6之前占8字节,在5.6以后占5字节
2.2表操作
2.3错误语句