牛客选择题刷题记录(数据库)

  • 数据库概念设计的E-R方法中,用属性描述实体的特征,属性在E-R图中,用(椭圆形)表示
  • E-R图中:
    矩形:实体
    菱形:关系
    椭圆:属性
  • 数据库系统的三级模式不包括(数据模式),数据库的数据模式通常由逻辑模式、外模式和内模式构成
  • 按照规范的设计方法,一个完整的数据库设计一般分为以下六个阶段。
    需求分析:分析用户的需求,包括数据、功能和性能需求
    概念结构设计:主要采用E-R模型进行设计,包括画E-R图
    逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换
    数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径
    数据库的实施:包括编程、测试和试运行
    数据库运行与维护:系统的运行与数据库的日常维护
  • SQL 语句执行顺序
    1、from子句组装来自不同数据源的数据;
    2、where子句基于指定的条件对记录行进行筛选;
    3、group by子句将数据划分为多个分组;
    4、使用聚集函数进行计算;
    5、使用having子句筛选分组;
    6、select计算所有的表达式;
    7、使用order by对结果集进行排序。
  • 关于 count() 函数
    count(*)肯定是查全部的记录条数了
    count(数字),和count(*)效果一样,有几条记录就显示几
    count(属性名)则查处的是属性名下面的非null数据的个数
    count()则报错 错误码: 1064
  • 两阶段封锁协议是由Eswaran等人在1976年提出的。1、两阶段封锁协议的定义:能真正保证调度可串行化的封锁协议是两阶段封锁协议,该协议要求每个事务分两个阶段提出加锁和解锁申请:
【牛客选择题刷题记录(数据库)】- 增长阶段:事务可以获得锁,但不能释放锁 - 缩减阶段:事务可以释放锁,但不能获得新锁。对于一个事务而言,刚开始事务处于增长阶段,它可以根据需要获得锁;一旦该事务开始释放锁,它就进入了缩减阶段,就不能再发出加锁请求。
值得注意的是:事务的第一个解锁语句unlock被执行的时刻就是该事物缩减阶段的开始。
  • 概念模型是从用户角度看到的模型,是第一层抽象,与具体的计算机和DBMS(数据库管理系统)无关。数据模型是从计算机角度看到的模型。
  • 视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。视图是从一个或几个基本表(或其他视图)导出的表。
  • 一个关系模型对应一张二维表,每一行记录即为一个元组,任意两个元组值不能完全相同,因为受到主键的限制。通过主键来唯一标识每一条记录。
  • 数据库的外键可以为空,也可以非空,但是如果非空,则这个值必须在主表中存在。
  • 索引的描述存放在下列哪一项所指示的对象中(数据字典)
  • 在满足实体完整性约束的条件下(一个关系中应该有一个或多个候选关键字)。
  • 在关系模型中,起导航数据作用的是(关键码)
  • 关系模型的三个组成部分,是指关系数据模型的 数据结构、关系数据模型的 操作集合、关系数据模型的 完整性约束
  • 在关系数据库设计中,设计关系模式是数据库设计中(逻辑设计)阶段的任务
  • %和_都为通配符,而“%”表示0个或多个字符,“_”则表示一个字符,查倒数第三个字符W,所以应该是W_ _,但是要求要至少包含4个字符,所以在W前面添加%,又必须有一个所以就多加了一个"_"。
  • 为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。那么在任何时候都应该加索引么?这里有几个反例:1、如果每次都需要取到所有表记录,无论如何都必须进行全表扫描了,那么是否加索引也没有意义了。2、对非唯一的字段,例如“性别”这种大量重复值的字段,增加索引也没有什么意义。3、对于记录比较少的表,增加索引不会带来速度的优化反而浪费了存储空间,因为索引是需要存储空间的,而且有个致命缺点是对于update/insert/delete的每次执行,字段的索引都必须重新计算更新,这就拖慢了速度
  • 数据库常用的关系运算为三种:
    1、选择。
    2、投影。
    3、连接。
    (1)选择,是从二维表中选出符合条件的记录,它是从行的角度对关系进行的运算。
    (2)投影,是从二维表中选出所需要的列,它是从列的角度对关系进行的运算。
    (3)连接,是同时涉及到两个二维表的运算,它是将两个关系在给定的属性上满足给定条件的记录连接起来而得到的一个新的关系。
  • 先选择运算,
    1.比较运算:>,>=,<,<=,=,<>(或!=);
    2.范围查询:BETWEEN...AND;
    3.集合查询:IN;
    4.空值查询:IS NULL;
    5.字符串匹配查询:LIKE;
    6.逻辑查询:AND,OR,NOT。
    然后再进行投影查询
  • drop是完全删除表,包括表结构
    delete是删除表数据,保留表的结构,而且可以加where,只删除一行或者多行
    truncate 只能删除表数据,会保留表结构,而且不能加where
  • 数据库系统达到了数据独立性是因为采用了(三级模式结构)
  • 数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括: 日志文件、数据库后备副本
  • where子句 = 指定行所对应的条件
    having子句 = 指定组所对应的条件
    D中是Group by才用来分组的,group by的作用是限定分组条件,而having则是对group by中分出来的组进行条件筛选。
    所以用having就一定要和group by连用,且是先group by XXX 再having XXX,用group by不一有having(它只是一个筛选条件用的)
    where子句是过滤行;having子句是过滤分组。where在数据分组之前使用,having在数据分组之后使用,可以同时使用。
    在select语句中,having可以替换where,其他如update等无法替换
    where之后不能以函数作为条件
  • sql的特点:
    1.综合统一
    2.高度非过程化
    3.面向集合的操作方式
    4.以同一种语法结构提供多种使用方式
    5.语言简洁,易学易用
  • 数据库的特点是数据共享、数据独立、减少数据冗余、避免数据不一致和加强数据保护
  • 数据库管理系统的工作不包括 为定义的数据库提供操作系统
  • 在数据库技术中,为提高数据库的逻辑独立性和物理独立性,数据库的结构被划分成用户级、(概念级)和存储级三个层次。
  • 数据库应用系统是由数据库系统、应用程序系统、用户组成的,具体包括:数据库、数据库管理系统、数据库管理员、硬件平台、软件平台、应用软件、应用界面。
  • INSERT INTO 语句用于向表格中插入新的行。
    INSERT INTO table_name VALUES (值1, 值2,....)
    指定所要插入数据的列:
    INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
    SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。
    把所有的列插入新表
    SELECT *
    INTO new_table_name [IN externaldatabase]
    FROM old_tablename
    只把希望的列插入新表
    SELECT column_name(s)
    INTO new_table_name [IN externaldatabase]
    FROM old_tablename
  • 防止SQL注入,需要注意以下几个要点:
    永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
    永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
    永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
    不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
    应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
    sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。
  • CHANGE 用来修改字段名字以及类型
    modify 用来修改字段类型
    aiter column ... set 用来修改字段数据

    推荐阅读