精华内容
下载资源
问答
  • 在Linux系统中关于mysql数据库的使用(一) 1、首先启动mysql,具体代码: service mysqld start; 记得带末尾符号。 2、进入mysql,具体代码:mysql -u 用户名 -p 然后按enter键,再输入密码。首次进入数据库...

    在Linux系统中关于mysql数据库的使用(一)

    1、首先启动mysql,具体代码: service mysqld start; 记得带末尾的符号。
    在这里插入图片描述
    2、进入mysql,具体代码:mysql -u 用户名 -p 然后按enter键,再输入密码。首次进入数据库,是没密码的,直接输入mysql就行了。
    下图-u是指用户名,一般情况下进入用root,-p指的是密码。
    在这里插入图片描述
    3、查询所有数据库:show databases; 因为很多库,所以加s啊。记得加符号诶!!!英文分节符!不然识别不出来,linux就是这么的矫情。
    在这里插入图片描述
    4、查询某一数据库中所有的表,咱就查mysql数据库中的表好了,show mysql;记得加符号!!!后面是英文的分节符!!
    先use一下这个数据库,如果查询stu那就use stu;
    必须加符号!!!英文分节符。
    在这里插入图片描述
    show tables;因为有很多表,所以要加s啊。
    在这里插入图片描述
    5、查看表结构
    desc +表名+英文分节符。在这里我查询的是user表的表结构。
    在这里插入图片描述
    6、查询表中的数据,结构为:select 要查询的内容 from 表名
    如图,我就查询user表中的数据吧。
    在这里插入图片描述
    7、创建一个名字为hhh数据库 create database hhh;
    在这里插入图片描述
    8、在数据库中创建一张表,并插入一条记录,根据id和name来查询数据。
    use hhh;是使用名字是hhh的数据库,然后创建名字为test的表。具体代码看图。
    在这里插入图片描述
    9、退出数据库,简单粗暴那就CTRL+C,文明点儿,用quit;就行。
    在这里插入图片描述

    展开全文
  • 数据库 前提概念: 关系:代表 元组:代行 属性:指代列 ...外:一个关系模式(r1)在它属性包含另一个关系模式(r2),这个属性在r1上叫做参照r2。 基本数据类型: char(n); ...

    数据库
    前提概念:
    关系:指代表
    元组:指代行
    属性:指代列
    空(null):表示未知或者不存在

    超码:是一个多属性的集合,这些属性的集合可以使我们唯一的标识一个元组。
    候选码:最小的超码成为候选码。
    主码:设计者选中的在一个关系中区分不同元组的候选码。
    外码:一个关系模式(r1)在它的属性中包含另一个关系模式(r2)的主码,这个属性在r1上叫做参照r2的外码。

    基本数据类型:
    char(n);
    varchar(n);
    int;
    smallint
    numeric(p,d); 定点数,这个数有p位数字(加上符号位),其中d位数字在小数点右边。
    real,double precision;
    float(n);精度至少为n位的浮点数。

    SQL语句:
    1、建表语句

    create table department
    (
    dept_name varchar(20),
    building varchar(15),
    budget numeric(12,2),
    primary key(dept_name),
    foreign key(budget) references (table_name)
    );

    2、插入语句(增)

    insert into person (sex,name,age) values(1,’tom’,28);

    3、删除语句(删)

    delete from person where name=’tom’;
    delete from person; 删除整张表中的数据
    4、删除关系

    drop table r;

    5、为已有关系增加属性

    alter table r add A D; A为属性名,D为属性域
    alter table person add weight numeric(5,2);

    6、删除一个属性

    alter table r drop A; 删除属性A

    7、查询语句(查)

    select name,age,weight from person;
    select distinct name,age,weight from person;

    8、自然连接

    自然连接作用于两个关系,并产生一个关系作为结果。
    自然连接只考虑在两个关系上具有相同属性值相等的元组对。

    select name,course_id
    from instructor natural join teaches;

    等价:

    select name,course_id
    from instructor, teaches
    where instructor.ID = teaches.ID;

    在指定属性上进行连接

    select name,course_id
    from instructor join teaches using(ID);

    9、更名运算

    select T.name,S.course_id
    from instructors as T,teaches as S;

    10、字符串运算

    百分号(%):匹配任意字串
    下划线(_):匹配任意一个字符串
    反斜杠(\):转义字符

    select dept_name
    from department
    where building like ‘%Waston%’;

    11、排列元组的显示次序

    select name
    from instructors
    where dept_name=’Physics’
    order by name;

    默认是升序排序:asc
    降序排序(desc)

    12、集合运算

    union运算会自动去除重复

    (select course_id
    from section
    where semester=’Spring’ and year=2009)
    union
    (select course_id
    from section
    where semester=’Fall’ and year=2008)

    intersect运算会自动去除重复

    (select course_id
    from section
    where semester=’Spring’ and year=2009)
    intersect
    (select course_id
    from section
    where semester=’Fall’ and year=2008)

    except运算

    (select course_id
    from section
    where semester=’Spring’ and year=2009)
    except
    (select course_id
    from section
    where semester=’Fall’ and year=2008)

    13、空值(null)

    算数表达式的任一输入为空,则该算数表达式的结果为空。(+,-,*,/)
    unknown:涉及空值的任何比较运算的结果为unknown。(>,=,<)

    14、聚集函数

    avg:平均值
    min:最小值
    max:最大值
    sum:总和
    count:计数。

    15、分组聚集

    select dept_name,avg(salary) as avg_salary
    from instructor
    group by dept_name;

    16、having子句

    having子句用于对group by子句产生的分组进行限定

    select dept_name,avg(salary) as avg_salary
    from instructor
    group by dept_name
    having avg(salary)>4200;

    17、测试成员资格

    select distinct course_id
    from section
    where semester=’Spring’ and year=2009 and
    sourse_id in (select course_id
    from section
    where semester=’Fall’ and year=2008);
    select distonct name
    from instructor
    where name not in (‘tom’,’peiqy’); 单属性测试

    select count (distinct ID)
    from takes
    where (course_id,sec_id,semester,year) in (
    select course_id,sec_id,semester,year
    from teaches
    where teaches.ID = 10101);

    18、集合比较

    >some :至少比某一个大
    =some :和其中的一些值相等 相当于 in
    <>some :和部分不相等
    >all,<all,<>all…

    19、空关系测试

    用exists 和not exists测试某个元组是否存在

    select course_id
    from section
    where semester=’Spring’ and year=2009 and
    exists(select *
    from section
    semester=’Fall’ and year=2008
    )

    20、from子句中的子查询

    select dept_name,avg_salary
    from (select dept_name,avg(salary) as avg_salary
    from instructor
    group by dept_name)
    where avg_salary > 4200;

    21、with子句

    with子句在这里创建了一个新的关系max_budget,该关系只有一个属性value。

    with max_budget(value) as
    ( select max(budget)
    from department)
    select budget
    from department,max_budget
    where department.budget = max_budget.value;

    22、标量子查询

    只要改子查询只返回包含单个属性的元组。

    select department,
    (select count(*)
    from instructor
    where department.dept_name=instructor.dept_name )
    as num_insturctor
    from department;

    23、更新元组

    update insturctor
    set salary=salary*1.2
    where salary<700000;

    24、创建视图

    create view view_name as
    select *
    from table_name
    where…

    25、完整性约束

    完整性约束保证授权用户对数据所做的修改不会破坏数据的一致性。防止对数据的意外破坏。

    26、单个关系上的约束

    not null
    unique
    check(<谓词>)

    27、参照完整性

    在一个关系中给定属性集上的取值也在另一关系的特定属性集的取值中出现,这种情况称为参照完整性。

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 实体:客观存在的东西,比如现实生活中的一个人、一本书等等,在数据库中可以理解为属性(列)与属性(列)之间的关系。 属性:在数据库中实则就是表的一列。 元组:在数据库表的实则就是表的一行。 :表中...

    1、数据库基础概念

    要理解数据库的范式,先应该了解关于关系数据库的一些基础概念,关系型数据库是用二维表来保存数据的,表与表之间可以有关联。

    • 实体:指的是客观存在的东西,比如现实生活中的一个人、一本书等等,在数据库中可以理解为属性(列)与属性(列)之间的关系。
    • 属性:在数据库中实则就是表的一列。
    • 元组:在数据库表的实则就是表的一行。
    • :表中可以唯一确定一个元组(行)的某个属性(或多个属性组成属性组),如果只有的码不止一个,那就称之为候选码,从候选码中挑出一个主要的,就为主码。
    • 全码:如果一个码包含了所有的属性,那就是全码。
    • 主属性:一个属性在任何的候选码中出现过,就是为主属性。
    • 非主属性:相对于主属性而言。
    • 外码:一个属性或者属性组,它不是码,但是它是别的表的码,就为外码。

    2、认识数据库范式

    (1)数据库范式(Normal Form)是由英国E.F.Codd提出来的,是从关系数据库模型总结出来的,它是数据库理论的基础,也是数据库设计过程中必须要遵循的规则。

    (2)范式通常有8种范式,分别为:1NF、2NF、3NF、BCNF、4NF、5NF、DKNF、6NF。我们往往只用到前三个范式,1NF、2NF、3NF。

    3、三大范式介绍

    (1)第一范式:即1NF,要求数据表的列不能再分,不能再分为其他的列,这也就是保持列的原子性。举例子可以这样理解:
    我们数据库有这样的表user_list
    这里写图片描述
    其中TEL电话号码分为手机号码与公司座机号码,也就是列TEL是可以再分的,这就不是1NF,不符合第一范式,我们应该拆分数据表列为(UESR_ID,NAME,AGE,TEL1,TEL2)。这样才符合第一范式要求,也就是1NF。

    (2)第二范式:即2NF,首先肯定是要满足1NF的,另外还要满足两个要求:

    • 第一是表必须要有一个主键,这里的主键不一定只是一个列属性。
    • 第二是没有包含在主键中的列必须完全依赖与主键,而不能只依赖于主键的一部分

      举下面的例子,可以加深理解:

      这里写图片描述
      表中不包含在主键中的列,例如STUDENT_NAME、COURSE_NAME等都是不符合2NF中的第二条的要求的,即只依赖与主键(STUDENT_ID,COURSE_ID)的一部分。
      解决此类问题的办法就是拆分表为:
      表student(STUDENT_ID,STUDENT_NAME,MAJOR)
      course(COURSE_ID,COURSE_NAME,COURSE_TIME,TEACHER_NAME)
      之后两个表通过外键的形式相关联。

    (3)第三范式:即3NF,首先要满足2NF,另外要满足条件: 非主键必须直接依赖于主键,不存在传递依赖(即不存在:非主键列C依赖与非主键列B,非主键列B依赖与主键的情况)
    举例子可以这样理解:
    我们有一张订单表,Order(OrderID,OrderDate,CustomerID,CustomerName)。其中主键为(OrderID),剩下的非主键完全依赖于主键(OrderID),另外CustomerName是依赖于CustmerID的,而CustmerID是依赖与OrderID的,CustmerName不是直接依赖于OrderID的,所以不符合3NF。
    解决此类的办法是拆分表:
    表一Order(OrderID,OrderDate,CustmerID)
    表二Customer(CustomerID,CustomerName)

    4、总结

    1NF是很容易理解的,但是2NF跟3NF容易混淆,其实区别2NF与3NF最主要的还是:2NF:看非主键是否完全依赖于主键,还是依赖与主键的一部分。3NF:非主键列是直接依赖主键,还是直接依赖于非主键列的

    展开全文
  • 测试数据库是开发数据库的子集,只包含订制产品规范和适用产品规范所有试验标准数据,以及处理这些数据机制; 开发者为数据库设置安全机制,绑定硬盘、建立帐户、设置权限和运行密码; 开发者通过运行密码...
  • 数据库面试考点归纳

    2020-11-11 17:06:56
    2020年秋招期间自己归纳关于数据库的考点。通过秋招面试情况来看,大部分问题确实有被问到,对自己也有非常大帮助。不建议直接看我写回答,而是带着问题去总结自己回答。相信坚持就会有好结果。 31个问题,...

    2020年秋招期间自己归纳关于数据库的考点。通过秋招面试情况来看,大部分问题确实有被问到,对自己也有非常大的帮助。不建议直接看我写的回答,而是带着问题去总结自己的回答。相信坚持就会有好结果。

    31个问题,共计九千多字。

    1、 数据库的三大设计范式
    数据库范式就是一张数据表的表结构所符合的某种设计标准的集合。
    第一范式:列不可分,符合1NF的关系中的每个属性都不可再分。
    第二范式:若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。理解: 第二范式是指每个表必须有一个(有且仅有一个)数据项作为关键字或主键(primary key),其他数据项与关键字或者主键一一对应,即其他数据项完全依赖于关键字或主键。
    第三范式:非主属性既不传递依赖于码,也不部分依赖于码。理解: 第三范式要求在满足第二范式的基础上,任何非主属性不依赖于其他非主属性,即在第二范式的基础上,消除了传递依赖。
    https://4m.cn/9DgrX

    2、 什么是数据库索引,有什么作用
    是对表中一列或多列的值进行排序的一种数据结构,是为了加快查询速度而对表字段附加的一种标识。对表进行搜索默认的方式是全表扫描,如果为该字段添加索引,就可以直接定位到特定的行数,大大减少匹配行数,增加速度。

    3、 数据库索引的底层数据结构实现是啥? B树和B+树的区别
    Mysql数据库(InnoDB引擎)的索引是由B+树实现的
    B树即N阶B树,指一个节点上最多有N个子树,它在平衡二叉树的基础上又极大的减小了树的深度,因此在进行搜索的时候会有更快的速度。缺点在于范围查询时,需要多次的回溯,当数据量较大时,极大的限制了查询速度。B+树将数据只存放在叶子节点上,非叶子节点用作索引。叶子节点用连续的双向链表连接,因此在不牺牲纵向查找速度的情况下,又能在横向叶子节点上快速确定查找范围。兼顾了查询的速度和范围查找的速度,所以许多数据库底层使用了B+树来实现。

    4、 B+树相对于B树的优点
    B+tree的磁盘读写代价更低:B+tree的内部结点并没有指向关键字具体信息的指针,因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多,相对来说IO读写次数也就降低了;
    B+tree的查询效率更加稳定:由于内部结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以,任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询路径长度相同,导致每一个数据的查询效率相当;
    数据库索引采用B+树而不是B树的主要原因:B+树只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树只能中序遍历所有节点,效率太低。

    5、B树和B+树在节点存储结构上的差异
    B树中每个节点存储的除了关键码的范围值,还包含了范围内多个关键码的有序表和指向含有这些关键码记录的指针(顺序表的大小一般为一个页面大小,方便从磁盘到内存的调页过程中只要一次I/O操作就可以完成)。当查找到该节点时,会先在顺序表中查找,若找到,则查找成功;否则,到按照对应的指针信息指向的子树中去查找,当到达叶子结点时,则说明树中没有对应的关键码。
    B+树非叶节点只保存关键码的范围值,所有的关键码列表都存放在叶子节点中。因此,B+树中对数据的查找过程不管成果与否都会走完一条从根节点到叶子节点的完整路径。搜寻的效率是稳定的。

    5、 数据库索引的优缺点
    优点:通过创建唯一性索引可以保证数据库每一行数据的唯一性;可以大大加快数据查询分组和排序的时间;可以加快表之间的连接;
    缺点:索引表的维护需要消耗时间和物理内存,且表越大,这种消耗越明显;此外对表进行增删改时,索引需要进行动态的维护,降低了数据的维护速度。

    6、 什么样的表应该建立索引
    数据量大,查询操作频繁。遵循的原则如下:
    频繁作为查询条件的字段应该创建索引(where 后面的语句);
    查询中与其它表关联的字段,外键关系建立索引;
    查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度;
    查询中统计或者分组字段;

    7、 哪些情况下不用建索引
    加粗样式记录太少;
    经常增删改的表;
    Where条件里用不到的字段不创建索引;
    数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引。
    注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
    特殊的格式例如文本或者图像不建立索引。

    8、 创建索引时需要注意什么问题
    非空字段:应该指定列为NOT NULL,除非你想存储NULL。在mysql中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值;
    取值离散大的字段:(变量各个取值之间的差异程度)的列放到联合索引的前面,可以通过count()函数查看字段的差异值,返回值越大说明字段的唯一值越多字段的离散程度高;
    索引字段越小越好:数据库的数据存储以页为单位一页存储的数据越多一次IO操作获取的数据越大效率越高。

    9、 数据库索引失效的场景
    列类型是字符串,查询条件未加引号。(例如:身份证号)
    未使用该列作为查询条件
    使用like时通配符在前
    查询条件中使用OR
    索引列进行函数运算
    mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描
    is not null 也无法使用索引,但是is null是可以使用索引的
    组合索引ABC问题,Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部分,但只能是最左侧部分。最左匹配原则。

    10、 索引的分类
    普通索引:仅加速查询
    唯一索引:加速查询 + 列值唯一(可以有null)
    主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
    组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
    全文索引:对文本的内容进行分词,进行搜索。只能用于MYISAM类型的数据表;只能用于CHAR ,VARCHAR,TEXT数据列类型。
    覆盖索引(covering index)指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。 当一条查询语句符合覆盖索引条件时,MySQL只需要通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表操作,减少I/O提高效率。所以说覆盖索引属于组合索引。所以覆盖索引不属于基本索引类型。

    11、 什么是聚簇索引(聚集索引)和非聚簇索引
    InnoDB中,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。
    Innodb通过主键聚集数据,如果没有定义主键,innodb会选择非空的唯一索引代替。如果没有这样的索引,innodb会隐式的定义一个主键来作为聚簇索引。
    我们日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助索引就是一个为了需找主键索引的二级索引,现在找到主键索引再通过主键索引找数据;
    在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。Innodb辅助索引的叶子节点并不包含行记录的全部数据,叶子节点除了包含键值外,还包含了相应行数据的聚簇索引键。

    12、 聚簇索引的优缺点
    优点:数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快;
    聚簇索引对于主键的排序查找和范围查找速度非常快。
    缺点:插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键;
    更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新;
    二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

    13、 为什么用自增列作为主键
    如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、
    如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引;
    如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引
    数据记录本身被存于主索引(一颗B+Tree)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)
    如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页
    如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。

    14、 什么是数据库事务
    定义:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。可以简化错误恢复并使应用程序更加可靠。一个执行单元要想成为事务,就必须有以下四个特性:ACID(原子性,一致性,隔离性和持久性)。
    原子性:一个事务是最小的执行单元不可再分;
    一致性:事务的执行会使数据从一个一致状态切换到另一个一致状态;
    隔离性:一个事务的执行不会受其他事务的干扰;
    持久性: 一个事务一旦提交就会永久的改变数据库的数据;

    15、 事务的并发会产生那些问题
    脏读:一个事务读取了其他事物还未提交的数据,读到的是其他“更新”的数据;
    不可重复读:在一个事务中多次读取,数据不一样;
    幻读:一个事务读取了其他事务还未提交的数据,读到的是其他事务插入的数据;

    16、 数据库四种事务的隔离级别
    read uncommitted:读未提交,它允许一个事务读取另一个事务还没commit的数据,这样可能会提高性能,但是会导致脏读问题;
    read committed:读已提交,在一个事务中只允许对其它事务已经commit的记录可见,该隔离级别不能避免不可重复读问题;
    repeatable read:可重复读,在一个事务开始后,其他事务对数据库的修改在本事务中不可见,直到本事务commit或rollback。但是,其他事务的insert/delete操作对该事务是可见的,也就是说,该隔离级别并不能避免幻读问题。在一个事务中重复select的结果一样,除非本事务中update数据库。
    serializable:串行化,只允许事务串行执行。
    mysql中默认第三个隔离级别 oracle中默认第二个隔离级别

    16、MySQL存储引擎中的MyISAM和InnoDB区别详解
    存储结构:每个MyISAM在磁盘上存储成三个文件:.frm文件存储表定义,数据文件的扩展名为.MYD (MYData),索引文件的扩展名是.MYI (MYIndex)。InnoDB所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
    存储空间:MyISAM可被压缩,占据的存储空间较小,支持静态表、动态表、压缩表三种不同的存储格式。InnoDB需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
    事务支持:MyISAM强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。InnoDB提供事务、外键等高级数据库功能,具有事务提交、回滚和崩溃修复能力。
    表锁差异:MyISAM只支持表级锁,用户在操作MyISAM表时,select、update、delete和insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。InnoDB支持事务和行级锁。行锁大幅度提高了多用户并发操作的新能,但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
    全文索引:MyISAM支持 FULLTEXT类型的全文索引;InnoDB不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
    表主键:MyISAM允许没有任何索引和主键的表存在,索引都是保存行的地址。对于InnoDB,如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
    外键:MyISAM不支持外键,而InnoDB支持外键。

    17、 什么是存储过程?有什么特点?
    存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合。进一步地说,存储过程是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。存储过程具有以下特点:
    存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行效率;
    当SQL语句有变动时,可以只修改数据库中的存储过程而不必修改代码;
    减少网络传输,在客户端调用一个存储过程当然比执行一串SQL传输的数据量要小;
    通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。

    18、 简单说一说drop、delete与truncate的区别
    SQL中的drop、delete、truncate都表示删除,但是三者有一些差别:
    Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除, delete命令会触发这个表上所有的delete触发器;
    Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比delete更快,占用的空间更小;
    Drop命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的DML触发器也不会被触发,这个命令也不能回滚。
    因此,在不再需要一张表的时候,用drop;在想删除部分数据行时候,用delete;在保留表而删除所有数据的时候用truncate。

    19、 数据库触发器的概念及作用
    触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。
    特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原子性,要么全部执行,要么都不执行;
    作用:保证数据的完整性,起到约束的作用;
    使用的一个实例:建立数据库增删改的触发器,当执行增删改的时候触发各自的触发器并将原始数据记录在备份表中。当需要执行回滚操作时,可以恢复。
    https://www.cnblogs.com/zwj-199306231519/p/10766887.html

    20、 什么叫视图?游标是什么?
    视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。
    游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。
    区别:游标和视图的本质是不同:一个是作为指针操作,一个是作为数据库对象来展现给用户。占用的资源不用:游标占用的资源很大,而视图占用的资源很小。工作方式不同:游标对需要的数据操作是针对行进行操作的,而视图是针对基表的一个整体的查询。
    在操作mysql的时候,我们知道MySQL检索操作返回一组称为结果集的行。这组返回的行都是与 SQL语句相匹配的行(零行或多行)。使用简单的 SELECT语句,例如,没有办法得到第一行、下一行或前 10行,也不存在每次一行地处理所有行的简单方法(相对于成批地处理它们)。有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条 SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。

    21、 讲讲数据库里的锁机制。
    锁是计算机协调多个进程或线程并发访问某一资源的机制。
    从对数据的操作类型分为:读锁(共享锁)(针对同一份数据,多个读操作可以同时进行而不会互相影响。)和写锁(排它锁)(当前写操作没有完成前,它会阻断其他写锁和读锁。)
    从对数据操作的粒度分为:表锁(偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低)和行锁(偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高);

    对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。
    对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。
    简而言之,就是读锁会阻塞写,但是不会堵塞读。而写锁则会把读和写都堵塞

    InnoDB使用行锁需要注意的点:用“where”对行进行加锁时,扫描过的所有行都会被上锁。因此当“where”中的条件没有用索引或者出现索引失效的情况下,就会全表扫描,那样行锁就会变成了表锁;

    22、 什么是间隙锁,其作用及危害
    当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,
    InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(GAP Lock)。
    由于MySql默认的隔离级别是RR(可重复读),所以没有办法解决幻读的问题。但是间隙锁的存在,有可能会避免幻读现象;
    间隙锁有一个比较致命的弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据。有可能会降低并发性。

    23、 数据库的优化有哪几个方面
    数据库的优化主要有四个方面:SQL语句及索引的优化、数据表结构的优化、系统配置的优化和硬件的优化。

    24、 SQL语句及索引的优化方法
    怎么发现有问题的SQL:1)MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10s以上的语句。2)使用 EXPLAIN 关键字分析查询语句或是表结构的性能瓶颈。通过explain命令可以得到表的读取顺序、数据读取操作的操作类型、哪些索引可以使用、哪些索引被实际使用、表之间的引用以及每张表有多少行被优化器查询等问题。当扩展列extra出现Using filesort和Using temporay,则往往表示SQL需要优化了。
    优化方法:
    1) 使用索引加快查询分组和排序速度(但是注意索引失效的情况);
    2) 关联查询优化:保证被驱动表的join字段已经被索引;left join 时,选择小表作为驱动表,大表作为被驱动表;子查询尽量不要放在被驱动表,有可能使用不到索引;(关联查询中驱动表会被全表扫描,所以需要越小越好)
    3) 子查询优化:有索引的情况下 用 inner join 是最好的 其次是 in ,exists最糟糕。无索引的情况下用,小表驱动大表 因为join 方式需要distinct ,没有索引distinct消耗性能较大,所以exists性能最佳in其次join性能最差。
    4) order by关键字优化
    5) GROUP BY关键字优化
    6) 去重优化,尽量不要使用distinct。

    25、 数据库表结构的优化
    数据库表结构的优化包括选择合适数据类型、表的范式的优化、表的垂直拆分和表的水平拆分等手段。

    26、 什么是数据库连接池
    数据库连接池是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
    数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池。由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应该在请求队列中排队等待。并且应用程序可以根据池中连接的使用率,动态增加或减少池中的连接数。

    27、 传统的连接机制与数据库连接池运行机制区别
    传统的连接机制:TCP三次握手建立连接;mysql认证;sql查询;mysql关闭;tcp四次挥手断开连接。在sql查询阶段只会执行一条sql语句。
    数据库连接池机制:过程与传统的机制相同,不同点在于在sql查询阶段可以进行多次查询,也就是会复用之前创建的连接,减少网络开销,提升速度。

    28、 数据库链接池的工作原理
    连接池的工作原理主要由三部分组成,分别为:连接池的建立;连接池中连接的使用管理;连接池的关闭。
    连接池的建立:一般在系统初始化时,连接池会根据系统配置建立,并在池中创建了几个连接对象,以便使用时能从连接池中获取。连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和关闭造成的系统开销。
    连接池的管理:当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。当客户释放数据库连接时,先判断该连接的引用次数是否超过了规定值,如果超过就从连接池中删除该连接,否则保留为其他客户服务。该策略保证了数据库连接的有效复用,避免频繁的建立、释放连接所带来的系统资源开销。
    连接池的关闭:当应用程序退出时,关闭连接池中所有的连接,释放连接池相关的资源,该过程正好与创建相反。

    29、 什么是超键,候选键,主键和外键
    超键:在关系中能唯一标识元组属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
    候选键:是最小超键,即没有冗余元素的超键。
    主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。主键是从候选键中选择的一个。
    外键:在一个表中存在的另一个表的主键称此表的外键。

    30、 数据库中char和varchar的区别
    定长与变长:char是定长,默认为1,对于指定的长度,如达不到改长度就用null填充,varchar变长,根据实际长度分配空间大小。(c++中的数组与容器)
    存储速度:char定长,有利于数据的存放和查找。
    存储容量:char只能存放255个字符,和编码无关,varchar是65532个字节;

    31、 数据库多表连接查询的实现方式
    交叉连接:即笛卡尔乘积,是指关系中所有元素的任意组合。(cross join)
    内连接:是一种任意条件的查询,如果两个表的字段满足连接条件,就从两表中提取数据组合成新的记录。(inner join … on…),根据条件不同可以分为等值连接(有重复列),不等连接和自然连接(无重复列)。
    自连接:再一次连接查询中,涉及到的两个表都是同一个表,这种查询就称为自连接查询。
    外连接:内连接的查询结果都是满足连接条件的元组。但有时我们也希望输出那些不满足连接条件的元组信息。包含有:左外连接(LEFT OUTER JOIN…ON)左外连接查询中左端表中的所有元组的信息都得到了保留。右外连接(RIGHT OUTER JOIN…ON)右外连接查询中右端表中的所有元组的信息都得到了保留。全外连接(FULL OUTER JOIN)全外连接查询中所有表中的元组信息都得到了保留。三种方式没找到的元素都用NULL代替。

    展开全文
  • 数据库习题集

    2020-03-15 16:48:05
    1.某关系R的外键是指______ A 其它关系的候选键,可以是R中的主属性或非主属性 B 该关系除主键之外的另一个候选键 C 其它关系的候选键,同时作为R的主属性 D 其它关系的候选键,同时作为R的非主属性 正确答案:A ...
  • 解决这一问题的关键要对数据本身加密,即使数据不幸泄露或丢失,也难以被人破译,关于这一点现基本数据库产品都支持对数据库中的所有数据加密存储。 对数据进行加密,主要有三种方式:系统中加密、客户端(DBMS...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    检索数据库中的数据 D.为该变量检索列的数据类型和值 19.下列哪一项可以正确地引用该记录变量中的一个值?( B ) A.rec_abc(1) B. rec_abc(1).col C. rec_abc.col D.rec_abc.first() 20. 在定义游标时使用的FOR ...
  • 在 MySQL 数据库中提供了关于字段优化和建议函数,来让我们方便地得到数据库给出优化建议。我们再来根据实际应用情况考虑是否要采用优化建议,使用如下 SQL 语句: <pre><code>SELECT * FROM ...
  • Sam R.Alapati世界顶尖Oracle技术专家,一位经验丰富的数据库管理员,有20多年从业经历。他拥有Oracle OCP DBA证书和HP UNIX System Administrator证书,曾经担任Oracle公司高级顾问,并在AT&T、雷曼兄弟、...
  • 注意:ReceivedDate列指的是订单录入系统(即保存到数据库中日期,而不是消费者接收到其所订购书籍日期。 TITLE4(Name, ISBN, CallNumber, Year, AuthorFName, AuthorLName); PK(CallNumber) MEMBER4(LibId,...
  • 数据字典是关于数据信息集合,也就是对数据流程图包含所有元素定义集合。它能将数据流程图全部数据流及其组成部分数据元素、数据存储、数据加工等描述清楚,便于后续工作—系统设计进行。 数据字典...
  • 拖库是指黑客盗取了网站的数据库。撞库是指黑客用拖库获得用户名和密码在其它网站批量尝试登陆,进而盗取更有价值东西。由于一些用户在多个网站用相同用户名和密码,所以撞库是有一定成功率。现在稍微有点...
  • 3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 90 3.5 临时文件 92 3.6 控制文件 94 3.7 重做日志文件 94 3.7.1 在线重做日志 95 3.7.2 归档重做日志 97 3.8 密码文件 99 3.9 ...
  • 3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 91 3.5 临时文件 93 3.6 控制文件 95 3.7 重做日志文件 95 3.7.1 在线重做日志 96 3.7.2 归档重做日志 98 3.8 密码文件 100 3.9 ...
  • 关于.net 设置404页面说明

    千次阅读 2016-11-04 13:35:32
    404页面指的是原来可以正常访问链接,在某些特殊原因后失效,在访问这个链接时候,服务器就会返回404状态错误页面。 那么如何设置404页面呢?本文将针对ASP.NET设置404页面进行说明 1、当页面打开某条信息...
  • 在mac上安装一个数据库  ...-h 指出服务器名 localhost是指本机( 本地主机;本地服务器) -u 指出用户名 root是默认的最高权限用户名 -p指出密码 不填就指密码为空  3.显示当前mysql中的所有库  show
  •  尽管SAN和NAS有很多共同特征,但二者还是有很大差异,其最大差异是存储局域网是一个网络概念,而附网存储实际上是指一种可以与网络直接相连存储设备,它更多是强调“设备”概念。存储局域网考虑是...
  • Log Explorer4.2注册

    2011-06-23 21:17:58
    操作是数据库中定义"原子行为",每个操作都在日志文件中保存为一条记录。它可以用户直接输入SQL语句,比如标准insert命令,日志文件中便会记录一条操作代码来标志这个insert操作。 事物(Transaction) ...
  • Log Explorer4.2(注册+汉化包)

    千次下载 热门讨论 2011-06-22 00:45:08
    操作是数据库中定义"原子行为",每个操作都在日志文件中保存为一条记录。它可以用户直接输入SQL语句,比如标准insert命令,日志文件中便会记录一条操作代码来标志这个insert操作。 事物(Transaction) ...
  • Lumigent Log Explorer(含注册)

    热门讨论 2011-08-03 16:20:53
    操作(Operation) 操作是数据库中定义"原子行为",每个操作都在日志文件中保存为一条记录。它可以用户直接输入SQL语句,比如标准insert命令,日志文件中便会记录一条操作代码来标志这个insert操作。 事物...
  • Log Explorer 4.2 官方版(含注册

    热门讨论 2013-09-14 10:57:53
    操作是数据库中定义"原子行为",每个操作都在日志文件中保存为一条记录。它可以用户直接输入SQL语句,比如标准insert命令,日志文件中便会记录一条操作代码来标志这个insert操作。 事物(Transaction) ...
  • 操作是数据库中定义"原子行为",每个操作都在日志文件中保存为一条记录。它可以用户直接输入SQL语句,比如标准insert命令,日志文件中便会记录一条操作代码来标志这个insert操作。 事物(Transaction) ...
  • (Item在Model定义了,是指具体某一类别Product,如男猫或女猫) 4、 对于其中GetItemsByProduct()方法,返回是一个ArrayList接口类型(IList)对象(见问题部分!) 5、 IOrder.cs文件:定义了一组...
  • 需要代码可在文末扫识别二维码,在我----关于我—可找到我联系方式。 实现效果如下: 分析实现过程: 这个过程实现不难,这里之所以再介绍因为这里实现通过微信数据库实现数据动态填充。 ...
  • 背景:2011年12月被曝光的CSDN密码泄露事件中,网站安全措施不给力,导致用户数据库被黑客“拖库”,令人错愕的事数据库中的密码居然明文保存,导致密码吗泄露,成为地下交易的商品 通常,为了保护网站敏感数据,...
  • vss如何使用(图解)

    热门讨论 2011-04-25 15:10:48
    项目(project)是指用户存储在VSS数据库中的所有文件(file)的集合。用户可以在项目之间或项目内部实现文件的添加(add)、删除(delete)、编辑(edit)、共享(share)。一个“项目(project)”在很大程度上类似于一个普通...
  • 从技术方面可以定义为:电子商务一种多技术集合体,包括交换数据(如电子数据交换、电子邮件)、获得数据(共享数据库、电子公告牌)以及自动捕获数据(条形)等。电子商务涵盖业务包括:信息交换、售前售后...
  • 关于发布提示数据库连接出错,请检查数据库名称及路径是否正确 首先请确定你本地配置好IIS及在官方合作站点下载权限,如你系统XP,请按以下操作 1,XP NTFS格式 右击文件夹属性没有安全选项,工具--文件夹选项--...

空空如也

空空如也

1 2 3 4 5 6
收藏数 117
精华内容 46
关键字:

关于数据库中的码是指