请问什么是数据库事物
参考回答:
1.为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
2.当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
当事务被提交给了DBMS(数据库管理系统),则DBMS(数据库管理系统)需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。
数据库事务拥有以下四个特性,被称之为ACID特性:
原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
● 请你说一下数据库连接泄露的含义
参考回答:
● 请你写一下mysql删除语句
参考回答:
用drop语句来删除数据库:drop database db;
用drop语句来删除表:drop table tb;
2.delete语句。用来删除表中的字段。
delete from tb where id=1;
如果delete语句中没有加入where就会把表中的所有记录全部删除:
3.用truncate来删除表中的所有字段:
truncate table tb;
● 请你说一下数据库mysql中CHAR和VCHAR的区别
参考回答:
char类型是定长的类型,即当定义的是char(10),输入的是"abc"这三个字符时,它们占的空间一样是10个字节,包括7个空字节。当输入的字符长度超过指定的数时,char会截取超出的字符。而且,当存储char值时,MySQL是自动删除输入字符串末尾的空格。 char是适合存储很短的、一般固定长度的字符串。例如,char非常适合存储密码的MD5值,因为这是一个定长的值。对于非常短的列,char比varchar在存储空间上也更有效率。取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要。
2、varchar(n)类型
varchar(n)类型用于存储可变长的,长度为n个字节的可变长度且非Unicode的字符数据。n必须是介于1和8000之间的数值,存储大小为输入数据的字节的实际长度+1/2. 比如varchar(10), 然后输入abc三个字符,那么实际存储大小为3个字节。除此之外,varchar还需要使用1或2个额外字节记录字符串的长度,如果列的最大长度小于等于255字节(是定义的最长长度,不是实际长度),则使用1个字节表示长度,否则使用2个字节来表示。取数据的时候,不需要去掉多余的空格。
● 请你写两个sql语句,统计XX人数、选出课程编号不为XX的学生学号
参考回答:
SELECT 学号,
FROM S
WHERE NOT EXISTS (SELECT *
FROM SC
WHERE SC.课程号 = ‘XX‘
AND S.学号 = SC.学号);
● 请你说一下SQL左连接以及使用场景
参考回答:
使用场景:可以保持左表完整加入另一表中的数据。
● 请你写一下SQL查询、更新的某一列语句
参考回答:
UPDATE 表名 SET 列名=更新的值 WHERE 条件
● 请你写一下SQL语句的多表查询
参考回答:
● 请你说说redis
参考回答:
● 请你写一些基本的SQL语句
参考回答:
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ‘%value1%‘ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
● 某个表格中有10条一模一样的数据,现在要删掉其中的9条,请你写一下sql语句
参考回答:
1
|
delete * from table_name limit 9
|
● 某个表格存着s_name subject score 三个字段,比如某一行是 张三 数学 76,现在要选取出所有科目成绩都大于80分的学生名字,请写出sql语句
参考回答:
1
|
select s_name from table_name where s_name not in (select s_name from table_name where score <80) |
● 请你说一说数据库中的聚类查询
参考回答:
如果不创建索引,系统会自动创建一个隐含列作为表的聚集索引。
1.创建表的时候指定主键(注意:SQL Sever默认主键为聚集索引,也可以指定为非聚集索引,而MySQL里主键就是聚集索引)
create table t1( id int primary key, name nvarchar(255) )
2.创建表后添加聚集索引
1
2
3
4
|
SQL Server: create clustered index clustered_index on table_name(colum_name) MySQL: alter table table_name add primary key(colum_name) |
● 请问如果mysql中用户密码丢了怎么办,建一个数据库表,授权命令是什么
参考回答:
若是root密码丢失,可通过mysqlld_saft方式找回
1、停止mysql:service mysqld stop
2、安全模式启动:mysql_safe-skip-grant-tables&
3、无密码回车键登录:mysql –uroot –p;
4、重置密码:use mysql update user set password=password(“)where user=’root’ and host=’localhost’;flush privileges
5、正常启动:service mysql restart
6、再使用mysqladmin:mysqladmin password ‘123456’
Mysql创建数据库
Create database demodb default character set utf8 collate utf8_general_ci;
授权
Grant all privileges on demodb. * [用户名称]@’%’
立即启动修改
Flush privileges
● 写出sql语句:数据库统计总成绩取前十名的学生
参考回答:
1
2
3
4
|
SELECT * FROM ( select T.*,ROW_NUMBER()OVER(PARTITION BY 班级 order by 成绩 desc) RN FROM T )WHERE RN<=10 |
● 请你说一下数据库事务、主键与外键的区别?
参考回答:
主键和外键的区别:
1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
● 请问对缓存技术了解吗
参考回答:
Redis 工作方式分析
Redis作为一个高性能的key-value数据库具有以下特征:
1、多样的数据模型
2、持久化
3、主从同步
Redis支持丰富的数据类型,最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis通常将数据存储于内存中,或被配置为使用虚拟内存。Redis有一个很重要的特点就是它可以实现持久化数据,通过两种方式可以实现数据持久化:使用RDB快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的AOF日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。 Redis支持将数据同步到多台从数据库上,这种特性对提高读取性能非常有益。
● 请问count和sum的区别,以及count(*)和count(列名)的区别
参考回答:
Count(*)包括了所有的列,在统计结果的时候不会忽略列值为null
Count(列名)只包括列名那一项,会忽略列值为空的计数
● 请问你数据库是用的MySQL吗?平常数据库的语句都是怎么写的? join作用,想删除一行怎么做
参考回答:
内连接(自然连接):当使用内连接时,如果Student中某些学生没有选课,则在SC中没有相应元组。最终查询结果舍弃了这些学生的信息
外连接:如果想以Student表为主体列出每个学生的基本情况及其选课情况。即使某个学生没有选课,依然在查询结果中显示(SC表的属性上填空值)。就需要使用外连接
例子:
//内连接:查询每个学生及其选修课程的情况(没选课的学生不会列出)
1
2
3
|
SELECT Student.*, SC.* FROM Student , SC WHERE Student.Sno=SC.Sno; |
//外连接:查询每个学生及其选修课程的情况(没选课的学生也会列出)
1
2
|
SELECT Student.*, SC.* FROM Student LEFT JOIN SC ON(Student.Sno=SC.Sno); |
● 请问如何对数据库作优化
参考回答:
2、调整SQL语句, ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。
3、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。
4、调整硬盘I/O,DBA可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。
● 请问什么是幻读
参考回答:
● 请你说一下MyBatis有什么优势,他如何做事务管理
参考回答:
1.易于上手和掌握
2. sql写在xml里,便于统一管理和优化。
3. 解除sql与程序代码的耦合。
4. 提供映射标签,支持对象与数据库的orm字段关系映射
5. 提供对象关系映射标签,支持对象关系组建维护
6. 提供xml标签,支持编写动态sql。
Mybatis管理事务是分为两种方式:
(1)使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交
(2)使用MANAGED的事务管理机制,这种机制mybatis自身不会去实现事务管理,而是让程序的容器(JBOSS,WebLogic)来实现对事务的管理
● 请你说一下事务的隔离级别,以及你一般使用的事务是哪种
参考回答:
事务隔离级别如下: