Archive for the ‘数据库’ Category

mysql修改表、字段、库的字符集

修改数据库字符集: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE …]; 把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集: ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE …] 如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 只是修改表的默认字符集: ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE…]; 如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 修改字段的字符集: ALTER TABLE tbl_name CHANGE c_name [...]


数据库并发问题

以下内容为在数据库并发中出现的各种问题。 脏读(dirty read)  A事务读到B事务刚修改的值,但是B事务撤销了,也A事务读到的值就是假的了。 时间 转账事务A 取款事务B T1   开始事务 T2 开始事务   T3       查询账户余额为1000元     T4          取出500元把余额改为500元 T5 查询账户余额为500元(脏读)   T6   撤销事务余额恢复为1000元 T7 汇入100元把余额改为600元   T8 提交事务   不可重复读(unrepeatable read)     不可重复读是指A事务读取了B事务已经提交的更改数据。假设A在取款事务的过程中,B往该账户转账100元,A两次读取账户的余额发生不一致: 时间 取款事务A 转账事务B T1   开始事务 T2 开始事务                            T3                                查询账户余额为1000元      T4 查询账户余额为1000元                            T5                    取出100元把余额改为900元 T6 [...]


hibernate事务管理

1. 介绍数据库事务、事务隔离级别、悲观锁、乐观锁等概念。 2.数据库ACID特征: Atomic(原子性):指整个数据库事务是不可分割的工作单元。 Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。 Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。 Durability(持久性):指的是只要事务成功结束,它对数据库所作的更新就必须永久保存下来。 3.数据库系统支持两种事务模式: 自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。 手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。 4.MySQL中数据库表分为3种类型: INNODB、BDB和MyISAM,其中MyISAM不支持数据库事务。MySQL中create table 语句默认为MyISAM类型。 5.并发问题 对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题,这些并发问题可归纳为以下几类: A.第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。 B.脏读:一个事务读到另一个事务为提交的更新数据。 C.幻读:一个事务读到另一个事务已提交的新插入的数据。 D.不可重复读:一个事务读到另一个事务已提交的更新数据。 E.第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。 6.数据库系统四种事务隔离级别 A.Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新。 B.Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。 C.Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新。 D.Read Uncommitted(读未提交数据):一个事务在执行过程中可以拷打其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。 隔离级别 脏读 不可 重复读 幻象读 第一类丢失更新 第二类丢失更新 READ UNCOMMITED 允许 允许 允许 不允许 允许 READ COMMITTED 不允许 允许 允许 不允许 允许 REPEATABLE READ 不允许 不允许 允许 不允许 [...]


SQL的连接(JOIN,左连接,右连接,全连接,内连接)

下图中,有两个表,T1,T2 自然连接时的语句是 SELECT * FROM T1 JOIN T2,把表1,2的值全显示出来 等值连接(内连接),按照某个条件,只返回符合条件的值 左连接(LEFT JOIN)与左外连接一样,返回的结果包括左边的全部行,右边没有的用null填充 右连接(RIGHT JOIN)与右外连接一样,返回的结果包括右边的全部行,左边没有的用null填充 全连接(FULL JOIN) 相当于左右连接的并集,包含左右表为空的数据


数据库存储过程的优缺点

优点 (1) 存储过程允许标准组件式编程 存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(因为应用程序源代码只包含存储过程的调用语句),从而极大地提高了程序的可移植性。 (2) 存储过程能够实现较快的执行速度 如果某一操作包含大量的Transaction-SQL 代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的执行计划。而批处理的Transaction-SQL 语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。 (3) 存储过程能够减少网络流量 对于同一个针对数据数据库对象的操作(如查询、修改),如果这一操作所涉及到的Transaction-SQL 语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,否则将是多条SQL 语句,从而大大增加了网络流量,降低网络负载。 (4) 存储过程可被作为一种安全机制来充分利用 系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数据的安全 缺点: 1,依赖于数据库厂商,难以移植(当一个小系统发展到大系统时,对数据库的要求也会发生改变) 2,业务逻辑大的时候,封装性不够,难调试难以维护 3,复杂的应用用存储过程来实现,就把业务处理的负担压在数据库服务器上了。没有办法通过中间层来灵活分担负载和压力.均衡负载等 参考: http://www.javaeye.com/topic/734702 http://blog.csdn.net/fsclc/archive/2007/01/16/1484264.aspx


数据库UNION和UNION ALL比较

UNION能够把结果集合并 SELECT * FROM A UNION SELECT * FROM B 如果能确定没有重复行,建议使用UNION ALL,不用排序。 order by子句必须写在最后一个结果集里,并且其排序规则将改变操作后的排序结果。对于Union、Union All、Intersect、Minus都有效。 Union可以对字段名不同但数据类型相同的结果集进行合并; 如果字段名不同的结果集进行Union,那么对此字段的Order by子句将失效。 Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序; Union All,对两个结果集进行并集操作,包括重复行,不进行排序; Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序; Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。 可以在最后一个结果集中指定Order by子句改变排序方式。