MySQL的四种事务隔离级别

一、事务的并发问题

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

 

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表Continue reading "MySQL的四种事务隔离级别"

MySQL中int(10)和int(11)的区别+示例

我们都知道MySQL中的int(10)和int(11)在宽度上是不一样的,但是其实区别真不大,因为都是占用4个字节,所以范围都是一样的,那么主要的区别在哪儿呢?

今天忽然想到这个问题,因此做了一下测试:

1、创建一个测试用的表test,里面只有两个字段,一个int10,一个int11

 

2、往表中插入一条数据,sql如下:

这个时候int11字段报warning了,因为都是4个字节,10000000000已经超过4字节范围上限了,但是只是一个warning,因为MySQL底层已经做了截断处理。

Continue reading "MySQL中int(10)和int(11)的区别+示例"

MySQL 超时时间timeout介绍

1、timeout变量

打开mysql,用show variables like '%timeout%'命令查看。

  Continue reading "MySQL 超时时间timeout介绍"

移动 MySQL datadir 的一个小技巧

一般来说,移动 MySQL 资料库只要修改 /etc/mysql/my.cnf 裡面的 datadir 即可…

把原本的注解掉:

 并且填上新的路径

 # 假设这是新路径

然后复制资料库资料

可是当我下指令

的时候,却发现错误,我也找不出问题在哪(权限对了,路径也对了,档案也都在)。后来才发现原来 Ubuntu 还有另一个地方的设定必须要修改,就是 apparmor :先修改 /etc/apparmor.d/usr.sbin.mysqld 这个设定档,找出裡面原本指向 /var/lib/mysql 的目录,全部改为新目录。

注意 datadir= /data/mysql 所指向的目录权限应为mysql可访问的权限,一般情况下mysql数据库目录所属用户和组为mysql和mysql;将新目录设置为如下:

然后重启动就可以了!

Ubuntu下安装支持Oracle的PHP扩展

Install Oracle Instant Client

Download Oracle Instant Client packages

First, select right client for your OS here(http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html),
Instant Client for Linux x86-64(http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html) in my case for my 64-bit Ubuntu 14.04.
Then Accept License Agreement and download basic & devel rpm packages for your Oracle version.
Our Oracle DB version is 11g r2, so I need to download:

oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm

Install the instant client

Convert .rpm to Debian software package (.deb) using alien:

sudo apt-get install alien
sudo alien -d oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
sudo alien -d oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm

This will output oracle-instantclient11.2-basic-11.2.0.1.0-2.x86_64.deb & oracle-instantclient11.2-devel-11.2.0.1.0-2.x86_64.deb which can be installed via Ubuntu's dpkg command:

sudo dpkg -i oracle-instantclient11.2-basic_11.2.0.1.0-2_amd64.deb
sudo dpkg -i oracle-instantclient11.2-devel_11.2.0.1.0-2_amd64.deb

After successful installation, client library with be installed in /usr/share/oracle/11.2/client64, and developer header files with be in /usr/include/oracle/11.2/client64.

Continue reading "Ubuntu下安装支持Oracle的PHP扩展"

MySQL添加用户与授权

一、创建用户

命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password';

说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

例子:

Continue reading "MySQL添加用户与授权"

POSTGRESQL 无法创建数据库 出现类似createdb: could not connect to database postgres: FATAL: role "XXXX" does not exist

I figured I’d share getting setup on my Ubuntu machine.

Installing

Creating User

Continue reading "POSTGRESQL 无法创建数据库 出现类似createdb: could not connect to database postgres: FATAL: role "XXXX" does not exist"

SQLite资料

Sqlite是一种嵌入式/内存轻型数据库,它跨平台,快速,小巧,高效。如果你想选择小型数据库,我相信sqlite将是最佳的选择。它要比access数据库强大很多很多。当然如果你想说MSSQL或者MySQL要比SQLite高效的多。这一点我解释如下:

首先:sqlite定位是小型数据库(轻型),处理大数据自然有局限性。定位标准不同。

其次:sqlite在处理小型数据并不逊色于大型数据库,而且他体积更小。

由于这方面的资料比较多,我以链接的形式来介绍。

 

入门:

什么是SQLitehttp://baike.baidu.com/view/19310.htm

Sqlite官网:http://www.sqlite.org/

Sqlite中文社区:http://www.sqlite.com.cn/

最希望大家去的sqlite官网,里面写的很详细,虽然是英文。

 

Sqlite局限:

Sqlite局限性:http://apps.hi.baidu.com/share/detail/17043674

Sqlite不支持的操作:http://apps.hi.baidu.com/share/detail/17095537

 

Sqlite封装:

CppSqlitehttp://www.codeproject.com/KB/database/CppSQLite.aspx 

该类是最方便的类之一,可惜不支持加密和中文路径,后来有人做了改进

支持中文路径:http://hi.baidu.com/wangguang246/blog/item/4a521f96f5b2006355fb96bf.html

 

关于加密:

wxSqlite3http://wxcode.sourceforge.net/components/wxsqlite3/ 

这个库更新的很快,完全和sqlite3的发布同步,同时支持强大的加密功能,但是这个类使用关于麻烦,后来有人仅仅获取里面的加密功能和CppSqlite结合使用。

加密的另一种方案:http://news.2ky.cn/149/4101.htm 

 

如何编加密版本的sqlite

如何使用VC6编译sqlite3源码生成动态链接库

http://blog.csdn.net/littletigerat/archive/2010/04/19/5502491.aspx

如何对sqlite3数据库进行加密

http://blog.csdn.net/littletigerat/archive/2010/04/20/5502690.aspx

如果编译加密版本的sqlite请认真看上面两篇博客,我亲自测试,但是有些错误,后来做了一些说明:

上面的教程中有许些错误(测试版本3.73

1vc6编译sqlite源码的时候操作的时候,会提示提示出现找不到:“sqlite3rtree.h”头文件

解决方法:这个地方改成rtree.h

2:编译加密时候复制 到pagec的时候,同时要把复制的文件中的#include sqlite3.c”去掉

3:引用的时候要把sqlite3.h中的#ifdef SQLITE_HAS_CODEC以及对应的#endif去掉

 

 

Sqlite数据库查看工具

1:官网自带的工具,黑色的doc,不好用~

2Navicat for SQLite

http://www.sz1001.net/soft/43670.htm