2.innodb_buffer_pool_size
如果用Innodb,那么这是一个重要变量。相对于MyISAM来说,Innodb对于buffersize更敏感。MySIAM可能对于大数据量使用默认的key_buffer_size也还好,但Innodb在大数据量时用默认值就感觉在爬了。Innodb的缓冲池会缓存数据和索引,所以不需要给系统的缓存留空间,如果只用Innodb,可以把这个值设为内存的70%-80%。和key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。
innodb_additional_pool_size
这个的效果不是很明显,至少是当操作系统能合理分配内存时。但你可能仍需要设成20M或更多一点以看Innodb会分配多少内存做其他用途。
innodb_log_file_size
对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。我一般用64M-512M,具体取决于服务器的空间。
innodb_log_buffer_size
默认值对于多数中等写操作和事务短的运用都是可以的。如果经常做更新或者使用了很多blob数据,应该增大这个值。但太大了也是浪费内存,因为1秒钟总会flush(这个词的中文怎么说呢?)一次,所以不需要设到超过1秒的需求。8M-16M一般应该够了。小的运用可以设更小一点。
innodb_flush_log_at_trx_commit(这个很管用)
抱怨Innodb比MyISAM慢100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed upcache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统挂了时才可能丢数据。
3.windows无法启动mysql服务 错误1067
一般是你修改了你的配置文件导致无法启动,修改一下就好了
4.乱码问题:
cmd下登陆mysql,执行命令:show variables like "%character%";可以得到以下的表
mysql> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
把除了filesystem那个之外的全部改成utf-8,命令是
set character_set_client = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_server = utf8;
set character_set_results=utf8;
当然,修改了这个未必就解决了乱码问题,
页面的编码还有你数据库的编码还有你数据库中字段的编码等等,最好都改成统一的
注:我发现用上面的方法改了以后只要重启了mysql服务那么上面的配置就都失效了,所以正宗的方法还是得在my.ini中改,在[mysqld]下加上一句character_set_server=utf8,注意不是default-character-set=utf8,这个在mysql5.5版本中已经不适用了,但是这样子只影响了server和database两个值,其他的我怎么改都改不了,有大神知道的话请不吝赐教!
5.mysql的data目录下的数据库的文件夹只存放了表的结构,而表的数据是存放在ibdata1这个文件中的(同一个目录)
6.从表中获取随机一行或几行:在sql语句后面加order by rand() limit somenumber
7.timestamp最大时间2038-01-19 03:14:07
8.mysql不支持check,而且MySQL不象其它有些数据库可以在触发器中抛出异常来中断当前触发器的执行以阻止相应的SQL语句的执行。在MySQL的目录版本中还无法直接抛出异常。一种实现的方法就是想办法在触发器中利用一个出错的语句来中断代码的执行。下面是自己写的一个函数和触发器,一开始这个错误的语句是用droptable sdfdfs,但是报错了#1422 - Explicit orimplicit commit is not allowed in stored function ortrigger.在触发器中不能有commit;rollback;这种事务语句,但是我这一句也没错误啊,后来换成了insert就好了
DELIMITER $$
create function fun(entrustproductId varchar(25), _orderIdvarchar(25))
returns INT
begin
declare value int;
if exists(select COUNT(*) from entrustproduct as e,_order as o
where e.id=entrustproductId and o.id=_orderId and
e.entrustId = o.entrustId)
return value;
End $$
delimiter |
create trigger waybilltrigger before insert on waybill
begin
declare x int;
set x = fun(NEW.entrustproductId,NEW.orderId);
if(x=0)
then
end |
9.mysqldump -u root -p密码
10.设置级联的时候如果修改父键的类型子键是不会改的
Mysql数据库对于BLOB/TEXT这样类型的数据结构只能索引前N个字符。所以这样的数据类型不能作为主键,也不能是UNIQUE的。所以要换成VARCH,但是VARCHAR类型的大小也不能大于255,当VARCHAR类型的字段大小如果大于255的时候也会转换成小的TEXT来处理。所以也同样有问题。
mysql> FLUSH PRIVILEGES;