mysql

1.final修饰变量时,是指引用变量不能变,引用变量所指向的内容还是可以改变的

mysql有哪几种锁

  1. 表级锁:开销小,加锁快,不容易出现死锁,锁细粒度大,发生锁冲突几率大,并发度最低
  2. 行级锁:开销大,加锁慢,容易出现死锁,锁细粒度小,发生锁冲突几率小,并发度最高
  3. 页面锁,介于表级锁和行级锁之间

有几种类型的表格

  1. myisam:
    1)不支持事务,查询是原子性,支持表级锁,存储表的总行数,
    2)一个myisam类型共有三个文件:索引文件(.myi)、表结构文件(.frm)、数据文件(.myd)
    3)采用非聚集索引,索引文件的数据存储指向数据文件的指针
  2. innodb
    1)支持acid的事务,支持四种隔离级别
    2)支持行级锁及外键约束,因此可以支持写并发
    3)不存储总行数
    4)主键索引采用聚集索引(索引的数据域存储),最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整
    5)有两个文件:表结构文件,索引和数据在同一个文件中.frm 表结构文件,.idb数据文件
    在这里插入图片描述
  3. merge
  4. Heap

innodb四种事务隔离级别的名称

  1. read uncommited :读未提交
  2. read commited: 脏读,不可重复读
  3. repeatable read : 可重读
  4. serializable: 串行事务
    从1-4级别由低到高,级别越高效率越低

char和vachar之间的区别

一般定长的数据选用char类型,比如身份证号,手机号,电话等,长度变化很大的可以使用varchar类型
1.

mysiamchk用来做什么?

压缩mysiamchk表,减少磁盘或者内存使用

查看表格定义的索引

show index from tablename

blob和text的区别

blob是一个二进制对象,可容纳可变的数量的数据,text是一个不区分大小写的blob

mysql显示前50行

select * from tablename limit 0,50

表最多可以创建16个索引列

now()和 current_date()

now():显示具体年、月、日期、小时、分钟、秒
current_date: 显示年、月份、日期

sql通用的一些函数

  1. concat(A,B) 连接两个字符串以单个字符串输出,通常将多个字段整理一个字段输出,为了防止sql注入,,一般都要用 like concat() 组合。
phone LIKE CONCAT(CONCAT('%',#{param}),'%'))

MySQL 支持事务吗

  1. 在缺省模式下,MySQL 是 autocommit 模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,MySQL 是不支持事务的。
  2. 但是如果你的 MySQL 表类型是使用 InnoDB Tables 或 BDB tables 的话,你的MySQL 就可以使用事务处理,使用 SET
    AUTOCOMMIT=0 就可以使 MySQL 允许在非 autocommit 模式,在非autocommit 模式下,你必须使用 COMMIT 来提交你的更改,或者用 ROLLBACK来回滚你的更改。

MySQL 里记录货币用什么字段类型好

NUMERIC 和 DECIMAL 类

salary DECIMAL(9,2)
9(precision)代表将被用于存储值的总的小数位数,而 2(scale)代表将被用于存储小数点后的位数。

MySQL 有关权限的表都有哪几个?

  1. MySQL 服务器通过权限表来控制用户对数据库的访问,权限表存放在 MySQL 数据库里,由 MySQL_install_db 脚本初始化。
  2. 这些权限表分别 user,db,table_priv,
    columns_priv 和 host

MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

1、设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。
2、选择合适的表字段数据类型和存储引擎,适当的添加索引。
3、MySQL 库主从读写分离。
4、添加缓存机制,比如 memcached,apc 等。
5、书写高效率的 SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1,field_2, field_3 FROM TABLE.

锁的优化策略

  1. 读写分离
  2. 分段加锁
  3. 减少锁持有的时间
  4. 多个线程尽量以相同的顺序去获取资源
  5. 不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。

索引的底层实现原理和优化

B+树,经过优化的 B+树
主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此 InnoDB 建议为大部分表使用默认自增的主键作为主索引。

什么情况下设置了索引但无法使用

1、以“%”开头的 LIKE 语句,模糊匹配
2、OR 语句前后没有同时使用索引
3、数据类型出现隐式转化(如 varchar 不加单引号的话可能会自动转换为 int 型)

数据库中的事务是什么?

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作
失败,则事务将回滚,该事务所有操作的影响都将取消。
事务特性:
1、原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。
2、一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态
3、隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,
4、持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。或者这样理解:事务就是被绑定在一起作为一个逻辑工作单元的 SQL 语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过 ACID 测试,即原子性,一致性,隔离性和持久性。

为表中得字段选择合适得数据类型

字段类型优先级: 整>date,time>enum,char>varchar>blob,text

SQL 语言包括哪几部分?每部分都有哪些操作关键字?

SQL 语言包括数据定义(DDL):Create Table,Alter Table,Drop Table, Craete/Drop Index 等
数据操纵(DML):Select ,insert,update,delete,
数据控制(DCL):grant,revoke
数据查询(DQL):select

什么是存储过程?用什么来调用?

存储过程是一个预编译的 SQL 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次 SQL,使用存储过程比单纯 SQL 语句执行要快。可以用一个命令对象来调用存储过程。

如何通俗地理解三个范式?

第一范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解;是最基本的范式。数据库表中的所有字段值都是不可分解的原子值
第二范式:2NF 是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;需要确保数据库表中每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。一张表中出现数据重复就可以将其拆分成两个表
第三范式:3NF 是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。(直接依赖主键)
需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
优点:可以尽量得减少数据冗余,使得更新快,体积小
缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引

说说对 SQL 语句优化有哪些方法?(选择几条)

1、Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。
2、用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。

SELECT *
FROM class_a
WHERE id IN ( SELECT id FROM class_b);


SELECT *
FROM class_a A
WHERE EXISTS  ( 
    SELECT * 
    FROM class_b B
    WHERE A.id = B.id
);

3、 避免在索引列上使用计算
4、避免在索引列上使用 IS NULL 和 IS NOT NULL
5、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
6、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃
使用索引而进行全表扫描
7、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值