您的位置:首页 > 数据库 > MySQL

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

2016-09-25 23:13 561 查看
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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐