zoukankan      html  css  js  c++  java
  • MySQL经常使用的面试题

    1、怎样登陆mysql数据库

    MySQL -u username -p

    2、怎样开启/关闭mysql服务

    service mysql start/stop

    3、查看mysql的状态

    service mysql status

    4、怎样显示数全部数据库

    show databases

    5、怎样获取表内全部字段对象的名称和类型

    describe table_name;

    6、MYSQL支持事务吗?

    在缺省模式下,MYSQL是autocommit模式的,全部的数据库更新操作都会即时提交,所以在缺省情况下。mysql是不支持事务的。 


    可是假设你的MYSQL表类型是使用InnoDB Tables 或 BDB tables的话,你的MYSQL就能够使用事务处理,使用SET AUTOCOMMIT=0就能够使MYSQL同意在非autocommit模式,在非autocommit模式下,你必须使用COMMIT来提交你的更改,或者用ROLLBACK来回滚你的更改。


    示比例如以下: 


    START TRANSACTION; 
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1; 
    UPDATE table2 SET summmary=@A WHERE type=1; 
    COMMIT;

    7、MYSQL相比于其它数据库有哪些特点?

    MySQL是一个小型关系型数据库管理系统。开发人员为瑞典MySQL AB公司。如今已经被Sun公司收购,支持FreeBSD、Linux、MAC、Windows等多种操作系统与其它的大型数据库比如Oracle、DB2、SQL Server等相比功能稍弱一些 


    1、能够处理拥有上千万条记录的大型数据 
    2、支持常见的SQL语句规范 
    3、可移植行高,安装简单小巧 
    4、良好的执行效率。有丰富信息的网络支持 
    5、调试、管理。优化简单(相对其它大型数据库)

    8、varchar和char的差别

    Char是一种固定长度的类型,varchar是一种可变长度的类型

    9、数据库事物有哪几种?

    隔离性、持续性、一致性、原子性


    10、请简洁地描写叙述下MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的差别?

    SQL标准定义的四个隔离级别为: 


    read uncommited:读取未提交内容 
    read committed:读取提交内容 
    repeatable read:可重读 
    serializable:可串行化 

    详解例如以下: 


    Read Uncommitted(读取未提交内容) 


    在该隔离级别,全部事务都能够看到其它未提交事务的运行结果。

    本隔离级别非常少用于实际应用,由于它的性能也不比其它级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。 


    Read Committed(读取提交内容) 


    这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务仅仅能看见已经提交事务所做的改变。这样的隔离级别也支持所谓的不可反复读(Nonrepeatable Read),由于同一事务的其它实例在该实例处理其间可能会有新的commit。所以同一select可能返回不同结果。

     

    Repeatable Read(可重读) 


    这是MySQL的默认事务隔离级别。它确保同一事务的多个实例在并发读取数据时,会看到相同的数据行。

    只是理论上。这会导致还有一个棘手的问题:幻读(Phantom Read)。

    简单的说,幻读指当用户读取某一范围的数据行时,还有一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本号并发控制(MVCC,Multiversion Concurrency Control 间隙锁)机制攻克了该问题。注:事实上多版本号仅仅是解决不可反复读问题,而加上间隙锁(也就是它这里所谓的并发控制)才攻克了幻读问题。 


    Serializable(可串行化) 


    这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每一个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。 


    对于不同的事务。採用不同的隔离级别分别有不同的结果。

    不同的隔离级别有不同的现象。主要有以下3种如今: 


    1、脏读(dirty read):一个事务能够读取还有一个尚未提交事务的改动数据。


    2、非反复读(nonrepeatable read):在同一个事务中,同一个查询在T1时间读取某一行,在T2时间又一次读取这一行时候,这一行的数据已经发生改动,可能被更新了(update),也可能被删除了(delete)。 


    3、幻像读(phantom read):在同一事务中,同一查询多次进行时候。因为其它插入操作(insert)的事务提交,导致每次返回不同的结果集。


    不同的隔离级别有不同的现象,并有不同的锁定/并发机制,隔离级别越高。数据库的并发性就越差,4种事务隔离级别分别表现的现象例如以下表:

    12、mysql有关权限的表都有哪几个

    MySQLserver通过权限表来控制用户对数据库的訪问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv。columns_priv和host。以下分别介绍一下这些表的结构和内容: 


    user权限表:记录同意连接到server的用户帐号信息,里面的权限是全局级的。

    db权限表:记录各个帐号在各个数据库上的操作权限。 
    table_priv权限表:记录数据表级的操作权限。 
    columns_priv权限表:记录数据列级的操作权限。

     
    host权限表:配合db权限表对给定主机上数据库级操作权限作更仔细的控制。这个权限表不受GRANT和REVOKE语句的影响。

    13、mysql存储引擎有哪些?怎样改动mysql存储引擎?

    MyISAM indexed sequential access method (有索引的顺序訪问方法) 


    MyISAM 具有检查和修复表格的大多数工具。

    表格能够被压缩,并且支持全文收索 


    不是事务安全的,并且不支持外键。


    MEMORY 也是曾经的(HEAP) 该类型表存储在内存中。表的索引是哈希分布的。 


    merge 这些表为了查询目的,把myisam 表集合作为单个表,因此你能够在某些操作系统中避开最大文件大小的限制。 


    archive 这样的类型的表仅仅支持,insert ,select 不支持delete,update,replace ,不使用索引。


    csv 这些表保存在server的单个文件里,它包括了用逗号间隔的数据。


    innodb 这样的表是事务安全的。

    提供了commit(提交) rollback(实务回滚)支持外键,比myisam慢。 


    改动mysql存储引擎alter table tablename type = innodb;


    14、MYSQL 数据表修复及数据恢复面试题

    1、MYSQL数据表在什么情况下easy损坏? 

    • server突然断电导致数据文件损坏。 
      强制关机,没有先关闭mysql 服务等。

    2、数据表损坏后的主要现象是什么? 

    • 从表中选择数据之时,得到例如以下错误:Incorrect key file for table: ‘…’. Try to repair it 
      查询不能在表中找到行或返回不全然的数据。

       
      Error: Table ‘p’ is marked as crashed and should be repaired 。 
      打开表失败: Can’t open file: ‘×××.MYI’ (errno: 145) 。

    • 3、数据表损坏的修复方式有哪些? 
      使用 myisamchk 来修复,详细步骤: 
      1)修复前将mysql服务停止。 
      2)打开命令行方式,然后进入到mysql的/bin文件夹。

       
      3)运行myisamchk –recover 数据库所在路径/*.MYI 
      使用repair table 或者 OPTIMIZE table命令来修复,REPAIR TABLE table_name 修复表 OPTIMIZE TABLE table_name 优化表 REPAIR TABLE 用于修复被破坏的表。

       
      OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占领的磁盘空间并没有马上被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,而且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)

    15、MYSQL数据库server性能分析的方法命令有哪些?

    Show status 
    一些值得监控的变量值: 
    Bytes_received和Bytes_sent 
    和server之间来往的流量。

     
    Com_*server正在运行的命令。 
    Created_*在查询运行期限间创建的暂时表和文件。

     
    Handler_*存储引擎操作。 
    Select_*不同类型的联接运行计划。

     
    Sort_*几种排序信息。 
    Show session status like ‘Select’; 
    Show profiles 
    SET profiling=1; 
    Show profilesG 
    Show profile;

    16、 mysql里记录货币用什么字段类型好

    NUMERIC和DECIMAL类型被MySQL实现为相同的类型,这在SQL92标准同意。

    他们被用于保存值,该值的准确精度是极其重要的值,比如与金钱有关的数据。当声明一个类是这些类型之中的一个时,精度和规模的能被(而且一般是)指定;


    比如: 


    salary DECIMAL(9,2) 


    在这个样例中。9(precision)代表将被用于存储值的总的小数位数。而2(scale)代表将被用于存储小数点后的位数。因此。在这样的情况下,能被存储在salary列中的值的范围是从-9999999.99到9999999.99。在ANSI/ISO SQL92中。句法DECIMAL(p)等价于DECIMAL(p,0)。相同。句法DECIMAL等价于DECIMAL(p,0)。这里实现被同意决定值p。

    MySQL当前不支持DECIMAL/NUMERIC数据类型的这些变种形式的任一种。这一般说来不是一个严重的问题,由于这些类型的主要益处得自于明显地控制精度和规模的能力。


    DECIMAL和NUMERIC值作为字符串存储。而不是作为二进制浮点数,以便保存那些值的小数精度。

    一个字符用于值的每一位、小数点(假设scale>0)和“-”符号(对于负值)。假设scale是0。DECIMAL和NUMERIC值不包括小数点或小数部分。 


    DECIMAL和NUMERIC值得最大的范围与DOUBLE一样,可是对于一个给定的DECIMAL或NUMERIC列,实际的范围可由制由给定列的precision或scale限制。当这种列赋给了小数点后面的位超过指定scale所同意的位的值。该值依据scale四舍五入。

    当一个DECIMAL或NUMERIC列被赋给了其大小超过指定(或缺省的)precision和scale隐含的范围的值,MySQL存储表示那个范围的对应的端点值。

  • 相关阅读:
    linux 系统层/用户层资源使用信息监控
    人工神经网络学习
    刷题
    使用机器学习进行气象数据分析
    kaggle 从零开始记录遇到的问题
    大数据平台资料收集
    MacOS应用cocoa application问题
    Latex学习手记(持续更新)
    Matplotlib折线图
    Android的系统架构——安卓运行库
  • 原文地址:https://www.cnblogs.com/llguanli/p/7266915.html
Copyright © 2011-2022 走看看