一切福田,不離方寸,從心而覓,感無不通。

Category Archives: MySQL

MySQL单表可以多大

在老版本的MySQL 3.22中,MySQL的单表限大小为4GB,当时的MySQL的存储引擎还是ISAM存储引擎。但是,当出现MyISAM存储引擎之后,也就是从MySQL 3.23开始,MySQL单表最大限制就已经扩大到了64PB了(官方文档显示)。也就是说,从目前的技术环境来看,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定,而是由所在主机的OS上面的文件系统来决定了。   而MySQL另外一个最流行的存储引擎之一Innodb存储数据的策略是分为两种的,一种是共享表空间存储方式,还有一种是独享表空间存储方式。 当使用共享表空间存储方式的时候,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所 以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单 表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。 而当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。   以下是从收集到的一点信息,不一定全部准确: 操作系统                                    大小限制 win32 w/ FAT/FAT32              2GB/4GB win32 w/ NTFS                      2TB(可能更大) Linux 2.2-Intel 32-bit            2GB (LFS: 4GB) Linux 2.4+                            4TB(ext3) Solaris 9/10                         16TB NetWare w/NSS filesystem  8TB MacOS X w/ HFS+               2TB 以下是MySQL文档中的内容: Windows用户请注意:FAT和VFAT (FAT32)不适合MySQL的生产使用。应使用NTFS。   在默认情况下,MySQL创建的MyISAM表允许的最大尺寸为4GB。你可以使用SHOW TABLE STATUS语句或myisamchk -dv tbl_name检查表的最大尺寸。请参见13.5.4节,“SHOW语法”。   如果需要使用大于4GB的MyISAM表(而且你的操作系统支持大文件),可使用允许AVG_ROW_LENGTH和MAX_ROWS选项的CREATE TABLE语句。创建了表后,也可以使用ALTER TABLE更改这些选项,以增加表的最大允许容量。 from:http://www.2cto.com/database/201111/111978.html

龙生   25 Mar 2014
View Details

mysql日期的默认值

如何给mysql设置日期的默认值呢? mysql的日期类型:datetime ,是无法设置默认值的 TIMESTAMP类型可以设置:

o        用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句,列为默认值使用当前的时间戳,并且自动更新。 o        不使用DEFAULT或ON UPDATE子句,与DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP相同。 o        用DEFAULT CURRENT_TIMESTAMP子句不用ON UPDATE子句,列为默认值使用当前的时间戳但是不自动更新。 o        不用DEFAULT子句但用ON UPDATE CURRENT_TIMESTAMP子句,列有默认值0并自动更新。 o        用常量DEFAULT值,列有给出的 默认值。如果列有一个ON UPDATE CURRENT_TIMESTAMP子句,它自动更新,否则不。 换句话说,你可以为初始值和自动更新的值使用当前的时间戳,或者其中一个使用,或者两个皆不使用。(例如,你可以指定ON UPDATE来启用自动更新而不让列自动初始化)。 ·         在DEFAULT和ON UPDATE子句中可以使用CURRENT_TIMESTAMP、CURRENT_TIMESTAMP()或者NOW()。它们均具有相同的效果。 两个属性的顺序并不重要。如果一个TIMESTAMP列同时指定了DEFAULT和ON UPDATE,任何一个可以在另一个的前面。 例子,下面这些语句是等效的: CREATE TABLE t (ts TIMESTAMP); CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP                              ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMP                              DEFAULT CURRENT_TIMESTAMP); ·         要为TIMESTAMP列而不是第1列指定自动默认或更新,必须通过将第1个TIMESTAMP列显式分配一个常量DEFAULT值来禁用自动初始化和更新。(例如,DEFAULT 0或DEFAULT’2003-01-01 00:00:00′)。然后,对于其它TIMESTAMP列,规则与第1个TIMESTAMP列相同,例外情况是不能忽略DEFAULT和ON UPDATE子句。如果这样做,则不会自动进行初始化或更新。 例如:下面这些语句是等效的: CREATE TABLE t (     ts1 TIMESTAMP DEFAULT 0,     ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP                   ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t (     ts1 TIMESTAMP DEFAULT 0,     ts2 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP                   DEFAULT CURRENT_TIMESTAMP);

[…]

龙生   19 Mar 2014
View Details

MySQL: InnoDB 还是 MyISAM?

MyISAM存储引擎 MyISAM是 默认存储引擎。它基于更老的ISAM代码,但有很多有用的扩展。MyISAM存储引擎的一些特征: ·              所有数据值先存储低字节。这使得数据机和操作系统分离。二进制轻便性的唯一要求是机器使用补码(如最近20年的机器有的一样)和IEEE浮点格式(在主流机器中也完全是主导的)。唯一不支持二进制兼容性的机器是嵌入式系统。这些系统有时使用特殊的处理器。 ·                先存储数据低字节并不严重地影响速度;数据行中的字节一般是未联合的,从一个方向读未联合的字节并不比从反向读更占用更多的资源。服务器上的获取列值的代码与其它代码相比并不显得时间紧。 ·        大文件(达63位文件长度)在支持大文件的文件系统和操作系统上被支持。 ·                 当把删除和更新及插入混合的时候,动态尺寸的行更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块来自动完成。 ·                 每个MyISAM表最大索引数是64。             这可以通过重新编译来改变。每个索引最大的列数是16个。 ·                 最大的键长度是1000字节。这也可以通过编译来改变。对于键长度超过250字节的情况,一个超过1024字节的的键块被用上。 ·                 BLOB和TEXT列可以被索引。 ·                 NULL值被允许在索引的列中。这个占每个键的0-1个字节。 ·                 所有数字键值以高字节为先被存储以允许一个更高地索引压缩。 ·        当记录以排好序的顺序插入(就像你使用一个AUTO_INCREMENT列之时),索引树被劈开以便高节点仅包含一个键。这改善了索引树的空间利用率。 ·                 每表一个AUTO_INCREMEN列的内部处理。MyISAM为INSERT和UPDATE操作自动更新这一 列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索 引的最后一列,可以出现重使用从序列顶部删除的值的情况 )。AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置。 ·                 如果数据文件中间的表没有自由块了,在其它线程从表读的同时,你可以INSERT新行到表中。(这被认识为并发操作 )。自由块的出现是作为删除行的结果,或者是用比当前内容多的数据对动态长度行更新的结果。当所有自由块被用完(填满),未来的插入又变成并发。 ·                 你可以把数据文件和索引文件放在不同目录,用DATA DIRECTORY和INDEX DIRECTORY选项CREATE TABLE以获得更高的速度,请参阅13.1.5节,“CREATE      TABLE语法”。 ·                 每个字符列可以又不同的字符集。 ·          在MyISAM索引文件里又一个标志,它表明表是否被正确关闭。如果用--myisam-recover选项启动mysqld,MyISAM表在打开得时候被自动检查,如果被表被不恰当地关闭,就修复表。 ·                 如果你用--update-state选项运行myisamchk,它标注表为已检查。myisamchk --fast只检查那些没有这个标志的表。 ·                 myisamchk --analyze为部分键存储统计信息,也为整个键存储统计信息。 ·                 myisampack可以打包BLOB和VARCHAR列。 MyISAM也支持下列特征: ·                 支持true VARCHAR类型;VARCHAR列以存储在2个字节中的长度来开始。 ·                 有VARCHAR的表可以有固定或动态记录长度。 ·                 VARCHAR和CHAR列可以多达64KB。 ·                   一个被搞乱的已计算索引对可对UNIQUE来使用。这允许你在表内任何列的合并上有UNIQUE。(尽管如此,你不能在一个UNIQUE已计算索引上搜索)。 InnoDB存储引擎 InnoDB给MySQL提供 了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非 锁定读。这些特色增加 了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。 InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。 InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在 分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。 InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的 默认表。 InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点Slashdot.org运行在 InnoDB上。Mytrix, Inc.在InnoDB上存储超过1TB的数据,还有一些其它站点在InnoDB上处理平均每秒800次插入/更新的负荷。 InnoDB和MyISAM的区别 区别概述: MyISAM 是MySQL中默认的存储引擎,一般来说不是有太多人关心这个东西。决定使用什么样的存储引擎是一个很tricky的事情,但是还是值我们去研究一下,这里的文章只考虑 MyISAM 和InnoDB这两个,因为这两个是最常见的。 下面先让我们回答一些问题: 你的数据库有外键吗? 你需要事务支持吗? 你需要全文索引吗? 你经常使用什么样的查询模式? 你的数据有多大? […]

龙生   15 Aug 2013
View Details

MySQL管理工具HeidiSQL

HeidiSQL 是一个功能非常强大的 MySQL 客户端软件。它是德国程序员Ansgar Becker和几个Delphi程序员开发的一个开源工具。要通过HeidiSQL来管理数据库,用户应该用有效地凭证登陆到MySQL服务器,创建一个会话。HeidiSQL最大的特色就是操作方便,界面设计合理,功能都是最实用的,尤其适合DBA,它更加强调了对MySQL运行时的参数设置和性能监控等. 它可以浏览和编辑数据,创建和编辑表格,视图,过程,触发器和安排日程。另外,还可以导出结构和数据SQL文件。 HeidiSQL特点:•连接到多个服务器窗口 •可以使用命令行连接到服务器 •创建和编辑表格,视图,存储程序,触发器和安排日程。 •SQL数据导出 •从一台服务器/数据库直接导入数据到另一台服务器/数据库 •管理用户权限 •导入文本文件 •为CSV,HTML,XML和SQL的Wiki标记LaTeX和导出表行 •批量修改表(移动到DB,改变发动机,整理等) •批量插入到表中ASCII或二进制文件 •写自定义语法高亮和代码自动完成查询 •漂亮的SQL格式化 •监视和杀灭客户进程 •找到一个所有数据库的所有表的具体文本服务器 •在批处理方式优化和修复表 官网地址:http://www.heidisql.com/ 转自:http://www.cnblogs.com/shanyou/archive/2012/06/06/2537583.html

龙生   19 Jun 2013
View Details

mariaDB

MariaDB是一个向后兼容、替代MySQL的数据库服务器。它包含所有主要的开源存储引擎。 MariaDB源代码公开存放于Launchpad项目托管平台,同时也提供了二进制和编译包供下载。 MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。 为何改了个名字呢,这其中是有些典故的。 MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB。 MariaDB跟MySQL在绝大多数方面是兼容的,对于开发者来说,几乎感觉不到任何不同。目前MariaDB是发展最快的MySQL分支版本,新版本发布速度已经超过了Oracle官方的MySQL版本。 在Oracle控制下的MySQL开发,有两个主要问题: 1. MySQL核心开发团队是封闭的,完全没有Oracle之外的成员参加。很多高手即使有心做贡献,也没办法做到。 2. MySQL新版本的发布速度,在Oracle收购Sun之后大为减缓。Widenius有一个ppt,用数据比较了收购之前和之后新版本的发布速度。有很多bugfix和新的feature,都没有及时加入到发布版本之中。 以上这两个问题,导致了各个大公司,都开发了自己定制的MySQL版本,包括Yahoo!/Facebook/Google/阿里巴巴+淘宝网等等。 MySQL是开源社区的资产,任何个人/组织都无权据为己有。为了依靠广大MySQL社区的力量来更快速的发展MySQL,另外开分支是必须的。 MariaDB默认的存储引擎是Maria,不是MyISAM。Maria可以支持事务,但是默认情况下没有打开事务支持,因为事务支持对性能会有影响。可以通过以下语句,转换为支持事务的Aria引擎。ALTER TABLEtablenameENGINE=MARIATRANSACTIONAL=1; 特点 MariaDB 是一个采用Maria存储引擎的MySQL分支版本,是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器。[1] 这个项目的更多的代码都改编于 MySQL 6.0,例如 “pool of threads”功能提供解决多数据连接问题。MariaDB 5.1.41 RC可以到这里下载,32位和64位已编译Linux版本,还包括源代码包。MariaDB基于GPL 2.0发布。 与 MySQL 相比较,MariaDB 更强的地方在于: Maria存储引擎PBXT 存储引擎 XtraDB存储引擎 FederatedX存储引擎 更快的复制查询处理 线程池 更少的警告和bug 运行速度更快 更多的 Extensions (More index parts, new startup options etc) 更好的功能测试 数据表消除 慢查询日志的扩展统计 支持对 Unicode 的排序 相对于MySQL最新的版本5.6来说,在性能、功能、管理、NoSQL扩展方面,MariaDB包含了更丰富的特性。。比如微秒的支持、线程池、子查询优化、组提交、进度报告等。详情见列表。 High Performance Developers DBAs NoSQL Thread pool 线程池 Microsecond precision & type 微秒支持 Segmented MyISAM keycache MyISAM缓存分段 HandleSocket 直接InnoDB/XtrDB访问 Group commit for […]

龙生   19 Jun 2013
View Details

mysql 添加索引

1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column ) 2.添加UNIQUE(唯一索引) mysql>ALTER TABLE table_name ADD UNIQUE ( column ) 3.添加INDEX(普通索引) mysql>ALTER TABLE table_name ADD INDEX index_name ( column ) 4.添加FULLTEXT(全文索引) mysql>ALTER TABLE table_name ADD FULLTEXT ( column) 5.添加多列索引 mysql>ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 ) 转自:http://www.jb51.net/article/32149.htm

龙生   15 Mar 2013
View Details

MySQL 时区设置

  MySQL 时区默认是服务器的时区。 可以通过以下命令查看 SQL代码 mysql> show variables like ‘%time_zone%’;+——————+——–+| Variable_name    | Value  |+——————+——–+| system_time_zone | CST    || time_zone        | SYSTEM |+——————+——–+2 rows in set (0.00 sec) 可以通过修改my.cnf在 [mysqld] 之下加 default-time-zone=timezone来修改时区。如:default-time-zone = ‘+8:00′改了记得重启msyql喔注意一定要在 [mysqld] 之下加 ,否则会出现 unknown variable ‘default-time-zone=+8:00′ 另外也可以通过命令 set time_zone = timezone比如北京时间(GMT+0800)set time_zone = ‘+8:00′;这个和php的时区设置又有点差别,比如北京时间在php中是date_default_timezone_set(‘Etc/GMT-8′); 美国pst时间(GMT-08:00)set time_zone = ‘-8:00′; SQL代码 mysql> set time_zone = ‘+8:00′;Query OK, 0 rows affected (0.00 sec)   mysql> select now();+———————+| now()               |+———————+| 2008-12-29 11:26:36 |+———————+1 row in set (0.00 sec) mysql> set time_zone = ‘-8:00′;Query OK, 0 rows affected (0.00 sec) mysql> select now();+———————+| now()               |+———————+| 2008-12-28 19:27:09 |+———————+1 row in set (0.00 sec) 定义函数: function set_time_zone(){mysql_query(“set time_zone = ‘+8:00′;”);$sql=mysql_query(“select now() as now”);$r=mysql_fetch_array($sql);return $r['now'];} 转自:http://www.majormoves.net/post/441/  

龙生   19 Feb 2013
View Details

Mysql常用命令行大全

  第一招、mysql服务的启动和停止 net stop mysql net start mysql 第二招、登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是: mysql> 注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP 第三招、增加新用户 格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码” 如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令: grant select,insert,update,delete on *.* to user1@localhost Identified by “password1″; 如果希望该用户能够在任何机器上登陆mysql,则将localhost改为”%”。 如果你不想user1有密码,可以再打一个命令将密码去掉。 grant select,insert,update,delete on mydb.* to user1@localhost identified by “”; 第四招: 操作数据库 登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。 1、 显示数据库列表。 show databases; 缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。 2、 显示库中的数据表: use mysql; show tables; 3、 显示数据表的结构: describe 表名; 4、 建库与删库: create database 库名; drop database 库名; 5、 建表: use 库名; create table 表名(字段列表); drop table 表名; 6、 清空表中记录: delete from 表名; 7、 显示表中的记录: select * from 表名; 第五招、导出和导入数据 1. 导出数据: mysqldump –opt test > mysql.test 即将数据库test数据库导出到mysql.test文件,后者是一个文本文件 如:mysqldump -u root -p123456 –databases dbname > mysql.dbname 就是把数据库dbname导出到文件mysql.dbname中。 2. 导入数据: mysqlimport -u root -p123456 < mysql.dbname。 不用解释了吧。 3. 将文本数据导入数据库: 文本数据的字段数据之间用tab键隔开。 use test; load data local infile “文件名” into table 表名; 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2、创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!) 4:查看现在的数据库中存在什么表 mysql> SHOW TABLES; 5:创建一个数据库表 mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1)); 6:显示表的结构: mysql> DESCRIBE MYTABLE; 7:往表中加入记录 mysql> insert into MYTABLE values (“hyq”,”M”); 8:用文本方式将数据装入数据库表中(例如D:/mysql.txt) mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE; 9:导入.sql文件命令(例如D:/mysql.sql) mysql>use database; mysql>source d:/mysql.sql; 10:删除表 mysql>drop TABLE MYTABLE; 11:清空表 mysql>delete from MYTABLE; 12:更新表中数据 mysql>update MYTABLE set sex=”f” where name=’hyq’; posted on 2006-01-10 16:21 happytian 阅读(6) 评论(0) 编辑 收藏 收藏至365Key 13:备份数据库 mysqldump -u root 库名>xxx.data 14:例2:连接到远程主机上的MYSQL 假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令: mysql -h110.110.110.110 -uroot -pabcd123 (注:u与root可以不用加空格,其它也一样) 3、退出MYSQL命令: exit (回车)  

龙生   19 Feb 2013
View Details

如何查看mysql里的编码格式,以及如何修改

  首先进入dos模式下输入: 1.cd C:\Program Files\MySQL\MySQL Server 5.5\bin 2.mysql -h127.0.0.1(你要访问的主机的地址) -uroot(用户名) -proot(密码)  3.show variables like ‘character%’; 这样就完成了对你的mysql里的编码格式的查看了,如果你想修改,继续执行下面的步骤: 打开mysql安装目录,里面有个my.ini文件,打开这个文件,里面有两处字符集的设置,默认是拉丁,建议你所想改的,如:utf8或gbk 然后启动mysql服务,以后创建的数据库默认字符集就是ok了 (重启时,打开MySQLAdministrator的Service Control进行操作就可以了。)  

龙生   19 Feb 2013
View Details