zoukankan      html  css  js  c++  java
  • 关系数据库 第一瓣

      数据库说会也会,一用起来好像又不大确定,干脆总结下。

    1.关系模型的完整性约束

      数据完整性是指数据库中的数据是有意义和正确的,它包括实体完整性、参考完整性、用户定义的完整性

      实体完整性保证关系中的每个元组都是可以识别的和唯一的。这就要求关系数据库中所有表必须有主码,不允许出现无主码或者主码值相同的记录。关系模型中的每一行记录对应客观存在一个实例或事实。

      现实世界中的实体之间往往存在某种联系,而在关系模型中,实体以及实体之间的联系都是用关系来表示的。参照完整性一般是指多个实体或表之间的关联关系。例如一个表中某列的取值受另一个表某列的取值范围约束。

      用户定义的完整性,它反映了某一具体应用所涉及的数据必须满足的应用语义的要求。用户定义的完整性实际上是指明关系中属性的取值范围,防止属性的值与应用语义矛盾。

    2. SQL数据类型

      每种数据库所支持的数据类型并不完全相同,并且与标准的SQL也有差异,这里列出标准SQL类型与SQL SERVER 类型。

      ---------------------------SQL-92或SQL-99数据类型----------------------

      (1)准确型

        计算机中能精确存储的数据,比如整数、定点小数等

        Integer    4字节  可表示-21亿多到21亿多的整数

        Smallint   2字节  可表示-32768到32767的整数

        Bit                     存储1或0

        Decimal(p,q)     定点小数。p为小数点左边加右边一共可存储的十进制最大位      数。q为右边可存储的小数最大位数。p>=q>=1

      (2)近似型

        用于表示浮点型数据的近似数据类型。

        float        8字节  

      (3)字符串型

        目前字符的编码方式有两种,普通编码方式和统一字符编码。普通编码方式不同国家或地区编码长度不一样,如英文为1个字节,中文为2个字节;统一编码方式均采用双字节编码。

        character(n)  固定长度的字符串类型,n为最大长度,取值1~8000

        character varying(n)可变长度的字符串类型

        national character(n)定长的unicode字符串类型,n取值1~4000

        national character(n)varying 变长的unicode字符串类型

        binary(n)  定长的二进制字符数据,n取值1~8000

        binary varying(n) 变长的二进制字符数据

      (4)日期时间型

        SQL-92或SQL-99是将日期和时间类型数据分开存储的,日期是Date类型,时间是Time类型。

     ---------------------------SQL SERVER数据类型----------------------

      (1)准确型 

        计算机中能精确存储的数据,比如整数、定点小数等

        Bigint      8字节  可表示-922亿亿多到922亿亿多的整数 

        Int          4字节  可表示-21亿多到21亿多的整数 

        Smallint   2字节  可表示-32768到32767的整数

        Tinyint         存储0~255之间的整数 

        Bit                     存储1或0 

        Numeric(p,q)或Decimal(p,q)     定点小数。p为小数点左边加右边一共可存储的十进制最大位数。q为右边可存储的小数最大位数。p>=q>=1

      (2)近似型

        用于表示浮点型数据的近似数据类型。 

        float        8字节  

        real         4字节 

         精度参考 float与double http://www.cnblogs.com/BradMiller/archive/2010/11/25/1887945.html

        

    1. 范围
       float:
      1bit(符号位) 8bits(指数位) 23bits(尾数位)
      double:
      1bit(符号位) 11bits(指数位) 52bits(尾数位)
     2.  精度
       float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
      double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

      (3)字符串型 

        char(n)  固定长度的字符串类型,n为最大长度,取值1~8000 

        varchar(n)可变长度的字符串类型

        text    可存储231 -1(2G多)个字符的大文本 

        national character(n)定长的unicode字符串类型,n取值1~4000 

        national character(n)varying 变长的unicode字符串类型

        ntext    可存储230-1(1G多)个字符的统一编码文本

         binary(n) 定长的二进制字符数据,n取值1~8000 

        varbinary(n) 变长的二进制字符数据

        image    大容量变长的二进制字符数据,可存储多种格式的文件如word,excel,bmp,gif,JPEG等的数据,最多可存231-1个字节,约为2GB 

      (4)日期时间型

        Datetime       8字节    1753.1.1 ~ 9999.12.31之间的时间,精确到3.3ms

          Smalltime  4字节    1900.1.1 ~ 2079.6.6之间的时间,精确到分钟。

         输入日期格式之一数字加分隔符 例如: 2001-10-25 3:28:57 PM

      (5)货币型

        实际上都是拥有四位小数的decimal类型

        money               8字节   -263 ~ 263-1之间

        smallmoney   4字节   -214748.3648 ~ 214748.3647

    3.  数据库定义、删除、修改

       几点注意

    •   默认情况下,SQL语言不区分大小写;
    •   SQL中的字符常量用单引号括起来;   
    •       --为SQL的单行注释符,/*  */为多行注释符;
    •   数据库中的空值为特殊的标量常量,代表未定义的或者有意义但是目前还处于未知状态的值;
    •       计算函数不能出现在WHERE字句中

       (1)定义表

        Create table 表名 (

          列名  数据类型 [列级完整性约束]

          {, 列名  数据类型 [列级完整性约束]  …}

          [,表级完整性约束]

        )

        列级完整性约束:

        NOT NULL、DEFAULT、UNIQUE、CHECK(约束表达式)、PRIMARY KEY,

        [FOREIGN KEY (列名)] REFERENCES 外表名 (外表列名)

        例如:    

    CREATE TABLE t_anaresult(
          Sno char(7) PRIMARY KEY,
          Sname char(10) NOT NULL,
          Ssex char(2) CHECK(Ssex = '' OR Ssex = ''),
          Sage tinyint CHECK(Sage>15 AND Sage<45),
          Sdept char(20) DEFAULT '计算机系'
        ) 
    CREATE TABLE t_sc(
          Sno char(7) NOT NULL,
          Cno char(10) NOT NULL,
          Grade tinyint,
          CHECK (Grade>=0 and Grade<=100),
          PRIMARY KEY (Sno),
          FOREIGN KEY (Sno) REFERENCES t_anaresult (Sno)
         )

        (2)删除表

        drop table 表名 {[, 表名]…}

        例如 drop table t_sc , t_anaresult

        (3)修改表

        ALTER TABLE 表名

        [ALTER COLUMN 列名 新数据类型]

        | [ADD [COLUMN] 列名 数据类型 [约束]]

        | [DROP COLUMN 列名]

        | [ADD PRIMARY KEY (列名,…)]

        | [ADD FOREIGN KEY (列名) REFERENCES 表名 (列名)]

     (4)查询功能

        基本结构可描述为:

        SELECT 目标列名序列

          FROM 数据源

           [WHERE 检索条件]

           [GROUP BY 分组依据列]

           [HAVING 组提取条件] 

           [ORDER BY 排序依据列]

        例如

          选择若干列

    SELECT Sno FROM t_anaresult;  --选择特定列
    SELECT * FROM t_anaresult;    --选择所有
    SELECT Sno AS 学号 FROM t_anaresult; --为列取别名

          选择若干元组    

    SELECT DISTINCT Sdept FROM t_anaresult; --去掉重复行

          WHERE字句常用的查询条件

        比较                                           = 、<、>、<=、>=、!=

        确定范围                                     BETWEEN AND(包括边界值),NOT BETWEEN AND

        字符匹配             LIKE , NOT LIKE

        空值               IS NULL, NOT NULL

        多重查询             AND, OR

        例如

    SELECT Sno FROM t_anaresult WHERE Sdept = '计算机系'
    SELECT Sno FROM t_anaresult WHERE Sage BETWEEN 18 AND 20;
    SELECT Sno FROM t_anaresult WHERE Sdept IN ('计算机系','数学系');

       字符匹配(_ :匹配任意一个字符 %:匹配0个或者多个字符 []:匹配[]中的任意一个字符 [^]不匹配[]中的任意一个)         

    SELECT Sno FROM t_anaresult WHERE Sdept like '%计算机%'
    SELECT Sno FROM t_anaresult WHERE Sdept IS NULL
    SELECT Sno FROM t_anaresult WHERE Sdept IS NOT NULL

          对结果进行排序

          ORDER BY 列名 ASC|DESC

    SELECT Sno FROM t_anaresult ORDER BY Sage DESC; 

          使用计算函数进行汇总

          COUNT(*),COUNT(列名),SUM(列名),AVG(列名),MAX(列名),MIN(列名)

          除COUNT(*)外,其他函数计算过程中均忽略NULL值      

    SELECT COUNT(*) FROM t_anaresult;
    SELECT COUNT(DISTINCT Sedpt) FROM t_anaresult;
    SELECT MIN(Sno),MAX(Sno) FROM t_anaresult;
    SELECT MIN(Sno)||'@'||MAX(Sno) FROM t_anaresult; --将两字段连接在一起输出

            对结果进行分组计算

          GROUP BY 分组依据列 [HAVING 组提取列]

          使用了分组字句,则查询列表的每个列要么是分组依据列,要么是计算函数。      

    SELECT Sdept , COUNT(Sdept) AS 该系人数 FROM t_anaresult GROUP BY  Sdept

          HAVING用于对分组后的记录进行再过滤,它用于组而不是单个记录      

    SELECT Sdept , COUNT(Sdept) AS 该系人数 FROM t_anaresult GROUP BY  Sdept HAVING COUNT(*) >1
  • 相关阅读:
    vivo 全球商城:从 0 到 1 代销业务的融合之路
    mysql 批量kill掉运行中的进程id
    启用php-fpm状态功能 --php-fpm调优也有
    PHP-php-fpm配置优化
    Linux-cpu分析-vmstat
    关于overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷等等)
    curl 发送POST请求
    python redis-rdb工具 分析redis工具
    tupdump
    spring cloud gateway security oauth2
  • 原文地址:https://www.cnblogs.com/CanWork/p/3354566.html
Copyright © 2011-2022 走看看