1.数据存储
-1- 人工管理阶段
-2- 文件管理阶段
问题:查询不便
-3- 数据库阶段
安全
性能
2.关系型数据库(RDBMS)
以表格方式存储数据,表格和表格之间存储关系。
DB:database数据库
DBA:数据库管理员
DBMS:数据库管理系统
RDBMS:关系型数据库管理系统
Record:记录(行)
Field:字段(列)
3.常用的RDBMS:
Oracle
SQL Server
DB2
MySQL 特点:简单、易用、开源
4.MySQL
企业版(Enterprise) 收费 提供技术支持、服务
社区版(Community) 免费 没有任何技术支持、服务
5.数据管理:
-1- 数据库:容器
-2- 数据表:数据真正的容器
-3- 设计表结构
字段:字母、数字和下划线
数据类型:
整数类型:tinyint 1
smallint 3
int 4
bigint 8
浮点类型:float
double(m,n) m:数据总长度,n:小数点后n位(小数位数超出部分会被舍弃,不会报错)
整数部分:m-n,如果超出,会报错
date 3 YYYY-MM-DD
dateTime 8 YYYY-MM-DD hh:mm:ss
datestamp 8 时间戳
字符类型:char:固定字符串(性能高)
指定固定长度,如 char(10),则长度一定为10
varchar:可变字符串(占用空间少)
指定的长度可变,如varchar(20),此时字段值为tom,则长度会变为3
text或Blob:用来存储大对象(大文本、图像、声音等...)
enum:枚举(固定的几个值) 字段 enum('值1','值2')
例:sex enum('男','女')
-4- 数据完整性(唯一性、准确性、一致性)
1)实体完整性(唯一性)
主键约束:primary key
唯一约束:unique key
注:a.主键不能为空,所以可以不用给它添加not null
b.唯一约束的字段值可以为空,如果想让他不能有空值,则要unqiue + not null
对于唯一约束的字段,MySQL中允许有多个字段值为空,而SQL Server中只允许最多一个为空。
c.主键约束和唯一约束都是为了防止重复,以确保其唯一性。
d.一般主键都是id,且会将其设为自增长列(标识列),需要注意的是自增列只对整数类型如int的字段有效。
2)域完整性(准确性)
检查约束(check)
默认约束(default)
3)引用完整性(一致性 父表与子表)
外键约束:foreign key
-5- 实现数据完整性(添加约束)
1)先建表,再追加约束
alter table 表名 约束名 约束类型(字段);
2)建表时直接添加约束
constraint 约束名 约束类型(约束字段)
6.SQL
-1- 定义:结构化查询语言(stucture query language)
-2- 功能:关系型数据库的数据操作
-3- 操作分类:
DDL:数据定义语言--> 数据库对象的创建crete、修改alter、删除drop
DML:数据操作语言--> 数据添加insert、更新(修改)update、删除delete
DQL:数据查询语言--> select
DCL:数据控制语言--> grant
7.日期函数
now(): 返回当前的日期和时间 YYYY-MM-DD hh:mm:ss
curdate(): 返回当前的日期 YYYY-MM-DD
curtime(): 返回当前的时间 hh:mm:ss
date(): 返回日期或日期/时间表达式的日期部分 YYYY-MM-DD
extract(): 返回日期/时间的单独部分,比如年、月、日、小时、分钟等等
extract(unit from date)
unit值可以下:microsecond,second,minute,hour,day,week,month,querter,year,
second_microsecond,minute_microsecond,minute_second,
hour_microsecnd,hour_second,hour_minute,
day_microsecond,day_second,day_minute,day_hour,year_month
date_add(): 向日期添加指定的时间间隔
date_add(date,interval expr type)
注:date参数是合法的日期表达式,expr参数是您希望添加的时间间隔,type参数值同上unit值
date_sub(): 从日期减去指定的时间间隔
date_sub(date,interval expr type)
datediff(): 返回两个日期之间的天数
datediff(date1,date2)
注:只有值得日期部分参与计算
date_format():用于以不同的格式显示日期/时间数据
date_format(date,format) format规定日期/时间的输出格式
例:
统计:查询卡号为'3206 0001'的用户本月取款次数及取款总金额,返回姓名、取款次数,取款总金额
select c.Name as 姓名, count(*) as 取款次数, sum(r.Money) as 取款总金额
from records as r inner join cards
on r.CardId = cards.Id
join customers as c
on c.Id = cards.CustId
group by c.Name;
统计上个月银行的存款总金额
select sum(Money) as 存款总金额
from records
-1- 人工管理阶段
-2- 文件管理阶段
问题:查询不便
-3- 数据库阶段
安全
性能
2.关系型数据库(RDBMS)
以表格方式存储数据,表格和表格之间存储关系。
DB:database数据库
DBA:数据库管理员
DBMS:数据库管理系统
RDBMS:关系型数据库管理系统
Record:记录(行)
Field:字段(列)
3.常用的RDBMS:
Oracle
SQL Server
DB2
MySQL 特点:简单、易用、开源
4.MySQL
企业版(Enterprise) 收费 提供技术支持、服务
社区版(Community) 免费 没有任何技术支持、服务
5.数据管理:
-1- 数据库:容器
-2- 数据表:数据真正的容器
-3- 设计表结构
字段:字母、数字和下划线
数据类型:
整数类型:tinyint 1
smallint 3
int 4
bigint 8
浮点类型:float
double(m,n) m:数据总长度,n:小数点后n位(小数位数超出部分会被舍弃,不会报错)
整数部分:m-n,如果超出,会报错
date 3 YYYY-MM-DD
dateTime 8 YYYY-MM-DD hh:mm:ss
datestamp 8 时间戳
字符类型:char:固定字符串(性能高)
指定固定长度,如 char(10),则长度一定为10
varchar:可变字符串(占用空间少)
指定的长度可变,如varchar(20),此时字段值为tom,则长度会变为3
text或Blob:用来存储大对象(大文本、图像、声音等...)
enum:枚举(固定的几个值) 字段 enum('值1','值2')
例:sex enum('男','女')
-4- 数据完整性(唯一性、准确性、一致性)
1)实体完整性(唯一性)
主键约束:primary key
唯一约束:unique key
注:a.主键不能为空,所以可以不用给它添加not null
b.唯一约束的字段值可以为空,如果想让他不能有空值,则要unqiue + not null
对于唯一约束的字段,MySQL中允许有多个字段值为空,而SQL Server中只允许最多一个为空。
c.主键约束和唯一约束都是为了防止重复,以确保其唯一性。
d.一般主键都是id,且会将其设为自增长列(标识列),需要注意的是自增列只对整数类型如int的字段有效。
2)域完整性(准确性)
检查约束(check)
默认约束(default)
3)引用完整性(一致性 父表与子表)
外键约束:foreign key
-5- 实现数据完整性(添加约束)
1)先建表,再追加约束
alter table 表名 约束名 约束类型(字段);
2)建表时直接添加约束
constraint 约束名 约束类型(约束字段)
6.SQL
-1- 定义:结构化查询语言(stucture query language)
-2- 功能:关系型数据库的数据操作
-3- 操作分类:
DDL:数据定义语言--> 数据库对象的创建crete、修改alter、删除drop
DML:数据操作语言--> 数据添加insert、更新(修改)update、删除delete
DQL:数据查询语言--> select
DCL:数据控制语言--> grant
7.日期函数
now(): 返回当前的日期和时间 YYYY-MM-DD hh:mm:ss
curdate(): 返回当前的日期 YYYY-MM-DD
curtime(): 返回当前的时间 hh:mm:ss
date(): 返回日期或日期/时间表达式的日期部分 YYYY-MM-DD
extract(): 返回日期/时间的单独部分,比如年、月、日、小时、分钟等等
extract(unit from date)
unit值可以下:microsecond,second,minute,hour,day,week,month,querter,year,
second_microsecond,minute_microsecond,minute_second,
hour_microsecnd,hour_second,hour_minute,
day_microsecond,day_second,day_minute,day_hour,year_month
date_add(): 向日期添加指定的时间间隔
date_add(date,interval expr type)
注:date参数是合法的日期表达式,expr参数是您希望添加的时间间隔,type参数值同上unit值
date_sub(): 从日期减去指定的时间间隔
date_sub(date,interval expr type)
datediff(): 返回两个日期之间的天数
datediff(date1,date2)
注:只有值得日期部分参与计算
date_format():用于以不同的格式显示日期/时间数据
date_format(date,format) format规定日期/时间的输出格式
例:
统计:查询卡号为'3206 0001'的用户本月取款次数及取款总金额,返回姓名、取款次数,取款总金额
select c.Name as 姓名, count(*) as 取款次数, sum(r.Money) as 取款总金额
from records as r inner join cards
on r.CardId = cards.Id
join customers as c
on c.Id = cards.CustId
/*方法一 :
where r.CardId = '3206 0001' and r.Type = '取出' and extract(year_month from RecordDate) = extract(year_month from curdate())
*/
-- 方法二:
group by c.Name;
统计上个月银行的存款总金额
select sum(Money) as 存款总金额
from records
where Type = '存入' and date_format(RecordDate,'%Y,%M') = date_format(date_sub(curdate(),interval 1 month),'%Y,%M');