分类 "数据库" 的存档.

mysql查询更新时的锁表机制分析

为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。

一、概述

MySQL有三种锁的级别:页级、表级、行级。
MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。

MySQL这3种锁的特性可大致归纳如下:

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

二、MyISAM表锁

MyISAM存储引擎只支持表锁,是现在用得最多的存储引擎。

1、查询表级锁争用情况

mysql从4.0迁移到5.0字符集乱码解决方法

1.错误分析及正确方法

原来一直用SQLYog和navicat mysql导入导出,试用的方法均出现丢字,乱码现象。后经过同事指导,发现用工具导入导出的话,假如工具的字符集和目标数据库的字符编码不一致,这样字符会在中间经过2次转换,这样便会出现丢字乱码等现象。后来从命令导入导出,未发现乱码。脚本如下:

mysqldump -h IP  -uroot -p密码 --default-character-set=utf8 数据库名称 | mysql -uroot -p密码 --default-character-set=utf8 数据库名称

注:可以在需要导入的数据库上执行上面脚本,字符集是需要导入数据的数据库字符集

2.在服务器的mysql 的配置里需要修改/etc/my.cnf如下:

sql学习笔记(二)

11.数据插入

INSERT INTO 表名1(列名1,列名2)
VALUES (值1,值2)

INSERT INTO 表名1(列名1,列名2)
SELECT (列名1,列名2) from 表2
--两个列名不一定匹配

SELECT *
INTO 目标表名
FROM 源表名;
--标准SQL

CREATE TABLE 目标表 AS
SELECT * FROM 源表;
--mysql ,oracle语法
INSERT SELECT 是导出数据 ,SELECT INTO 导入表

sql学习笔记(一)

sql 学习笔记,本文是学习《sql必知必会》记录的一些记录备忘。

1.操作符

DESC 降序
ORDER BY 必须位于最后
LIKE 操作符(仅针对文本)
select prod_name ,prod_price
from products
where prod_name like 'fish%';
:like 用于匹配多个字符,下化线(_)用于匹配单个字符,方括号([])用于匹配字符集
SELECT cust_contact
FROM customers
WHERE cust_contact LIKE '[^JM]%'
order BY cust_contact;
通配符比较一般操作时间更长,不宜多用
IN 操作符
select prod_name ,prod_price
from products
where vend_id in ('DLL01','BRS01');

mysql中的日期类型

1.某表中的日期的类型是20101010120012,假如我们要转换成2010-10-10 12:00:12 这样的格式怎么办呢?

例如,我们想选出15天前的记录,SQL语句如下:

SELECT count(*) from
file_upload WHERE
DATE_FORMAT(pubdate,'%Y-%m-%d %H:%i:%S') <= CURDATE()-INTERVAL 15 DAY

其中file_upload是表名,pubdate是日期字段,这里用了DATE_FORMAT函数。

主要参考:http://www.w3school.com.cn/sql/func_date_format.asp

Feed