Java初级面试题整理
目录
mysql部分
基本概念
char和varchar
区别
-
char 是一种固定长度的字符串类型,
-
varchar 是一种可变长度的字符串类型;
适用场景:
-
char一般用来存储长度固定字段,如:手机号,身份证号等
-
varchar一般用来存储不固定长度的字段:如:用户名,昵称等
drop、delete与truncate
相同点:
-
truncate和不带where子句的delete、以及drop都会删除表内的数据。
区别:
-
drop、truncate都是DDL语句(数据库定义语言),执行后会自动提交,操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。
-
delete 是DML语句(数据库操作语言),这个操作会放到rollback segement 中,事务提交之后才生效;支持事务回滚,如果有相应的 trigger,执行的时候将被触发。
-
delete不重置自动增长列的计数值
-
truncate重置自动增长列的计数值
删除速度/效率:
一般来说删除效率: drop> truncate> delete
-
truncate在功能上与不带 where子句的 delete语句相同:二者均删除表中的全部行。但truncate比 delete速度快,且使用的系统和事务日志资源少。
-
delete语句每次删除一行,并在事务日志中为所删除的每行 记录一项。
-
truncate通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
-
truncate删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。
使用范围:
delete:想删除部分数据行用 delete,注意应带上where条件子句. 回滚段要足够大;
drop:想删除整个表,当然用 drop;
truncate:想保留表字段、索引等而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
不能对以下表使用 TRUNCATE TABLE:
-
对于有foreign key约束引用的表,不能使用truncate,而应使用不带 where子句的 delete语句。(您可以截断具有引用自身的外键的表。)
-
TRUNCATE TABLE 不能激活触发器,因为该操作不记录各个行删除。
-
TRUNCATE TABLE 不能用于参与了索引视图的表。
关于数据库主键和外键
主键:
-
唯一标识一条记录的字段或字段的组合称为主键。
-
主键不能重复,不允许为空
-
作用:定义主键来强制不允许空值的指定列中输入值的唯一性。任何表都应该有且仅有唯一的主键,在数据库中为表定义主键,可将该表与其它表相关联,从而减少冗余数据。
外键:
-
通过设置外键和其他表建立关联关系(一对一,一对多,多对多),用来维护表之间数据一致性
-
外键是关联从表的主键,可以重复, 允许为空值
-
作用:FOREIGN KEY 约束并不仅仅只可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束不允许空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过 FOREIGN KEY 约束的校验。
mysql支持的约束
六种约束:
-
NOT NULL:非空约束,用于保证该字段的值不能为空;比如姓名、学号等
-
DEFAULT:默认约束,用于保证该字段有默认值;比如性别
-
PRIMARY KEY:主键约束,用于保证该字段的值具有唯一性,并且非空;比如学号、员工编号等
-
UNIQUE:唯一约束,用于保证该字段的值具有唯一性,可以为空;比如座位号
-
CHECK:检查约束【mysql中不支持】;比如年龄、性别
-
FOREIGN KEY:外键约束,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值;比如学生表的专业编号,员工表的部门编号,员工表的工种编号
添加约束的时机:
-
创建表时
-
修改表时
约束的添加分类:
-
列级约束:六大约束语法上都支持,但外键约束没有效果
-
表级约束:除了非空、默认,其他的都支持
了解更多请点击:约束的使用
5种SQL常用聚合函数
常用的聚合函数有:COUNT(),SUM(),AVG()