mysql,jdbc、连接池
在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。
1byte=8bit 1byte就是1B
1KB=1024B
free -m Mem”后的total列就是内存大小。3500实际就是4GB
show processlist; select * from information_schema.processlist;
Command:
The type of command the thread is executing. 例如上面的例子中,Sleep,或者Query
时间戳timestamp
create table t_var (id VARCHAR(10),name VARCHAR(255),descs VARCHAR(500)
,create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
,update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)
create_time 在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它
update_time 在创建新记录和修改现有记录的时候都对这个数据列刷新
一个字节8位
byte 8位
short 16位
int 32位
long 64位
float 32位
double 64位
char 16位
一个char能够存储16bit大小的数值,即2个字节。就常用的UTF-8编码来说,我们都听说过他是用3或者4个字节来表示一个汉字的
mysql varchar(10) 10个字符或汉字
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 ;varchar(20)在Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同,具体有以下规则:
a) 存储限制
varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。
b) 编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
c) 行长度限制
导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。
mysql varchar 自动截取问题
explain select * from ttt where id = 1;
varchar(3) 汉字也是3个 字符长度 最大255个字符(汉字)
int(32) 21亿 2119010118 10位数字 unsigned 无符号 范围增加一倍
不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010
创建类型的时候加 zerofill这个值,表示用0填充,否则看不出效果
double(12,2) 总共12位,小数点后两位
数字型
类型
|
大小
|
范围(有符号)
|
范围(无符号)
|
用途
|
TINYINT
|
1 字节
|
(-128,127)
|
(0,255)
|
小整数值
|
SMALLINT
|
2 字节
|
(-32 768,32 767)
|
(0,65 535)
|
大整数值
|
MEDIUMINT
|
3 字节
|
(-8 388 608,8 388 607)
|
(0,16 777 215)
|
大整数值
|
INT或INTEGER
|
4 字节
|
(-2 147 483 648,2 147 483 647)
|
(0,4 294 967 295)
|
大整数值
|
BIGINT
|
8 字节
|
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
|
(0,18 446 744 073 709 551 615)
|
极大整数值
|
FLOAT
|
4 字节
|
(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)
|
0,(1.175 494 351 E-38,3.402 823 466 E+38)
|
单精度
浮点数值 |
DOUBLE
|
8 字节
|
(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
|
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
|
双精度
浮点数值 |
DECIMAL
|
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2
|
依赖于M和D的值
|
依赖于M和D的值
|
小数值
|
字符类型
CHAR
|
0-255字节
|
定长字符串
|
VARCHAR
|
0-255字节
|
变长字符串
|
TINYBLOB
|
0-255字节
|
不超过 255 个字符的二进制字符串
|
TINYTEXT
|
0-255字节
|
短文本字符串
|
BLOB
|
0-65 535字节
|
二进制形式的长文本数据
|
TEXT
|
0-65 535字节
|
长文本数据
|
MEDIUMBLOB
|
0-16 777 215字节
|
二进制形式的中等长度文本数据
|
MEDIUMTEXT
|
0-16 777 215字节
|
中等长度文本数据
|
LOGNGBLOB
|
0-4 294 967 295字节
|
二进制形式的极大文本数据
|
LONGTEXT
|
0-4 294 967 295字节
|
极大文本数据
|
枚举集合
ENUM (最多65535个成员) 64KB
SET (最多64个成员) 64KB
时间类型
类型
|
大小
(字节) |
范围
|
格式
|
用途
|
DATE
|
3
|
1000-01-01/9999-12-31
|
YYYY-MM-DD
|
日期值
|
TIME
|
3
|
'-838:59:59'/'838:59:59'
|
HH:MM:SS
|
时间值或持续时间
|
YEAR
|
1
|
1901/2155
|
YYYY
|
年份值
|
DATETIME
|
8
|
1000-01-01 00:00:00/9999-12-31 23:59:59
|
YYYY-MM-DD HH:MM:SS
|
混合日期和时间值
|
TIMESTAMP
|
8
|
1970-01-01 00:00:00/2037 年某时
|
YYYYMMDD HHMMSS
|
混合日期和时间值,时间戳
|
mysql连接情况
show processlist; show full processlist;
select * from information_schema.processlist;
唯一键 UNIQUE KEY 索引使用,字符串必须加''才能使用索引 创建唯一约束的时候就创建了唯一索引
查询效率
const 主键
const unique唯一约束 联合唯一,全部使用为const,只使用第一个为ref
ref 索引
1、type
这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
说明:不同连接类型的解释(按照效率高低的顺序排序)
system:表只有一行:system表。这是const连接类型的特殊情况。
const :表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待。
eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用。
ref:这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好。
range:这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况。
index:这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)。
ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免。
const
在WHERE子句中包含条件column = constant,并且这些列是primary key,或者这些列是UNIQUE(假设该UNIQUE同时被定义为NOT NULL)。这样生成的查询结果也可以成为常量表
eq_ref
对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY。
ref
对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。
ref_or_null
该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化
2、key_len
使用的索引的长度。在不损失精确性的情况下,长度越短越好
3、Extra
Using index :列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候。
/**
* The minimum number of active connections that can remain idle in the
* pool, without extra ones being created, or 0 to create none.
*/
protected int minIdle = GenericObjectPool.DEFAULT_MIN_IDLE;
/**
* The maximum number of connections that can remain idle in the
* pool, without extra ones being released, or negative for no limit.
*/
protected int maxIdle = GenericObjectPool.DEFAULT_MAX_IDLE;
initialSize 10 初始化连接:连接池启动时创建的初始化连接数量,1.2版本后支持
maxActive 100 最大活动连接:连接池在同一时间能够分配的最大活动连接的数量,
如果设置为非正数则表示不限制
maxIdle 10 最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,
如果设置为负数表示不限制
minIdle 5 最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,
如果设置为0则不创建
maxWait 无限 最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数),
超过时间则抛出异常,如果设置为-1表示无限等待
package service;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.PreparedStatement;
public class TestConnect {
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("找不到驱动程序类 ,加载驱动失败!");
e.printStackTrace();
}
}
private static Connection getConnect(){
String url = "jdbc:mysql://localhost:3306/xmh?useUnicode=true&characterEncoding=gbk";
String username = "root";
String password = "admin";
Connection con = null;
try {
con = DriverManager.getConnection(url, username,password);
} catch (SQLException se) {
System.out.println("数据库连接失败!");
se.printStackTrace();
}
return con;
}
public static void sqlTest(){
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = getConnect();
String sql = "select * from tbl_user where id = ?;";
if (con != null) {
// Statement stmt = (Statement) con.createStatement() ; //静�?sql
pstmt = (PreparedStatement) con.prepareStatement(sql);// 动�?sql
// CallableStatement cstmt = (CallableStatement)
// con.prepareCall("{CALL demoSp(? , ?)}") ; //存储过程 // ResultSet rs = pstmt.executeQuery("SELECT * FROM ...") ; //查询数据库的SQL语句,返回一个结果集(ResultSet)对�?
// int rows = pstmt.executeUpdate("INSERT INTO ...") ;//用于执行INSERT、UPDATE�?DELETE语句以及SQL DDL语句
// boolean flag = pstmt.execute( sql) ; //:用于执行返回多个结果集�?多个更新计数或二者组合的 语句
pstmt.setObject(1, "id1");
rs = pstmt.executeQuery();
while(rs.next()){
String name1 = rs.getString("id") ;
String name = rs.getString(1) ;
String pass = rs.getString(2) ; // 此方法比较
System.out.println(name1+" "+name+" "+pass);
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
try {
if (pstmt != null) {
pstmt.close();
}
if (rs != null) {
rs.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
sqlTest();
}
}
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@yqy-oracle-master-dev.caiwu.corp:1562:O11G1562";
//BLOB clob = (BLOB) rs.getBlob(5);
//FileUtils.writeStringToFile(file,result, "utf-8");
File file_clob = new File("F:\\data\\"+rs.getString(4)+"_"+rs.getString(3)+".ZIP");
char[] buff2 = new char[1024];
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file_clob));
Reader reader = rs.getCharacterStream(5);
for (int i = 0; (i = reader.read(buff2)) > 0;) {
writer.write(buff2, 0, i);
}
writer.flush();
writer.close();
reader.close();
mysql_install_db --defaults-file=/app/mysql/mysql/my.cnf 初始化mysql
FLUSH TABLES WITH READ LOCK;
./bin/mysqladmin -uroot -S /app/mysql/mysql_3307/mysql.sock password 123456 设置制定socket数据库root密码
./mysql -uroot -S /app/mysql/mysql_3307/mysql.sock -p123456 链接制定Scoke的数据库
my.cnf 中
log-bin=mysql-bin 开启日志
binlog-do-db=gcoin 制定同步的数据库,不指定同步所有库
netstat -ntlp
nohup ./bin/mysqld_safe --defaults-file=/app/mysql/mysql/my.cnf >> /dev/null & 后台制定文件启动mysql
mysqld_multi --defaults-file=/app/mysql/mysql/my.cnf start 3306
mysqladmin -hlocalhost -uroot -pxxx -P3306 shutdown 关闭指定端口的mysql
./bin/mysqladmin -hlocalhost -uroot -p123456 -S /app/mysql/mysql_3307/mysql.sock shutdown
./mysql -uroot -S /app/mysql/mysql/mysql.sock -p123456
./mysql -uroot -S /app/mysql/mysql_3307/mysql.sock -p123456 登录3307
环境:linux主机上已经yum安装了mysql,而且数据库正在运行。
在不关闭/重启mysql的情况下,重新启动一个新的mysql实例,使用3307端口,实现一台机器上同时运行两个数据库实例。
1、创建新的mysql实例数据存储目录:
mkdir -p /data/mysql_3307
2、把my.cnf配置文件复制一份,开几个端口要复制几份。
cp /etc/my.cnf /data/mysql_3307/my.cnf
3、修改/data/mysql_3307/my.cnf文件,把默认的3306端口改成 3307,根据实际情况修改socket,basedir,datadir 。
[client]
port = 3307
socket = /tmp/mysql_3307.sock
default-character-set = utf8
# The MySQL server
[mysqld]
port = 3307
user = mysql
socket = /tmp/mysql_3307.sock
basedir = /usr
datadir = /data/mysql_3307
character-set-server = utf8
log-error = /data/mysql_3307/error.log
pid-file = /data/mysql_3307/localhost.localdomain.pid
4、初始化数据库:
mysql_install_db --basedir=/usr --datadir=/data/mysql_3307 --user=mysql
mysql是yum安装的,所以basedir=/usr就可以,它会自动在/usr下找mysql的安装目录。
如果是源码包编译安装的mysql,假如安装路径是在/usr/local/mysql
cd /usr/local/mysql/scripts/
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql_3307 --user=mysql
5、启动mysql,要指定.cnf文件启动
mysqld_safe --defaults-file=/data/mysql_3307/my.cnf --user=mysql &
6、停止MYSQL,需要指定对应的sock文件。
mysqladmin -uroot -S /tmp/mysql_3307.sock shutdown
7、登陆3307端口的mysql
mysql -S /tmp/mysql_3307.sock -P 3307
mysqladmin -hlocalhost -uroot -pxxx -P3306 shutdown 关闭指定端口的mysql ./bin/mysqladmin -hlocalhost -uroot -p123456 -S /app/mysql/mysql_3307/mysql.sock shutdown mysql_install_db --defaults-file=/app/mysql/mysql/my.cnf 初始化mysql FLUSH TABLES WITH READ LOCK; ./bin/mysqladmin -uroot -S /app/mysql/mysql_3307/mysql.sock password 123456 设置制定socket数据库root密码 ./mysql -uroot -S /app/mysql/mysql_3307/mysql.sock -p123456 链接制定Scoke的数据库 my.cnf 中
log-bin=mysql-bin 开启日志
binlog-do-db=gcoin 制定同步的数据库,不指定同步所有库
netstat -ntlp nohup ./bin/mysqld_safe --defaults-file=/app/mysql/mysql/my.cnf >> /dev/null & 后台制定文件启动mysql mysqld_multi --defaults-file=/app/mysql/mysql/my.cnf start 3306 1、create schema [数据库名称] default character set utf8 collate utf8_general_ci;--创建数据库 采用create schema和create database创建数据库的效果一样。 2、create user '[用户名称]'@'%' identified by '[用户密码]';--创建用户 密码8位以上,包括:大写字母、小写字母、数字、特殊字符 %:匹配所有主机,该地方还可以设置成‘localhost’,代表只能本地访问,例如root账户默认为‘localhost‘ 3、grant select,insert,update,delete,create on [数据库名称].* to [用户名称];--用户授权数据库 *代表整个数据库 4、flush privileges ;--立即启用修改 5、revoke all on *.* from tester;--取消用户所有数据库(表)的所有权限 6、delete from mysql.user where user='tester';--删除用户 7、drop database [schema名称|数据库名称];--删除数据库 grant select,insert,update,delete,create on [gcoin] to [gcoin] create user 'salve'@'10.112.180.165' identified by '123456'; GRANT REPLICATION SLAVE ON *.* TO 'salve'@'10.112.180.165'; SHOW MASTER STATUS;查看master状态,记录二进制文件名和位置:
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000016 | 714748 | gcoin | | |
+------------------+----------+--------------+------------------+-------------------+ CHANGE MASTER TO
MASTER_HOST='10.112.180.165',
MASTER_USER='salve',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000027',
MASTER_LOG_POS=687; start slave show slave status\G ;//查看从库状态 show variables like '%binlog_format%'; 日志模式 FLUSH TABLES WITH READ LOCK; 阻塞所有写操作
UNLOCK TABLES; 解锁 ./bin/mysqldump --port 3306 --user root -p gcoin >./gcoin.sql 导出数据 -p 后跟的是库名,不是密码
mysql,jdbc、连接池的更多相关文章
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介
日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...
- JDBC连接池-C池3P0连接
JDBC连接池-C3P0连接 c3p0连接池的学习英语好的看英文原版 c3p0 - JDBC3 Connection and Statement Pooling 使用c3p0连接池 三种方 ...
- JDBC连接池(三)DBCP连接池
JDBC连接池(三)DBCP连接池 在前面的随笔中提到 了 1.JDBC自定义连接池 2. C3P0连接池 今天将介绍DBCP连接池 第一步要导入jar包 (注意:mysql和mysql 驱动 ...
- Jmeter(九)JDBC连接池
JDBC为java访问数据库提供通用的API,可以为多种关系数据库提供统一访问.因为SQL是关系式数据库管理系统的标准语言,只要我们遵循SQL规范,那么我们写的代码既可以访问MySQL又可以访问SQL ...
- jdbc连接池&改进dbUtil成C3P0Util
一.jdbc连接池 1.连接池的存在理由 前面介绍的dbUtils工具类虽然实现了一个对jdbc的简单封装.但它依旧采取从驱动管理获取连接 (DriverManager.getConnection ...
- 【JDBC&Dbutils】JDBC&JDBC连接池&DBUtils使用方法(重要)
-----------------------JDBC---------- 0. db.properties文件 driver=com.mysql.jdbc.Driver url=jdbc: ...
- JDBC连接池和DBUtils
本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采取连接池技术,来共享连接Conne ...
- 利用jdbc连接池(利用jdni)
简介 前段时间用jdbc连接池,在这里记录下 1.利用jdni配置数据源 在Web项目的META-INF文件夹中新建context.xml文件,内容为: <?xml version=" ...
- JDBC连接池&DBUtils
JDBC连接池 DBCP:Apache推出的Database Connection Pool 使用步骤: > 添加jar包 commons-dbcp-1.4.jar commons-pool ...
- JDBC连接池&DBUtils使用
使用连接池改造JDBC的工具类: 1.1.1 需求: 传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序. * 在程序开始的 ...
随机推荐
- Codechef August Challenge 2018 : Lonely Cycles
传送门 几波树形dp就行了. #include<cstdio> #include<cstring> #include<algorithm> #define MN 5 ...
- [LeetCode] Chalkboard XOR Game 黑板亦或游戏
We are given non-negative integers nums[i] which are written on a chalkboard. Alice and Bob take tu ...
- mysql百万级全文索引及match快速查找
建立全文索引的表的存储引擎类型必须为MyISAM 问题是match against对中文模糊搜索支持不是太好 新建一个utf8 MyISAM类型的表并建立一个全文索引 : CREATE TABL ...
- 六、web应用与Tomcat
软件系统体系结构 1 常见软件系统体系结构B/S.C/S 1.1 C/S l C/S结构即客户端/服务器(Client/Server),例如QQ: l 需要编写服务器端程序,以及客户端程序,例如我们安 ...
- IPV6配置
云友“学渣王 ”在帖子里提到需要为阿里云ECS配置IP6地址,根据网上的一些信息,写此例. 如果要求是FQDN地址,请登录到您的域名控制面板,设置一条AAAA记录到新设置的IPv6隧道地址. 在阿 ...
- 电子产品使用感受之——为什么我那么喜欢2015年的11.6寸MacBook Air?
2018年Mac笔记本产品线得到了一次更新,Mac book Pro, MacBook Air更新后的Mac 产品线变得更加让人摸不着头脑,价格昂贵不说,产品分类细化到如此程度,让一个选择困难症的消费 ...
- ad 线束和网络
ad 线束和通道复用会遇到网络无法更新的pcb的异常, 就算,我们把网络作用范围调整到页,电源全局仍然会失败,通过查找原因 尽量网络标签不同.稍微更改就可以 比如 sda1,sda1s不要一样
- 滴滴出行基于RocketMQ构建企业级消息队列服务的实践
小结: 1. https://mp.weixin.qq.com/s/v6NM3UgX-qTI7yO1QPCJrw 滴滴出行基于RocketMQ构建企业级消息队列服务的实践 原创: 江海挺 阿里巴巴中间 ...
- SVN百度云服务器安装使用。
安装SVN客户端 此时,必须重启,否则经常出现用不了. 重启后,还是用不了的话,那么就重新安装系统. 网站地址: http://xiaomosheng.bceapp.com/ SVN代码服务器的地址: ...
- linux自定义开机自启多个服务的脚本
linux服务器重启后,每次要启动redis.ftp.tomcat等应用总是很麻烦,于是写了一个自定义脚本,在开机或重启的时候,自动启动多个服务.应用. 很简单,写脚本.设置开机启动. 第一步.准 ...