zoukankan      html  css  js  c++  java
  • Mysql 知识(3)

    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种事务隔离级别分别表现的现象如下表: 
    这里写图片描述

    11、mysql数据库引擎MyISAM和InnoDB的区别

    这里写图片描述

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

    MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。下面分别介绍一下这些表的结构和内容: 
    user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。 
    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 这些表保存在服务器的单个文件中,它包含了用逗号间隔的数据。

    innodb 这种表是事务安全的。提供了commit(提交) rollback(实务回滚)支持外键,比myisam慢。 
    修改mysql存储引擎alter table tablename type = innodb;

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

    1. MYSQL数据表在什么情况下容易损坏? 
      服务器突然断电导致数据文件损坏。 
      强制关机,没有先关闭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数据库服务器性能分析的方法命令有哪些?

    Show status 
    一些值得监控的变量值: 
    Bytes_received和Bytes_sent 
    和服务器之间来往的流量。 
    Com_*服务器正在执行的命令。 
    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存储表示那个范围的相应的端点值。

  • 相关阅读:
    【原创】Zend Framework快速开发(二)使用命令完成项目
    分析CMMS系统笔记使用js控制快捷键
    学习笔记——php利用@来抑制错误
    WINDOWS + WAMP + Zend Framework 配置
    PHP的$_SERVER变量笔记
    【原创】Zend Framework快速开发(一)zend框架的配置和项目创建(原创)
    带符号的8位2进制数最小值为多少?
    动态规划笔记
    我一直在拖国家的后退
    手机客户端和服务器通信时如何安全高效的进行身份验证
  • 原文地址:https://www.cnblogs.com/maohuidong/p/7975541.html
Copyright © 2011-2022 走看看