MySQL数据表的数据类型、如何实现数据完整性以及日期函数等的基本知识点整理

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

/*方法一 :

where r.CardId = '3206 0001' and r.Type = '取出' and extract(year_month from RecordDate) = extract(year_month from curdate())

*/

-- 方法二:

where r.CardId = '3206 0001' and r.Type = '取出' and date_format(RecordDate,'%y-%m') = date_format(curdate(),'%y-%m')
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');









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值