1. 主键、外键
主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能为空值。
外键:在一个表中存在的另一个表的主键,可以重复,可以为空
2. 数据库事务的以及它的四个特性
事务:是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。
四个特性包括:原子性、一致性、持久性和隔离性。(ACID)
原子性:这个是事务的操作,要不全部完成,要不全部没完成,不存在停滞在中间某个环节的情况。事务在执行过程中出错,会被回滚到事务开始前的状态。 原子性要求
一致性:在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
隔离性:当 多个用户并发访问数据库时,如操作同一张表,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
例如,对于任意两个并发的事务T1和T2,在事务T1看来,T2要不在T1开始之前就已经完成,要不在其结束之后再开始。这样每个事务都感觉不到其他事务在并发执行。
持久性:在事务完成以后,该事务对数据库所做的更改便持久的保存在数据库中,并不会被回滚。
数据库事务属性(ACID)是由数据库管理系统来进行保证的,在整个应用程序运行过程中,应用无需考虑数据库的ACID实现。
一般情况下,通过执行commit和rollback语句来终止事务,当执行commit语句时,自事务启动以来对数据库所做的一切更改就成为了永久性的了,即被写入磁盘;当执行rollback语句时,自事务启动以来对数据库所做的一切更改都会被撤销,并且数据库中内容放回到事务开始之前所处的状态。
3. 什么是存储过程?与函数有什么区别和联系?
SQL语句在执行时要先编译,然后在被执行。在大型数据库系统中,为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后,存储在数据库服务器中,用户通过指定存储过程的名字来调用执行。换句话,存储过程就是SQL语句预编译的过程。允许模块化的设计,只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程要比单纯的SQL语句执行要快。
SQL存储过程的具体使用
存储过程的优缺点:
优:1、存储过程都是预编译的过的,执行效率高。2、存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。3、安全性高。执行存储过程需要有一定权限的用户。4、存储过程可以重复使用,可减少数据库开发人员的工作量。
缺:移植性差。
存储过程与函数的区别
存储过程 | 函数 |
用于在数据库中完成特定的操作或者任务(如插入、删除等) | 用于特定的数据(如选择) |
程序头部声明用procedure | 程序头部声明用function |
程序头部声明时不需描述返回类型 | 程序头部声明时要描述返回类型,而且PL/SQL块中至少要包括一个有效的return语句 |
可以使用in/out/in out 三种模式的参数 | 可以使用in/out/in out 三种模式的参数 |
可作为一个独立的PL/SQL语句来执行 | 不能独立执行,必须作为表达式的一部分调用 |
可以通过out/in out 返回零个或多个值 | 通过return语句返回一个值,且改值要与声明部分一致,也可以是通过out类型的参数带出的变量 |
QL语句(DML 或SELECT)中不可调用存储过程 | SQL语句(DML 或SELECT)中可以调用函数 |
4.什么是索引?优缺点?
索引就是一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。就好像书的目录一样,不需要查重整本书就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。