数据库基本语句
请问什么是数据库事物
参考回答:
数据库事务是数据库管理系统执⾏过程中的⼀个逻辑单位,由⼀个有限的数据库操作序列构成。⼀个数据库事务通常包含了⼀个序列的对数据库的读/写操作。它的存在包含有以下两个⽬的:
1.为数据库操作序列提供了⼀个从失败中恢复到正常状态的⽅法,同时提供了数据库即使在异常状态下仍能保持⼀致性的⽅法。
2.当多个应⽤程序在并发访问数据库时,可以在这些应⽤程序之间提供⼀个隔离⽅法,以防⽌彼此的操作互相⼲扰。
当事务被提交给了DBMS(数据库管理系统),则DBMS(数据库管理系统)需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执⾏前的状态;同时,该事务对数据库或者其他事务的执⾏⽆影响,所有的事务都好像在独⽴的运⾏。
数据库事务拥有以下四个特性,被称之为ACID特性:
原⼦性(Atomicity):事务作为⼀个整体被执⾏,包含在其中的对数据库的操作要么全部被执⾏,要么都不执⾏。
⼀致性(Consistency):事务应确保数据库的状态从⼀个⼀致状态转变为另⼀个⼀致状态。⼀致状态的含义是数据库中的数据应满⾜完整性约束。
隔离性(Isolation):多个事务并发执⾏时,⼀个事务的执⾏不应影响其他事务的执⾏。
持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
●请你说⼀下数据库连接泄露的含义
参考回答:
数据库连接泄露指的是如果在某次使⽤或者某段程序中没有正确地关闭Connection、Statement和ResultSet资源,那么每次执⾏都会留下⼀些没有关闭的连接,这些连接失去了引⽤⽽不能得到重新使⽤,因此就造成了数据库连接的泄漏。数据库连接的资源是宝贵⽽且是有限的,如果在某段使⽤频率很⾼的代码中出现这种泄漏,那么数据库连接资源将被耗尽,影响系统的正常运转。
●请你写⼀下mysql删除语句
参考回答:
1.drop语句。可以⽤来删除数据库和表。
⽤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的区别
参考回答:
1、char(n)类型
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 sClass 班级,count(*) 班级学⽣总⼈数,
SELECT 学号,
FROM S
WHERE NOT EXISTS (SELECT *
FROM SC
WHERE SC.课程号 = 'XX'
AND S.学号 = SC.学号);
●请你说⼀下SQL左连接以及使⽤场景
参考回答:
left join(左连接) 返回包括 LEFT OUTER⼦句中指定的左表的所有⾏,⽽不仅仅是联接列所匹配的⾏。如果左表的某⾏在右表中没有匹配⾏,则在相关联的结果集⾏中右表的所有选择列表列均为空值。
使⽤场景:可以保持左表完整加⼊另⼀表中的数据。
●请你写⼀下SQL查询、更新的某⼀列语句
参考回答:
SELECT 要查询的数据类型 FROM 表名 WHERE 条件
UPDATE 表名 SET 列名=更新的值 WHERE 条件
●请你写⼀下SQL语句的多表查询
参考回答:
例如:按照department_id 查询 employees(员⼯表)和 departments(部门表) 的信息。
SELECT ... FROM ... WHERE SELECT e.last_name,e.department_id,d.department_name FROM employees e,departments d where
e.department_id = d.department_id
●请你说说redis
参考回答:
redis是⼀个key-value存储系统。和Memcached类似,它⽀持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、
zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都⽀持push/pop、add/remove及取交集并集和差集及更丰富的操作,⽽且这些操作都是原⼦性的。在此基础上,redis⽀持各种不同⽅式的排序。与memcached⼀样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写⼊磁盘或者把修改操作写⼊追加的记录⽂件,并且在此基础上实现了master-slave(主从)同步。
●请你写⼀些基本的SQL语句
参考回答:
选择:select * from table1 where 范围
插⼊: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语句
参考回答:
delete * from table_name limit 9
●某个表格存着s_name subject score 三个字段,⽐如某⼀⾏是张三数学 76,现在要选取出所有科⽬成绩都⼤于80分的学⽣名字,请写出sql语句
参考回答:select s_name from table_name where s_name not in (select s_name from table_name where score <80)
●请你说⼀说数据库中的聚类查询
参考回答:
聚集索引中键值的逻辑顺序决定了表中相应⾏的物理顺序。聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓⽒排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此⼀个表只能包含⼀个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓⽒和名字进⾏组织⼀样。聚集索引对于那些经常要搜索范围值的列特别有效。使⽤聚集索引到包含第⼀个值的⾏后,便可以确保包含后续索引值的⾏在物理相邻。例如,如果应⽤程序执⾏的⼀个查询经常检索某⼀⽇期范围内的记录,则使⽤聚集索引可以迅速到包含开始⽇期的⾏,然后检索表中所有相邻的⾏,直到到达结束⽇期。这样有助于提⾼此类查询的性能。同样,如果对从表中检索的数据进⾏排序时经常要⽤到某⼀列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进⾏排序,从⽽节省成本。当索引值唯⼀时,使⽤聚集索引查特定的⾏也很有效率。例如,使⽤唯⼀雇员ID 列 emp_id 查特定雇员的最快速的⽅法,是在 emp_id 列上创建聚集索引或PRIMARY KEY 约束。
如果不创建索引,系统会⾃动创建⼀个隐含列作为表的聚集索引。
1.创建表的时候指定主键(注意:SQL Sever默认主键为聚集索引,也可以指定为⾮聚集索引,⽽MySQL⾥主键就是聚集索引)
create table t1(
id int primary key,
name nvarchar(255)
)
2.创建表后添加聚集索引
1 2 3 4SQL Server:
create clustered index clustered_index on table_name(colum_name) MySQL:
alter table table_name add primary key(colum_name)
●请问如果mysql中⽤户密码丢了怎么办,建⼀个数据库表,授权命令是什么参考回答:
对于普通⽤户的密码丢失,直接⽤root超级管理员登录修改密码即可
若是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 4SELECT * FROM (
select T.*,ROW_NUMBER()OVER(PARTITION BY 班级 order by 成绩 desc) RN FROM T
)WHERE RN<=10
●请你说⼀下数据库事务、主键与外键的区别?
参考回答:
数据库的事务:事务即⽤户定义的⼀个数据库操作序列,这些操作要么全做要全不做,是⼀个不可分割的⼯作单位,它具有四个特
性,ACID,原⼦性,⼀致性,隔离性,持续性
主键和外键的区别:
1.主键是能确定⼀条记录的唯⼀标识,⽐如,⼀条记录包括⾝份正号,姓名,年龄。
⾝份证号是唯⼀能确定你这个⼈的,其他都可能有重复,所以,⾝份证号是主键。
2.外键⽤于与另⼀张表的关联。是能确定另⼀张表记录的字段,⽤于保持数据的⼀致性。
●请问对缓存技术了解吗
参考回答:
Redis可以实现缓存机制, Redis是⼀个key-value存储系统。和Memcached类似,它⽀持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都⽀持push/pop、add/remove及取交集并集和差集及更丰富的操作,⽽且这些操作都是原⼦性的。在此基础上,redis⽀持各种不同⽅式的排序。与memcached⼀样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写⼊磁盘或者把修改操作写⼊追加的记录⽂件,并且在此基础上实现了master-slave(主从)同步,当前 Redis的应⽤已经⾮常⼴泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使⽤Redis的缓存服务。
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和sum区别:求和⽤累加sum(),求⾏的个数⽤累计count
Count(*)包括了所有的列,在统计结果的时候不会忽略列值为null
Count(列名)只包括列名那⼀项,会忽略列值为空的计数
●请问你数据库是⽤的MySQL吗?平常数据库的语句都是怎么写的? join作⽤,想删除⼀⾏怎么做
参考回答:
Mysql和oracle都⽤过,mysql为主,join作⽤是连接两个表,假设有2个表——Student表和SC表(选课表):
内连接(⾃然连接):当使⽤内连接时,如果Student中某些学⽣没有选课,则在SC中没有相应元组。最终查询结果舍弃了这些学⽣的信息
外连接:如果想以Student表为主体列出每个学⽣的基本情况及其选课情况。即使某个学⽣没有选课,依然在查询结果中显⽰(SC表的属性上填空值)。就需要使⽤外连接
例⼦:
//内连接:查询每个学⽣及其选修课程的情况(没选课的学⽣不会列出)
1 2 3SELECT Student.*, SC.* FROM Student , SC WHERE Student.Sno=SC.Sno;
//外连接:查询每个学⽣及其选修课程的情况(没选课的学⽣也会列出)
1 2SELECT Student.*, SC.*
FROM Student LEFT JOIN SC ON(Student.Sno=SC.Sno);
●请问如何对数据库作优化
参考回答:
1、调整数据结构的设计,对于经常访问的数据库表建⽴索引
2、调整SQL语句, ORACLE公司推荐使⽤ORACLE语句优化器(Oracle Optimizer)和⾏锁管理器(row-level manager)来调整优化SQL 语句。
3、调整服务器内存分配。内存分配是在信息系统运⾏过程中优化配置的,数据库管理员可以根据数据库运⾏状况调整数据库系统全局区(SGA区)的数据缓冲区、⽇志缓冲区和共享池的⼤⼩;还可以调整程序全局区(PGA区)的⼤⼩。
4、调整硬盘I/O,DBA可以将组成同⼀个表空间的数据⽂件放在不同的硬盘上,做到硬盘之间I/O负载均衡。
●请问什么是幻读
参考回答:
redis支持的五种数据类型
脏读就是指当⼀个事务正在访问数据,并且对数据进⾏了修改,但是还没有来得及提交到数据库中,这时,另⼀个事务也访问这个数据,然后使⽤了这个数据
●请你说⼀下MyBatis有什么优势,他如何做事务管理
参考回答:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。