数据库总结

java数据库总结


1、什么是主键,什么是外键?
主键:是一条记录在整个表中的唯一标识。可以利用主键区分不同的记录
主键的特点:非空和不能重复

外键:是指从表的某列与主表的主键存在依附关系
外键约束是指在外键关联主键上强制加上一个约束,如果违反该约束则不允许该条数据的修改。
注意:没有外键约束不表示没有外键

2、描述关系型数据库中的三种关系
关系数据库中的三种关系  (1)一对一:一条表记录对应一条从表记录,一条从表记录对应一条主记录 (2)一对多:一条主表记录对应多条从表记录,同时一条从表记录对应一条主表记录(3)多对多:一条主表记录对应多条从表记录,同时一条表记录对应多条表记录

3、如何创建数据库?如何删除数据库?如何创建表?如何删除表?
创建数据库:CREATE DATABASE Test
删除数据库:DROP DATABASE crm;
创建表:CREATE TABLE t_position(里面写属性)
删除表:DROP DATABASE Test

4、数据完整性的分类
(1)、实体完整性。保证一行数据是有效的。表中的一行数据如果与它所代表的实体完全一致,则具备实体完整性。
保证每行所代表的实体能相互区别,不能存在两条一摸一样的记录。
实现方法:--主键约束。主键不能为空,也不能重复,一个表中只能有一个主键
-- 唯一约束。指定给列的所有值必须唯一,该列在表中每一行的值必须唯一。它和主键约束的唯一区别在于该列可以为空,并且可以在一张表中给多个列设置唯一约束

(2)、域完整性。保证一列数据是有效的
域完整性是指定列的输入有效性
实现方法:--非空约束:NOT NULL
--默认约束:Default
--检查约束:check(MySQL不支持)

(3)、引用完整性。保证引用的主键是有效的,由外键约束实现

(4)、用户自定义完整性。保证自定义规则
5、如何定义主键约束和外键约束
主键约束: PRIMARY KEY AUTO_INCREMENT
外键约束:  alter table 从表名 add constraint fk_1 foreign key(外键列名)references 主表名(主键名)
6、外键和外键约束的区别:
外键是指从表的某列与主表的主键存在依附关系
外键约束是指在外键关联主键上强制加上一个约束,如果违反该约束则不允许该条数据的修改。
7、添加、删除、修改的SQL语句如何书写?
增:insert into 表名(字段列表)values(值列表)
删:delete from 表名 where 条件
改:update 表名 set 列名=新值 where 条件
查:select * from 表名
8、如何查询表全部数据?如何按字符串字段模糊查询?_和%的区别。
select * from 表名      SELECT * FROM   where 表名 like '%"+"内容"+"%'"       
%:表示任意个或多个字符。可匹配任意类型和长度的字符。   

_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)

9、如何去除重复记录,如何得到查询结果限定行数的记录
排除重复记录用distinct
限制查询数据的返回限定行数使用limit 0,3

10、and和or的区别。in在什么时候使用。
where语句中同时出现条件的“与”或者“或的时候”,要将多个OR用小括号括起来再和AND进行“与”,或者将多个AND用小括号括起来再与OR进行“或”。

in在数据多的时候使用
11、如何处理null值?
is null    is not null
12、如何排序?如何表示升序或降序?
默认为ASC升序,ASC可以不加
-- 降序为DESc
SELECT * FROM t_student ORDER BY grade ASC;
SELECT * FROM t_student ORDER BY grade DESC;
13、聚合函数有哪些?
count:统计行的数量
sum:获取单个列的合计值
avg:计算某个列的平均值
max:计算列的最大值
min:计算列的最小值
14、count(*)和count(列名)的区别
count(*)是针对于全表的而count(列)是针对于某一列的
15、分组时,查询的字段可以是什么字段。
只能是分组列和聚合函数
16、HAVING和WHERE区别
where执行在分组之前,所以不能跟聚合函数
having 执行在分组之后,是对分组结果的筛选,只能跟聚合函数
17、描述SQL查询语句执行顺序
第一步:执行from
第二步:where条件过滤
第三步:group by 分组
第四步:执行select投影列
第五步:having条件过滤
第六步:执行order by排序
18、内联接和外联接的区别

内联接只能查询主表和从表有对应记录的数据
外联接可以查询一个表中的所有记录,无论这些数据是否有对应记录
19、如何进行表联接查询
SELECT ID,Name FROM Students
UNION SELECT ID,Name FROM Teachers

20、什么是JDBC

JDBC是java连接数据库的一套标准,该标准提供了大量的接口,这些接口由厂商根据自身数据库的特点做实现,由用户做方法调用,用户根据接口调用方法,可以屏蔽不同数据库的差异,这样无论连接什么数据库都是一套API。
21、Statement和PreparedStatement的区别

statement是preparedstatement的父接口。采用statement执行SQL语句时,由于SQL语句的值一般由用户提供,所以只能采用拼接字符串的方式设置。这样随着值的不同,系统会做多次SQL语句的编译操作,所以效率低,而且容易引起SQL注入
preparedstatement提供占位符机制,将需要设置值的地方都用占位符表示,这样无论什么值都是一个SQL语句。不会进行多次编译操作,效率高。而且无论什么值,都会做字符串处理,不会引起SQL注入。
22、什么是SQL注入。
SQL注入:采用字拼接符串方式,拼SQL语句时,如果值中有SQL语句的关键字或特殊字符,可能导致运行结果不正确,或SQL语句的语法错误。

23、JDBC开发步骤

1、加载驱动,建立连接
2、执行SQL语句
3、增、删、改需要更新数据库,查询需要得到结果集,并通过遍历结果集,得到查询数据。
4、关闭连接
24、什么是事务?事务有哪些特点?
什么是事务 
事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 
事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。 
二.事务的 ACID 
事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。 
1 、原子性 
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 
2 、一致性 
事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。 
3 、隔离性 
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 
4 、持续性 
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。 
25、描述三层架构

1、表现层:作为数据的展示和数据的提供
采用MVC模式。
M:表示模型。也就是实现类。作为数据存储和传输的介质
V:表示视图,也就是GUI 窗体。作为数据展示和收集的平台
C:表示控制。也就是事件处理。负责调用业务组件完成业务处理
2、业务层:业务逻辑处理。
采用事务脚本模式。将一次请求中所有的业务操作封装成一个方法。保证这些业务操作中,数据库更新操作同时成功,同时失败。不允许出现部分成功部分失败,这样引起数据混乱的操作。
3、持久层:主要目的是完成内存数据和磁盘数据的转换。
采用DAO模式。建立实体类和数据库表做映射,也就是哪个表对应哪个类,哪个列对应哪个属性,而持久性的目的就是完成对象数据和关系数据的转换。
26、有这样两张表:
部门表:id(编号,主键),deptName(部门名称),info(部门描述)
员工表:id(编号,主键),emName(姓名),birthday(生日),money(工资),deptId(所属部门,外键)
   
书写SQL语句完成以下操作:
-- 添加新员工:姓名:刘三  生日:1996-01-01   部门ID:2
 insert into 员工表 (emName,birthday,money,deptId)
values("刘三","1996-01-01",2)
-- 删除员工“刘三”
 delete from 员工表 where emName='刘三'
-- 将“董永”的工资上涨300
update 员工表 set money=gread+300;
-- 查询所有员工,并显示该员工所在部门名称
select deptId from 员工表
-- 查询“销售部”所有姓“刘”的员工
select s.* from t_staff s t_department d where s.depId="销售部"d.id and s.deptNamw= like'%李%'

-- 查询所有部门,并显示该部门的员工人数
select  d.*,count(s.id)from t_staff s right join t_department don s.depId=d.id group by d.id;
-- 查询员工人数超过20个人的部门,并显示该部门人数
select d.*,count(s.id)c from t_staff sright join t_department d on s.depId=d,id group by d.id having c>20`



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值