程序员便利贴
分类: Java, 数据库 | 评论

mysql 大对象存取: 类型一般应该用mediumblod, blob只能存2的16次方个byte, mediumblod是24次方, 一般来说够用了.longblob是32次方有些大. MYSQL默认配置只能存1M大小的文件,要修改配置,WIN版本的在mysql.ini文件中 修改max_allowed_packet,net_buffer_length等几个参数,或直接SET GLOBAL varName=value. linux版本可以在启动参数后加-max_allowed_packet=xxM等几个参数. MYSQL存大对象最好直接就setBinaryStream,又快又方便. 而不要先插入空再造型成BLOB然后再setBlob 例子: import java.sql.*; import java.io.*; public class DBTest { static String driver = “org.gjt.mm.mysql.Driver”; static String url = “jdbc:mysql://localhost:3306/test”; static String user = “root”; static String passwd = “passwd”; public static void main(String[] args) throws Exception { Connection conn = null; try [...]

分类: 数据库 | 评论

1.数据库的对象: 1)优化表的类型: 2) 数据库表设计时候更小的占磁盘空间尽可能使用更小的整数类型.(mediumint就比int更合适) 3) 所有字段都得有默认值 4) 选择合适表类型(InnoDB或者myisam) 2,优化sql语句: 1)通过show status了解各种sql的执行频率 show status like ‘Com_%’ 了解 Com_select,Com_insert 的执行次数 2) 通过Explain分析低效的sql语句 3) 建立合适的索引 4) 通过show status like ‘Handler_%’查看索引的使用情况 handler_read_key表明索引效率的很高 Handler_read_rnd_key的值很高,表明查询运行效率很低 5) 定期分析表和检查表 analyze table test_table和check table test_table 然后查看Msg_text字段的值是否是ok 6)定期优化表 optimize table test_table 如果对表的字段varchar blob,text等进行了很多更改, 则撒花用 7) 优化 order by orgroup by等 3,锁的问题 1) MyISAM为表级锁 由于MyISAM写进程优先获得锁,使得读锁请求靠后等待队列 如果在大量更新操作的情况下,使得很难获得读锁。从而造成阻塞。 [...]

分类: 数据库 | 评论

1.授权 –授权app用户从指定IP访问数据库的所有权限 grant all privileges on *.* to ‘app’@’10.200.12.232′ identified by ‘app1234′; –授权app用户从指定IP访问downloaddb数据库的表(增删改查) GRANT select,insert,update,delete ON downloaddb.* TO ‘app’@’10.200.12.199′ IDENTIFIED BY ‘app1234′ WITH GRANT OPTION; 2.刷新权限 –刷新权限 FLUSH PRIVILEGES;

分类: 数据库 | 评论

有些不准确的,请指正 1.查看数据库版本 MSSQL: select @@version; MySQL: select version(); ORACLE: select * from v$version; 2.查看当前用户名 MSSQL: select user_name(); MySQL: select user(); ORACLE: select user from user_tables;  select username from v$session; 不知道是不是这样 3.查看当前数据库名 MSSQL: select db_name(); MySQL: select database(); Oracle: select name from v$database; show parameter db_name; 好象是多行,这个不对 oracle还有实例名 select instance_name from v$instance; show parameter instance 4.查看所有数据库名 MSSQL: [...]

这几天做项目,因为关系到从MYSQL向Oracle的迁移,所以,有了一些经验。 因为项目一开始就是用MYSQL开发的,所以没想到会出现的问题都出现了。 一、MYSQL可以导入导出脚本,本来应该准备好数据库的备份的初始化数据库和初始化数据的两个初始化脚本,经由MYSQL导出为一个full.sql的总的初始化脚本,用过mysql的都知道,导出的数据库脚本中,包含了建库、建表、以及插入数据的语句。需要分割成两个:建库、建表的初始化脚本和插入数据的初始化脚本。于是我写了一个类,用于分割SQL脚本,在类中,我查找到create table开头的后面紧跟着的字符串,就是表的名字,取出insert开头的语句,改行就是插入数据的,于是,通过文件流读取文件的每一行,如果是插入的取出来放入一个方法convertInsertSQL处理后写入一个脚本文件insert_data.sql中,剩下的写入一个脚本文件create_table.sql中, 方法convertInsertSQL对于插入语句做处理,因为脚本中的插入语句是批量插入的,insert into 表名(列名) values(对应值),( 对应值),( 对应值),所以需要拆分成insert into 表名(列名) values (对应值)这样的语句,所以我通过将前面values(前的值截取后,对剩下的所有对应数据,进行通过),(用正则分割成String数组,对数组进行循环,每次追加组成插入语句,最后将插入语句全部返回后写入文件流。 package com.test.file; import  java.io.BufferedReader; import  java.io.BufferedWriter; import  java.io.File; import  java.io.FileInputStream; import  java.io.FileOutputStream; import  java.io.IOException; import  java.io.InputStreamReader; import  java.io.OutputStreamWriter; import  java.util.HashMap; import  java.util.Map; /** * 将mysql数据库导出的脚本 * 分割成为建库和建表的两个脚本 * @author gaofei * */ public class MyFileReader { /** * @param args */ [...]