MySQL使用点滴

工作过程中发现一些细节,这里做个积累。我使用的是 MySQL 5 ,在其他版本中不一定适用。

同样的字符在不同字符集下占用空间可能不同

默认的 latin1 字符集下,汉字占两个字节,英文占1个字节。而在 gb2312 和 utf-8 等字符集下, 英文也占两个字节。从字符编码的角度讲似乎也无可非议,但是 MySQL 中这样处理以前真没有注意到过 ,char(10) 中的 10 正是按照字符集中的个数算的。处理数据量大的时候尤其需要注意,当然在 char 和 varchar 之间也可以权衡选择。

tinyint 和 smallint mediaint int

无论你指定 tinyint(1) 还是 tinyint(2),一个 tinyint 字段中保存的值范围都会是无符号时 0- 255(有符号时 -127-128) ,其他 int 类型有类似情况。

phpMyAdmin 显示的”总计”不准确

这个应该不是 MySQL 的原因。在我 select * from innodb_table 的时候,显示的“总计”数和 select count(*) from innodb_table 所得数可能不一致。这个以前也注意到过,之前还造成过几次误解 。貌似并不是只有 InnoDB 表会出这样的情况, MyISAM 表在 phpMyAdmin 也有这样的问题。

内存表

内存表有大小限制,内存文件超过 my.ini 中设置以后,会自动转换部分到硬盘。内存表所占内存以 固定的大小分配空间,即使一个表中只有一条记录,也可能占几M空间。内存表是有大小限制的,在 my.ini 中可以设置,当内存大小达到限制时,可能会报错:#1114: The table ‘XXX’ is full 。上面 是我实际遭遇到的,但是 my.ini 中有下面这段:

# Maximum size for internal (in-memory) temporary tables. If a table

# grows larger than this value, it is automatically converted to disk

# based table This limitation is for a single table. There can be many

# of them.

tmp_table_size=13M

MERG 表

只有 MyISAM 表可以 merge ,MERG 的所有子表表结构要求一致。

多表更新

比较新的版本才支持同时 update 多个表。比如这样 update user_state, user_state2 set user_state.state_0507_db2 = user_state2.state_0507_db2 where user_state.qq = user_state2.qq

时间: 2024-10-28 15:10:12

MySQL使用点滴的相关文章

sql点滴40—mysql乱码问题总结

原文:sql点滴40-mysql乱码问题总结 本文将为大家讲解如何处理Java连接过程中的MySQL中文乱码问题.一般MySQL中文乱码问题都是与字符集有关,这里作者的经历也大致差不多. MySQL默认编码是latin1 1. mysql> show variables like 'character%'; 2. +--------------------------+--------------------------+ 3. | Variable_name | Value | 4. +---

sql点滴41—mysql常见sql语法

原文:sql点滴41-mysql常见sql语法 ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 添加带注释的列:alter table directory add index_url varchar(256) default null comment '章节书目链接' after di

sql点滴42—mysql中的时间转换

原文:sql点滴42-mysql中的时间转换 UNIX时间戳转换为日期用函数: FROM_UNIXTIME()   select FROM_UNIXTIME(1156219870);   日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP()   Select UNIX_TIMESTAMP('2006-11-04 12:23:00′);   例:mysql查询当天的记录数:   $sql="select * from message Where DATE_FORMAT(FROM_UN

sql点滴37—mysql中的错误Data too long for column '' at row 1

原文:sql点滴37-mysql中的错误Data too long for column '' at row 1   1.MYSQL服务 我的电脑--(右键)管理--服务与应用程序--服务--MYSQL--开启(停止.重启动)   2.命令行方式 Windows 1.点击"开始"->"运行"(快捷键Win+R). 2.启动:输入 net stop mysql 3.停止:输入 net start mysql 提示* Redhat Linux 也支持service

MySQL MyISAM 优化设置点滴_Mysql

最近在配置mysql服务器需要用到的一些设置,经过测试发现比较不错的配置方案,亮点在最后啊 先说一点问题:   Mysql中的InnoDB和MyISAM是在使用MySQL中最常用的两个表类型,各有优缺点.两种类型最主要的差别就是 InnoDB 支持事务处理与外键和行级锁.而MyISAM不支持.所以Myisam往往就容易被人认为只适合在小项目中使用.但是从数据库需求角度讲,要求99.9%的稳定性,方便的扩展性和高可用性来说的话,那MyISAM绝对应该是首选.MyISAM类型的表强调的是性能,其执行

MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

[正文] 这一周状态不太好,连续打了几天的点滴,所以博客中断了一个星期,现在继续. 我们在之前的几篇文章中学习了JDBC对数据库的增删改查.其实在实际开发中,一般都是使用第三方工具类,但是只有将之前的基础学习好了,在使用开源工具的时才能得心应手.如果对JDBC基础不太清楚,或者对本文看不太懂,建议先回顾一下本人之前的几篇和"MySQL数据库学习笔记"相关的文章.但是不管怎样,今后如果用到了数据库的增删改查,肯定是这篇文章中的代码用的最多. 一.DbUtils简介: DBUtils是ap

MySQl的意外断电后无法启动

服务器意外断电后启动mysql数据库报错: Another MySQL daemon already running withthe same unix socket. 本地登录mysql数据库提示: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) 原因: mysql没有正常停止,机器重启后mysql.sock一直存在,但机器重启后my

hive 安装mysql作为元数据

下载hive的安装包解压在hadoop集群上的任何一台机器上都可以 mysql jdbc驱动拷贝到hive的lib目录下 hive-env.sh HADOOP_HOME=/opt/modules/hadoop-2.2.0 修改hive-site.xml   <property>     <name>javax.jdo.option.ConnectionURL</name>     <value>jdbc:mysql://localhost:3306/hive

mysql循环批量插入测试数据

DELIMITER 其实就是定义了一个语句执行的结束符 MySql中的delimiter: http://blog.sina.com.cn/s/blog_4c197d420101d3oa.html 1:定义存储过程 DROP PROCEDURE test_insert ; DELIMITER $$ //定义结束符 CREATE PROCEDURE test_insert()     BEGIN      DECLARE i INT DEFAULT 0;      START TRANSACTIO