MySQL的那点事!
我先简单的介绍下事务:事务必须满足4个条件:1、原子性,2、一致性,3、隔离性,4、持久性。
MySQL的事务处理主要有两种方法:
1、用 begin rollback commit 来实现
begin:开始的事务
rollback:事务回滚
commit:事务确认,
2、直接用set来改变MySQL的自动提交模式
MySQL默认的是自动提交的,也就是你提交一个QUERY, 他就直接执行!我们可以通过set autocommit=0 禁止自动提交, set autocommit=1开启自动提交;
来实现事务,
通过第二种方法实现的代码:
<?php
$header = mysql_connect("localhost","root","");//数据库连接
mysql_select_db("talk");//选择数据库
mysql_query("SET AUTOCOMMIT = 0");//设置为不自动提交;数据库默认的是立即执行
mysql_query("BEGIN");//开始事务定义;
if(!mysqli_query("insert into trans(id) value ('3')"));
{
mysql_query("BOOLBACK");//失败时执行回滚;
}
if(!mysql_query("insert into trans(id) value(''4)"))
{
mysqli_query("BOOLBACK");//失败的时候执行回滚;
}
mysql_query("COMMIT");//执行事务;
mysql_query("$header");
?>
MyISAM和InnoDB区别:
-
MyISAM引擎的简单SELECT、INSERT和UPDATE快速操作
-
MyISAM类型的数据文件可以在不同的操作系统中COPY,部署的时候方便点。
-
MyISAM是非事务安全型的,而InnoDB是事务安全型的。
-
MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
-
MyISAM支持全文类型索引,而InnoDB不支持全文索引。
-
MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
-
MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
-
InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。
应用场景:
MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。
数据库表的类型
创建表的时候定义的表性质:静态表、动态表、压缩表。默认的是静态表
若存在varchar text字段则表的类型为动态
静态表的::::字段有固定的的长度。例如:char(20)
动态表:::::字段的长度是变化的;如varchar(这种表比较节省空间、复杂度高每条记录都有一个header,作用就是表明该记录有多长,所有的字符串列都是动态的)
压缩表:::::只读,使用很少的空间,用myisampack工具创建,