WordPress与Uchome数据转移要点

网站程序的数据转移原来就进行过一次,是将原来Java版学习日记开源项目网站的数据转移到Wordpress数据库中,见:WordPress数据库基本结构及导入原学习日记数据库相关SQL语句。而Ucenter Home比原来的程序复杂了不少,下面记录一些转移数据的要点和一些关键的转移数据代码。包括从 WordPress 2.8.1 转移到 Uchome 2.0 及 Uchome 2.0 转移到 WordPress 2.8.1。 Continue reading "WordPress与Uchome数据转移要点"

WordPress数据库基本结构及导入原学习日记数据库相关SQL语句

经过数天的努力,终于把原来学习日记数据库导入了wordpress数据库,wordpress版的学习日记正式开张。作为开张第一篇日记,是关于wordpress数据库的基本结构学习和一些导入相关的sql,供自己备忘和一些有此需求的朋友参考。还请朋友看见错误提示一下。谢谢。
Continue reading "WordPress数据库基本结构及导入原学习日记数据库相关SQL语句"

开源数据库mysql免费使用和商业使用的区别(转载)

今天,看到matrix的文章回复中有朋友问有什么开源付费的软件,我在网上找到这篇帖子,觉得很有代表性,特地转载于此。

转自:http://www.chinaunix.net/jh/17/814671.html 

转帖正文:

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

[保留] 【疑惑】mysql在商业上到底怎么用?需要付费么?别人告怎么办?

http://www.chinaunix.net 作者:jglxgz  发表于:2006-10-25 20:48:02

【发表评论】【查看原文】【MySQL讨论区】【关闭】

mysql到底怎么用了,需要付费么?包括服务器和客户端,windows和linux下的使用?在商业上怎么用了?别人告侵权咋办?

我现在打算用postgresql,但它缺乏windows下的双机热备

------------------------------------

下面的文章是转载(不好意思,找不到原始出处)

 ----------------------

很多人都不理解MySQL的授权方式,主要原因是没有中文资料别无其他!

我不想嘲笑谁,但是我认为有必要搞清楚这一重要的因素。国际官司我

们已经吃亏太多了,我不想这变成笑柄。

当前,MySQL采用双重授权(Dual Licensed),他们是GPL和MySQL AB

制定的商业许可协议。如果你在一个遵循GPL的自由(开源)项目中使

用MySQL,那么你可以遵循GPL协议使用MySQL。否则,你需要购买MySQL

AB制定的那个商业许可协议。这里最重要的一点就是要想免费使用MySQL,

你所开发的软件必须是遵循GPL的自由(开源)软件,虽然被批准的自由

(开源)许可协议有很多个。

理清授权管辖的范围

MySQL是一套客户端/服务器(C/S)结构的系统。双重许可机制对两大块

同时进行约束,但是并不绝对。MySQL AB(MySQL的出品公司)考虑到便

于人们使用,客户端是完全遵循GPL许可。也就是说,在事实上MySQL的

双重许可机制这一双重的特点是对服务器端而言的。我想,我恐怕会把

一些人搞糊涂,这里所说的客户端指的是MySQL AB开发的那个命令行下

的客户端工具(mysql.exe)。

不同操作系统下是否有特殊的限制?

在当前可以说没有,如果有只是MySQL具体代码实现上的功能差异,许

可协议本身是没有特定区分的。在早期MySQL确实对微软/非微软操作系

统进行过特定的区分,在那时如果要获得Windows平台最新的MySQL,

你必须付费购买,现在已经不同了。

Windows版本是否受到限制?

刚才已经说过了,现在没有这种区分,唯一的差异是不同操作系统下的

具体实现造成的。当前,你可以随意获得最新的Windows版本分发。他

们是没有功能、时间限制的。当然,你应该遵循许可协议。

以教育为目的是否需要付费?

其实没有这个区分,主要的取决还是软件是否遵循GPL进行发布。当然,

如果只是用来做课堂教学是不用购买商业许可协议,这种情况下MySQL

遵循GPL许可协议。

我该买几个许可证?

MySQL的许可证按照计算机台数计算,一台机器一个。至于一台机器多个

操作系统的情况下该购买几个许可证这种龌鹾问题别问我,我不知道!

许可证和技术支持的关系?!

技术支持和许可证是不同的东西。虽然很多的软件会把它们搭配销售,

但是实际上应该有单独签署一份技术支持保障协议。具体的时限和价格

我不清楚。

MySQL API的授权

MySQL客户端API遵循GPL协议,其中所包含的GNU getopt 遵循LGPL,并

且一些地方用到的regexp库则遵循BSD许可协议。

更多的信息

强烈建议去看看手册中MySQL许可协议的相关授权章节,里边写的非常详

细。

----------------------------------

欢迎释疑,谢谢!

 jglxgz 回复于:2006-08-20 21:16:41

http://www.mysql.com/company/legal/licensing/faq.html

 jglxgz 回复于:2006-08-20 21:17:48

http://www.mysql.com/company/legal/licensing/faq.html

-------------------------------------------------------------------------------

What is MySQL's software licensing model?

MySQL uses a "dual licensing" business model. Under this model, users may choose to use MySQL products under the free software/open source GNU General Public License (commonly known as the "GPL") or under a commercial license.

With the GPL license, MySQL is available free of charge. Users may download the software for free and modify, integrate and distribute it. However, GPL users must abide by the rules of the GPL, which stipulate that if a MySQL-based application is redistributed, the complete source code for this application must also be open and available for redistribution.

MySQL AB offers a commercial license for organizations that do not want to release the source code for their application. Commercial license customers get a commercially supported product with a level of assurance from MySQL AB, without the requirement that their MySQL-based software must be "open sourced". MySQL is able to provide a commercial license because it has full ownership of the MySQL code.

MySQL's dual licensing increases freedom in two ways: first, it encourages the growth of free software by licensing MySQL under the GPL; second, it makes it possible to use our software in situations where the GPL is not applicable.

Why does MySQL offer two licenses?

MySQL's dual license model supports the company's mission: to make superior database software available and affordable to all.

The dual licensing creates a circle that sustains both innovation and growth: MySQL channels the revenue from this viable open source business model back into support for its open source user community that, in turn, supports MySQL AB's commercial business.

Today, MySQL AB has over 4 thousand paying customers who have chosen the commercial license and over 4 million who have chosen the open source GPL license. The dual licensing business model is a "win-win" for all parties:

    * MySQL's open source community gets superior software for no cost;

    * MySQL's commercial customers have the option of using reliable, community "battle tested" MySQL software for a relatively low cost;

    * MySQL's business is healthy and viable, which also strengthens the open source movement.

How do I know which license to use?

The overall guiding business principle of MySQL's dual licensing is one of fair exchange or "Quid pro Quo" which means "something for something."

So if you use MySQL with GPL-licensed software (or a license that is GPL-compatible) we encourage you to use the GPL license. For all other users of MySQL, we recommend that you purchase a MySQL commercial license

For more complete guidelines on the GPL and commercial license from MySQL, please read our licensing overview or contact a MySQL representative online.

Do I get the same MySQL software under either license?

Yes. The MySQL product is essentially identical under either the GPL license or the commercial license. In some cases there are minor differences in the support libraries due to incompatibilities between the licenses of the libraries and MySQL.

How much does a commercial MySQL license cost?

As a result of its open source community and licensing model, MySQL AB is able to produce and offer its software at a much lower cost than what is typical in the industry. Current pricing for the server and other products can be found on our online store.

With a commercial license option, is MySQL still an "open source" company?

Yes, MySQL is still an open source company and is completely committed to the open source values and philosophy. We believe the open source model of development and distribution is the most efficient way to produce high-quality software. All MySQL software is offered under both open source and commercial license terms.

Are other companies using the dual licensing business model?

Yes, the dual licensing business model is becoming increasingly popular among open source companies as it paves the way for long-term financial viability. Other companies that offer dual licensing include Digium, OSAF, MandrakeSoft, Sleepycat Software, Technical Pursuit, Trolltech, and others.

Previously, the MySQL client libraries were licensed under the LGPL (the Lesser General Public License) and now they use the GPL (the General Public License). What prompted this change?

MySQL's goal is to provide all its software under a free software/open source license. The change from the LGPL to the GPL for the client libraries was made in 2001 during the development of MySQL 4.0 to help MySQL AB more easily differentiate between a proprietary user who should buy a commercial license and a free software user who should use the GPL license. Previously there were people that were misusing the GPL by distributing the MySQL server tightly coupled with their applications and claiming that the GPL doesn't affect them because the client libraries were free to use.

This change has allowed MySQL to support its dual licensing model by better identifying when someone is using MySQL software in a closed source fashion without commitment to the open source philosophy. While MySQL supports the open source ideals, we also believe in the notion of "Quid Pro Quo" or fair exchange. For developers building open source applications using MySQL, the change in the client licensing policy has no effect.

Based on feedback from our users, MySQL has introduced an exception that makes it possible to combine the MySQL client libraries with software that uses various Free and Open Source software ("FOSS") licenses. This is known as the FOSS License Exception.

What is the GPL License Exception for PHP?

Because PHP and MySQL use different incompatible open source licenses, we have created a special exception to encourage and promote the use of MySQL in the PHP community. MySQL AB gives permission to distribute derivative works that are formed with GPL-licensed MySQL software and with software licensed under version 3.0 of the PHP license. You must obey the GNU General Public License in all respects for all of the code used other than code licensed under version 3.0 of the PHP license.

There is also a more general exception which enables developers releasing software under other Free and Open Source software ("FOSS") licenses to include the MySQL client libraries. This is known as the FOSS License Exception.

What is the FOSS License Exception to the GPL?

The FOSS License Exception enables open source developers who are using Free and Open Source software ("FOSS") licenses other than the GPL to include the MySQL client libraries. Since some licenses are incompatible with the GPL this exception provides flexibility for open source developers. We want to support the open source community in their desire to use the MySQL client libraries in a broad range of open source projects.

Why has MySQL created the FOSS License Exception?

We created the FOSS License Exception to give developers greater flexibility in using MySQL with software that is under other Free and Open Source Software ("FOSS") licenses. Some open source licenses are not fully compatible with the GPL and so this exception makes it possible for developers to chose their preferred open source license and still have the ability to include the MySQL client libraries.

How did MySQL select the licenses for inclusion in the FOSS exception?

We have reviewed the most popular open source licenses to make sure that they can be used with the MySQL client libraries. If you are using a different open source license that follows the Open Source Definition by the Open Source Initiative and it is not on our list of approved licenses please contact us at license-feedback@mysql.com.

What is MySQL's policy on software patents?

We do not think that software patents are a useful way to protect software IP. Instead, we believe that copyright protection is sufficient. We have concluded that software patents are harmful to the software industry at large. This is why we support those who work for an abolishment of software patents. We also work with other companies and groups to build a joint defense against software patents. More information is available on our patent policy page.

How do I send MySQL AB comments on licensing or other issues?

The open source community is very important to MySQL and we want to hear all feedback! We have previously asked the community for specific feedback on licensing and will continue to do so to create an ongoing dialogue. You can send us your feedback using our feedback form. You can also fill out our survey on licensing and view the results.

Version 4.1, 12 March 2004

 michael75 回复于:2006-08-21 10:57:24

1、如果你是来开发一些应用软件,数据库用MYSQL,你所开发的应用软件销售,则需要付费license.如果你开发的软件不用于销售,但是你必须开放你的源码。如果你不开放源码,那么MYSQL公司就可以起诉你。

2、现在MYSQL的具体分类如下:pro版本分为windows、LINUX、UNIX操作系统, 其中windows、LINUX操作系统的MYSQL价格是一样的,UNIX操作系统的MYSQL贵一些。cluster版本的按照CPU来计算的。

3、如果你是用于商业,捆绑你公司产品销售,那么你必须购买MYSQL的license.根据你的需要的功能和操作系统,价格都会不一样。但是WINDOWS操作系统的价格都一样。

具体情况可以向我咨询:

**************************************************************  

             MYSQL AB中国研发中心

             拓林思(中国)软件有限公司(turboliunx.inc.

         北京万里开源有限公司      (greatlinux.inc)

                 

             宋桂平   MYSQL行业经理

            

地址:北京市朝阳区建国门外大街甲12号新华保险大厦5层503室

手机:13911253265

电话:010-65054020-315

传真:010-65054017

邮编:100022

邮件:michael.song@turbolinux.com.cn

网址:www.turbolinux.com.cn

**************************************************************

 ua 回复于:2006-08-21 12:14:39

如果用mysql作为数据库服务器开发了一些应用软件,仅供公司内部使用,如公司内部的一些小系统,应该是不收钱的,对吧?

 michael75 回复于:2006-08-21 14:27:05

这样的话是不收钱,但是你要开放你的应用软件的源码哦@!

 jglxgz 回复于:2006-08-21 15:15:12

引用:原帖由 michael75 于 2006-8-21 10:57 发表

1、如果你是来开发一些应用软件,数据库用MYSQL,你所开发的应用软件销售,则需要付费license.如果你开发的软件不用于销售,但是你必须开放你的源码。如果你不开放源码,那么MYSQL公司就可以起诉你。

2、现在MYS ...

-------------------

非常谢谢你的解答,你为何不在此贴一下一般的价格和服务支持情况了?很多人可能都有这方面的疑惑,他们即使想购买,可能都不知道怎么办。

也就是说mysql是一个基本商业化的软件,除了GPL用途外,但听说针对PHP有一个专门的许可,能否解释一下,谢谢!

 yejr 回复于:2006-08-21 16:06:55

嗯,解释解释

 jglxgz 回复于:2006-08-21 18:26:18

引用:原帖由 michael75 于 2006-8-21 10:57 发表

1、如果你是来开发一些应用软件,数据库用MYSQL,你所开发的应用软件销售,则需要付费license.如果你开发的软件不用于销售,但是你必须开放你的源码。如果你不开放源码,那么MYSQL公司就可以起诉你。

2、现在MYS ...

----------------------

网上找的,不知出处

开放源代码数据库公司MySQL已采取行动,避免MySQL数据库软件和好搭档PHP软件因授权问题硬生生被拆散。

  PHP全名是HypertextPreprocessor(超文件预处理器),昔日称作PersonalHomepage(个人首页),是一种开放源代码软件,其功能是让计算机快速建构特制的网页。Linux操作系统、Apache网页服务器、MySQL和PHP软件经常搭配使用,于是有开放源代码LAMP的称呼,代表这四种软件英文名起首字母的缩写。

  MySQL营销副总裁ZackUrlocker说,该公司上周四(11日)晚间已推出一项授权特例,允许PHP恢复昔日的做法,也就是与MySQL的组件──即所谓链接库(libraries)──绑在一起。

  PHP程序语言工具制造商Zend公司技术部副总裁AndiGutmans说,MySQL的举动“朝正确方向迈出的一步”,有助于解决开放源代码社区内部日益浮出台面的授权问题。

  和Sleepycat、Trolltech这些开放源代码软件公司一样,MySQL也采取一种策略,让自家的软件以双重管道散布,也就是一方面按开放源代码授权方式提供程序供开放源代码软件使用,同时也根据商业授权允许自制程式纳入专属软件之中。这种双重授权的做法──只适用于同一家公司握有全部源代码著作权的情况──据称有让营收加倍的效果。

  以MySQL为例,这家瑞典公司的数据库软件及支持的链接库现在采用公众通用证书(GPL)授权方式。但这些链接库先前是受次级公众通用证书(LGPL)的授权规范。

  两种授权方式之间的主要差异,在于专属软件或其它非GPL软件可能与LGPL软件有密切的关联。

  在去年6月以前,PHP软件一直纳入MySQL的链接库,让PHP程序设计师在构建网站时能够轻松利用数据库。但后来MySQL以某些专属软件开发商不当使用MySQL软件为由,改变了授权方式,让商业软件商必须付费取得MySQL商业授权,却也连带迫使PHP制造商移除MySQL组件,并且在后来推出的新PHP测试版中改搭配另一种数据库软件,称为SQLite,连红帽(RedHat)等公司也被迫必须更新软件。

  这些问题现在必须解决,Urlocker说。因为MySQL源代码全为MySQL公司所有,所以该公司可在自家软件中纳入额外的授权条款,新条款称为“免费和开放源代码的软件授权特例”,“让人们依循GPL以外的其它开放源代码授权许可,把MySQL客户端链接库与其它开放源代码计划搭配使用”。

  此特例条款“令人振奋”,Gutmans说。但他指出,MySQL还必须解决别的争议性问题,比方说另外再实施一个授权条款,允许专属软件链接库与MySQL的链接库并用。

--------------------------------------

这是另外一个:http://www.wzdjg.com/bbs/simple/index.php?t75.html

早前Zend给出了一些站不住叫的说法,早前就意识到是许可证的问题,这不,有人捅出来了:

  一直以来, MySQL公司采用的都是“双重”的授权方式,顾客可以在2种授权方式间任意选择。一种是在GPL (GNU General Public License)授权协议下可以免费使用,另一种是商用授权。但不久之后MySQL就表示有不少私有版权软件公司不恰当的使用了GLP授权许可证,因此对许可证的发放方式进行了修改并相应的更改了库文件的一些代码。

  MySQL公司此举遭到开源社区的强烈抗议之后,程序员们普遍认为这将会破坏MySQL数据库与其它软件包之间原有的紧密联系,世界著名的开放源代码数据库软件公司MySQL终于开始采取措施来弥补这个过失。

  在目前,LAMP(Linux、Apache、MySQL、PHP)Web服务应用构筑环境在业内得到了最广泛的应用。因此任何破坏这个应用架构的行为都将引起业界的反对。MySQL公司也是从善如流,在本周四又公布了一个特别许可证,允许PHP重新集成MySQL数据库的一些组件。

  专门从事PHP编程工具销售的技术公司Zend的副主席Andi Gutmans对记者表示,MySQL公司发布这个特别许可证是在正确的方向上前进了一步,而且残存的一些相关的问题也将在不久的将来得到解决。

  在MySQL公司公布新的许可证政策并对其软件的库文件进行修改之前,PHP程序员们可以很容易的利用MySQL数据库来构建网站。 Gutmans如是说,库文件的改变并不意味着PHP不能与MySQL数据库协同工作,不过确实没有以前那么方便了,现在使用MySQL与使用 Oracle或 PostgreSQL公司的数据库已经没有什么不一样了。

 业内人士则称这件事反映了开源软件在向主流迈进的过程中不可避免的阵痛。如果说此前闹得满城风雨的SCO所谓的版权官司是开源社区的软件共享哲学与私有版权软件世界的摩擦的升级的话,那么这次的MySQL许可证事件则表明在开源社区内部也产生了不和谐的声音。

  据记者最新得到的消息,在稍后时间将会公布的一个最新的PHP版本中,将不会集成MySQL的数据库,而是一个名为SQLite的数据库。开源软件巨头 Red Hat公司的发言人Leigh Day在早些时候也已经表示在将来的Linux系统中将不会有MySQL的位置,但其强调这与许可证问题无关。

  相对于共享软件与私有软件的冲突,开源社区内部的矛盾则要更加的复杂。一些分析家认为在下周于旧金山举行的开源社区商业大会上将会有更多的内部矛盾露出水面,预期届时MySQL公司将会大力吹捧它的新型许可证政策并对PHP进行攻击。

--------------------

怎么解释了,现在用mysql的确存在一些疑问

 michael75 回复于:2006-08-22 13:51:58

一、|关于商业MYSQL的购买价格指南:

Material Description                       License Type                          User Number         List Price         Support

MySQL  PRO Version

(for Linux和windows)                                     Server                                1           21,000.00               12

MySQL  PRO Version

(for   Unix)                                                      Server                                1           42,000.00              12

MY SQL   Classic Version

(for Linux和windows)                                      Server                                1           11,000.00               12

MY SQL  Cluster Version                                     Cpu                                 1           180,000.00               12

备注:1、以上价格为人民币;具体购买报价根据用户需求数量的多少享受不同级别的折扣. 2、服务期限为:12个月。3、版本之间的区别: Classic Version不带事务处理功能,PRO Version带事务处理功能,Cluster Version是做集群用的。

二、|MYSQL的支持与服务:

1、对社区下载的产品不提供任何服务与支持,出现问题可以向社区论坛寻求解决办法,但是响应速度慢,而且无法得到有力的支持,无可靠保障.

2、商业版MySQL服务与支持:

服务方式:远程支持,通过电话、WEB、邮件等方式来提供5*8小时的技术服务与支持;

服务期限:12个月。

服务内容::解决运行中出现的问题、提供解决方案、安装,数据库环境搭建、性能调优、协助应用程序迁移等。

 反映速度快,能够及时解决问题,服务与技术支持有保障.

如用户有特殊需要,还可提供现场技术支持,费用另计!

三、社区版与商业版的区别:

1、 社区版:

可以自由从网上下载,不提供没有任何技术支持服务。而且源码无规律, 出现问题后不容易查找。相当于一个大众测试版本。许多新的未经严格测试的特性都会很快加到社区版中让大家下载测试,类似于“试验田”,可靠性、稳定性不高。

 2、商业版 :

    软件经过严格认证,更加稳定、安全,性能比社区版好;平台优化,支持产权保护;包含企业级软件、服务和支持;出现问题后根据源码编排规律能够及时查找。

 

三、关于MYSQL的licenses使用问题:

1、商业用户购买的licenses后,在12个月的有效期内可以免费升级.超出有效期需要升级服务的,则需要另行购买产品,.(购买产品比购买服务便宜).

2、如果不需要进行安全更新服务升级的话,原有的licenses一直有效,可以继续使用。

***********************************************************

             MYSQL AB中国研发中心

        拓林思(中国)软件有限公司(turboliunx.inc.)

            北京万里开源有限公司       (greatlinux.inc)

                 

             宋桂平   MYSQL行业销售经理

            

地址:北京市朝阳区建国门外大街甲12号新华保险大厦5层503室

手机:13911253265

电话:010-65054020-315

传真:010-65054017

邮编:100022

邮件:michael.song@turbolinux.com.cn

网址:www.turbolinux.com.cn;

**************************************************************

 ua 回复于:2006-08-22 14:09:58

是不是我用ava访问mysql,没有买mysql的授权,java的源代码也要开源?似乎有点不合理吧!

 michael75 回复于:2006-08-22 14:21:16

是的,这就是GPL协议的精髓所在.

你必须要公开,除非你有MYSQL的授权.

 ua 回复于:2006-08-22 15:14:14

:em16:

 ua 回复于:2006-08-22 15:20:12

看来要学习postgresql了,据说那个是bsd协议,没有那么严格

 hobowang 回复于:2006-09-18 15:16:39

请问如果是用JSP,PHP之类的程序开发的WEB程序,用于自己运作,需要付钱吗

 michael75 回复于:2006-09-18 15:47:51

呵呵,只要你不卖给客户,不向客户收钱,可以用免费的.

 mynix 回复于:2006-10-03 11:01:48

“三、社区版与商业版的区别:

1、        社区版:

可以自由从网上下载,不提供没有任何技术支持服务。而且源码无规律, 出现问题后不容易查找。相当于一个大众测试版本。许多新的未经严格测试的特性都会很快加到社区版中让大家下载测试,类似于“试验田”,可靠性、稳定性不高。

2、商业版 :

    软件经过严格认证,更加稳定、安全,性能比社区版好;平台优化,支持产权保护;包含企业级软件、服务和支持;出现问题后根据源码编排规律能够及时查找。



问题:我们能从网上方便得到的是社区版,大多数lamp网站用的也是这个版本吧,稳定吗?可靠吗?本站也是用的这个版本吧?应该没问题吧?这在实际应用中应该是个问题吧。还有没有人关注这个问题?

 lsstarboy 回复于:2006-10-24 21:12:02

唉!没办法!

连PHP都不集成了,那Mysql还有什么吸引人的地方呢?

商业应用还要收钱,那么和其它的商业数据库还有什么区别呢,Mysql有什么优势和甲骨文比?商业应用会用Mysql?还搞什么商业版和社区版!严重的岐视穷人!

难道说要一个人只能在学习时用Mysql,商业应用要用别的数据库?

原来学习Mysql,只为它是开源的,想不到竟然有这样的协议!真让人伤心。

决定明天开始扔掉mysql,改postsql。由此,我也看到Mysql的灰暗的未来。

 lsstarboy 回复于:2006-10-24 21:22:20

顺便说一句,我个人理解,GPL并没有要求使用开源软件的软件开源。

举个例子:在linux中,ping这个工具是开源的,也许有个软件,还是商业软件,用到了这个工具的结果,比如说是测试一个主机是不是在线。那么这个软件也是违反GPL的吗?

同样的问题,为什么我们只是用mysql,而mysql强制我们必须开源?

还有,zend是借助于PHP的,而zend也没有开源!

最好的理由,如果要求使用开源软件的软件也开源,那么在linux之下,就不应该有商业软件!因为linux本身就是在GPL下的开源软件!

所以,我感觉,Mysql没有按照GPL规定去做,而是强加了一些“霸王条款”,强烈鄙视这种行为。

 jiazhengw 回复于:2006-10-24 22:30:46

呀,我不想学mysql了,我原来还以为是真正开源的呢!

 ashchen 回复于:2006-10-24 22:56:20

引用:原帖由 michael75 于 2006-8-22 14:21 发表

是的,这就是GPL协议的精髓所在.

你必须要公开,除非你有MYSQL的授权.

精髓?别吓唬人了

修改基于GPL源码而成的软件对外分发受GPL控制,如果只是调用一下MYSQL的数据库功能,付什么费?

GPL拉的屎是否还受GPL控制?

 ashchen 回复于:2006-10-25 00:05:24

支持MySQL的发展无可厚非,对于有一定经济实力的个人或企业也应该那么做,但是如果通过恐吓来到达目的就为人所不耻,那和敲诈勒索有什么区别?

这篇访谈可以增加对GPL协议的理解

http://www.zdnet.com.cn/developer/code/story/0,3800066897,39376955,00.htm

问:企业需要开放哪些源代码?

答:它们使用的GPL 代码以及衍生产品,没有使用GPL 源代码的部分则无须开放。

问:是什么使你有权追究违反GPL 的企业?

答:它们使用了Linux 内核,而我拥有部分Linux 内核的版权。在起诉时,我是作为个人版权所有者起诉的。

问:你认为GPL 与其它许可协议相比有什么不同之处?

答:这是一个哲学问题。BSD 许可协议允许使用源代码,并进行修改,而无需反馈给开发人员社区,但GPL 则要求将自己的修改反馈回社区。这是二种不同的软件开发哲学,选择哪种许可协议与具体的项目有关。例如,如果开发了一个新标准,并希望它迅速地普及,那么最好的方法是使用BSD 而不是 GPL

如果你通过修改基于mysql社区版的源码来增强或优化某些功能,并且发布了,你就有义务而且必须向mysql开发社区公布你修改了什么,不能把这种修改占为自己所有,否则拥有mysql版权的人有权力起诉你

开发者开发的java或者php程序,本身只是调用mysql的api,而mysql的api是GPL协议下的,如果你没有修改这些api源码而重新发布,mysql有什么权力要求公开java或者php的源码呢?

国内开发者大多没有直接修改mysql源码的能力和习惯,而只是使用基于mysql官方源码生成的可执行码

对于可执行码GPL的规定是第三条:

3.你可以以目标码或可执行形式复制或发布程序(或符合第2款的基于程序的作品),只要你遵守前面的第 l,2款,并同时满足下列3条中的1条。

  a)在通常用作软件交换的媒体上,和目标码一起附有机器可读的完整的源码。这些源码的发布应符合上面第1,2款的要求。或者

  b)在通常用作软件交换的媒体上,和目标码一起,附有给第三方提供相应的机器可读的源码的书面报价。有效期不少于3年,费用不超过实际完成源程序发布的实际成本。源码的发布应符合上面的第1,2款的要求。或者

  c)和目标码一起,附有你收到的发布源码的报价信息。(这一条款只适用于非商业性发布,而且你只收到程序的目标码或可执行代码和按 b)款要求提供的报价)。

GPL协议的目的是当你接收下载了一份GPL软件,你有获取,修改和查看源代码的权力,前提是你要把这种权力告诉你修改后软件的接受者使他们也拥有和你一样的权力,如果你不履行后者,将违反协议

[ 本帖最后由 ashchen 于 2006-10-25 11:01 编辑 ]

 UIRL 回复于:2006-10-25 09:00:31

支持ashchen

 lsstarboy 回复于:2006-10-25 14:25:20

支持ashchen的发言,这才是我的理解的GPL。

GPL只限制了修改,并没有限制使用。

 ashchen 回复于:2006-10-25 16:54:49

目前大家用到的软件可以大概分2种,商业软件和开源软件(遵循GPL,apache,BSD等协议的软件)

开发商业软件的公司只给用户使用权,并以此收费,其他权力保留,原因是开发公司投入了人力财力要收回成本并获利

开源软件大多是社区程序员无私的风险,其中GPL协议的软件保留版权,用户有查看原码和修改的权力;由于是社区开发,并没有明确的受益人,所以这类软件大多不向使用者收取费用,只要你有回报社区的想法或心存感激即可,也有软件作者希望使用者给与一定的资助或仅给他发一封感谢信,具体要看授权使用协议;从GPL文本可以看出GPL的对象是开发者或有开发能力的公司,对于那些想通过修改GPL原码发布并获利的人或公司是允许的,前提是要遵循GPL:即向接受者公开原码并告诉他们:“你有修改这些代码的权力,前提是要...”这是一个递归!

国内有的公司修改GPL软件后占为己有或不公开他的修改或者删除GPL协议也不告知他的客户拥有的权力,这是一种违反法律的行文,如果你想违反GPL协议可以向此软件版权所有者申请其他的许可协议

计算机软件和文字作品一样,通过人的智慧把一些元素组合起来能完成一定功能或表达思想,所有者拥有它的版权 所有权等一切权力,当然还能申请专利,拥有专利权,而一般用户需要得到的权力是使用权或得到服务,高级用户希望得到查看源码或修改的权力。软件所有者通过协议的方式授予用户一定的权力,如果你同意这份协议就达成了共识,这就是合同,各国对合同一般都有相关法律条文

以上为本人对协议的理解,若有不同意见请批评指正。系ashchen原创,查看不收费,引用请保留作者名,引用者无需公开身份住址信仰,银行帐号密码等信息,呵呵

[ 本帖最后由 ashchen 于 2006-10-25 21:17 编辑 ]

 ashchen 回复于:2006-10-25 20:48:02

看了一下MySQL.com商业许可和法律文本,MySQL是双许可协议的,并不只是GPL。

http://www.mysql.com/company/legal/licensing/commercial-license.html

The Commercial License is an agreement with MySQL AB for organizations that do not want to release their application source code. Commercially licensed customers get a commercially supported product with assurances from MySQL. Commercially licensed users are also free from the requirement of making their own application open source.

When your application is not licensed under either the GPL-compatible Free Software License as defined by the Free Software Foundation or approved by OSI, and you intend to or you may distribute MySQL software, you must first obtain a commercial license to the MySQL product.

Typical examples of MySQL distribution include:

Selling software that includes MySQL to customers who install the software on their own machines.

Selling software that requires customers to install MySQL themselves on their own machines.

Building a hardware system that includes MySQL and selling that hardware system to customers for installation at their own locations.

Specifically:

If you include the MySQL server with an application that is not licensed under the GPL or GPL-compatible license, you need a commercial license for the MySQL server.

If you develop and distribute a commercial application and as part of utilizing your application, the end-user must download a copy of MySQL; for each derivative work, you (or, in some cases, your end-user) need a commercial license for the MySQL server and/or MySQL client libraries.

If you include one or more of the MySQL drivers in your non-GPL application (so that your application can run with MySQL), you need a commercial license for the driver(s) in question. The MySQL drivers currently include an ODBC driver, a JDBC driver and the C language library.

GPL users have no direct legal relationship with MySQL AB. The commercial license, on the other hand, is MySQL AB's private license, and provides a direct legal relationship with MySQL AB.

With a commercial non-GPL MySQL server license, one license is required per database server (single installed MySQL binary). There are no restrictions on the number of connections, number of CPUs, memory or disks to that one MySQL database server. The MaxDB server is licensed per CPU or named user.

这份商业许可引发不少争议,大体就是你出售的非GPL软件如果用到MySQL,就需要购买MySQL商业许可。

[ 本帖最后由 ashchen 于 2006-10-25 20:50 编辑 ]

原文链接:http://bbs.chinaunix.net/viewthread.php?tid=814671

转载请注明作者名及原文出处

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

                                                            转帖完毕

Windows和Linux系统下面MySQL的大小写敏感性不同(含转帖)

同样的建表脚本,在windows下所有的表名都成了小写的了,在建表脚本中,本来"goalsgroup"是"goalsGroup",可是用脚本建表后就全成了小写了;在linux下用这个脚本建表则保持了表名的大小写状态。另外,列名在windows下和linux都能够区分大小写。

我的建表脚本如下:


use learndiarydb;

                                                                               

DROP TABLE IF EXISTS `goalsGroup`;

CREATE TABLE `goalsGroup` (

  `groupID` tinyint(2) unsigned NOT NULL auto_increment,

  `groupName` varchar(60) NOT NULL,

  `writeDate` datetime default NULL,

  `lastUpdate` datetime default NULL,

  `goalsNum` tinyint(2) unsigned NOT NULL default '0',

  `groupPriority` tinyint(1) unsigned NOT NULL default '0',

  PRIMARY KEY  (`groupID`)

) TYPE=InnoDB;

在windows下的表名和列名:

mysql> show tables;

+------------------------+

| Tables_in_learndiarydb |

+------------------------+

| article                |

| emailresetpsd          |

| forbid                 |

| goalsgroup             |

| user                   |

| usergoal               |

| usermailgoal           |

+------------------------+

7 rows in set (0.09 sec)

 

mysql>

mysql> describe goalsgroup;

+---------------+---------------------+------+-----+---------+----------------+

| Field         | Type                | Null | Key | Default | Extra          |

+---------------+---------------------+------+-----+---------+----------------+

| groupID       | tinyint(2) unsigned |      | PRI | NULL    | auto_increment |

| groupName     | varchar(60)         |      |     |         |                |

| writeDate     | datetime            | YES  |     | NULL    |                |

| lastUpdate    | datetime            | YES  |     | NULL    |                |

| goalsNum      | tinyint(2) unsigned |      |     | 0       |                |

| groupPriority | tinyint(1) unsigned |      |     | 0       |                |

+---------------+---------------------+------+-----+---------+----------------+

6 rows in set (0.09 sec)

 

mysql>

********************************************************************

在linux下的表名和列名:

mysql> show tables;

+------------------------+

| Tables_in_learndiarydb |

+------------------------+

| article                |

| emailresetpsd          |

| forbid                 |

| goalsGroup             |

| user                   |

| usergoal               |

| usermailgoal           |

+------------------------+

7 rows in set (0.01 sec)

 

mysql>

mysql> describe goalsGroup;

+---------------+---------------------+------+-----+---------+----------------+

| Field         | Type                | Null | Key | Default | Extra          |

+---------------+---------------------+------+-----+---------+----------------+

| groupID       | tinyint(2) unsigned |      | PRI | NULL    | auto_increment |

| groupName     | varchar(60)         |      |     |         |                |

| writeDate     | datetime            | YES  |     | NULL    |                |

| lastUpdate    | datetime            | YES  |     | NULL    |                |

| goalsNum      | tinyint(2) unsigned |      |     | 0       |                |

| groupPriority | tinyint(1) unsigned |      |     | 0       |                |

+---------------+---------------------+------+-----+---------+----------------+

6 rows in set (0.00 sec)

 

mysql>

******************************************************************

下面是网上一篇相同问题的blog,转自:http://www.zeali.net/entry/364

MySQL的大小写敏感性

zeal 2006-04-27 17:43 于 开发/理论 , 679 字 |  + 0 - 1   English

Made In Zeal 转载请保留原始链接:http://www.zeali.net/entry/364

关键字: mysql,lower_case_table_name,大小写

在 MySQL 中,数据库和表对就于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。

奇怪的是列名与列的别名在所有的情况下均是忽略大小写的,而表的别名又是区分大小写的。

要避免这个问题,你最好在定义数据库命名规则的时候就全部采用小写字母加下划线的组合,而不使用任何的大写字母。

或者也可以强制以 -O lower_case_table_names=1 参数启动 mysqld(如果使用 --defaults-file=...\my.cnf 参数来读取指定的配置文件启动 mysqld 的话,你需要在配置文件的 [mysqld] 区段下增加一行 lower_case_table_names=1)。这样MySQL 将在创建与查找时将所有的表名自动转换为小写字符(这个选项缺省地在 Windows 中为 1 ,在 Unix 中为 0。从 MySQL 4.0.2 开始,这个选项同样适用于数据库名)。

当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。

换句话说,如果你希望在数据库里面创建表的时候保留大小写字符状态,则应该把这个参数置0: lower_case_table_names=1 。否则的话你会发现同样的sqldump脚本在不同的操作系统下最终导入的结果不一样(在Windows下所有的大写字符都变成小写了)。

mysql中的max_connections和max_user_connections

max_connections是指整个mysql服务器的最大连接数;

max_user_connections是指每个数据库用户的最大连接数,比如:虚拟主机可以用这个参数控制每个虚拟主机用户的数据库最大连接数;

****************************************************************************

设置最大连接数的方法:

转自:fanqiang.chinaunix.net/a2/b1/20010705/140800801.html

加大mysql的最大连接数

本文出自: 作者: (2001-07-05 14:08:00)

mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够

的,可以把它适当调大,

whereis safe_mysqld

找到safe_mysqld的位置,然后编辑它,找到mysqld启动的那两行,在后面加上参数

-O max_connections=1000

例如

--- safe_mysqld.orig Mon Sep 25 09:34:01 2000

+++ safe_mysqld Sun Sep 24 16:56:46 2000

@@ -109,10 +109,10 @@

if test "$#" -eq 0

then

nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \

- --skip-locking >> $err_log 2>&1

+ --skip-locking -O max_connections=1000 >> $err_log 2>&1

else

nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \

- --skip-locking "$@" >> $err_log 2>&1

+ --skip-locking "$@" -O max_connections=1000 >> $err_log 2>&1

fi

if test ! -f $pid_file # This is removed if normal shutdown

then

然后关闭mysql重启它,用

/mysqladmin所在路径/mysqladmin -uroot -p variables

输入root数据库账号的密码后可看到

| max_connections | 1000 |

即新改动已经生效。

*************************************************************************

另,从网上查到一篇介绍mysql参数说明的帖子很好,转帖在此:

转自:http://kb.discuz.net/index.php?title=MySQL%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E

MySQL参数说明

Wikipedia,自由的百科全书

原文地址:http://sunsite.mff.cuni.cz/MIRRORS/ftp.mysql.com/doc/en/SHOW_VARIABLES.html

1. back_log

指定MySQL可能的连接数量。当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程。

back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。

当观察MySQL进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大 back_log 的值。back_log默认值为50。

2. basedir

MySQL主程序所在路径,即:--basedir参数的值。

3. bdb_cache_size

分配给BDB类型数据表的缓存索引和行排列的缓冲区大小,如果不使用DBD类型数据表,则应该在启动MySQL时加载 --skip-bdb 参数以避免内存浪费。

4.bdb_log_buffer_size

分配给BDB类型数据表的缓存索引和行排列的缓冲区大小,如果不使用DBD类型数据表,则应该将该参数值设置为0,或者在启动MySQL时加载 --skip-bdb 参数以避免内存浪费。

5.bdb_home

参见 --bdb-home 选项。

6. bdb_max_lock

指定最大的锁表进程数量(默认为10000),如果使用BDB类型数据表,则可以使用该参数。如果在执行大型事物处理或者查询时发现 bdb: Lock table is out of available locks or Got error 12 from ... 错误,则应该加大该参数值。

7. bdb_logdir

指定使用BDB类型数据表提供服务时的日志存放位置。即为 --bdb-logdir 的值。

8. bdb_shared_data

如果使用 --bdb-shared-data 选项则该参数值为On。

9. bdb_tmpdir

BDB类型数据表的临时文件目录。即为 --bdb-tmpdir 的值。

10. binlog_cache_size

为binary log指定在查询请求处理过程中SQL 查询语句使用的缓存大小。如果频繁应用于大量、复杂的SQL表达式处理,则应该加大该参数值以获得性能提升。

11. bulk_insert_buffer_size

指定 MyISAM 类型数据表表使用特殊的树形结构的缓存。使用整块方式(bulk)能够加快插入操作( INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., 和 LOAD DATA INFILE) 的速度和效率。该参数限制每个线程使用的树形结构缓存大小,如果设置为0则禁用该加速缓存功能。注意:该参数对应的缓存操作只能用户向非空数据表中执行插入操作!默认值为 8MB。

12. character_set

MySQL的默认字符集。

13. character_sets

MySQL所能提供支持的字符集。

14. concurrent_inserts

如果开启该参数,MySQL则允许在执行 SELECT 操作的同时进行 INSERT 操作。如果要关闭该参数,可以在启动 mysqld 时加载 --safe 选项,或者使用 --skip-new 选项。默认为On。

15. connect_timeout

指定MySQL服务等待应答一个连接报文的最大秒数,超出该时间,MySQL向客户端返回 bad handshake。

16. datadir

指定数据库路径。即为 --datadir 选项的值。

17. delay_key_write

该参数只对 MyISAM 类型数据表有效。有如下的取值种类:

off: 如果在建表语句中使用 CREATE TABLE ... DELAYED_KEY_WRITES,则全部忽略

DELAYED_KEY_WRITES;

on: 如果在建表语句中使用 CREATE TABLE ... DELAYED_KEY_WRITES,则使用该选项(默认);

all: 所有打开的数据表都将按照 DELAYED_KEY_WRITES 处理。

如果 DELAYED_KEY_WRITES 开启,对于已经打开的数据表而言,在每次索引更新时都不刷新带有

DELAYED_KEY_WRITES 选项的数据表的key buffer,除非该数据表关闭。该参数会大幅提升写入键值的速

度。如果使用该参数,则应该检查所有数据表:myisamchk --fast --force。

18.delayed_insert_limit

在插入delayed_insert_limit行后,INSERT DELAYED处理模块将检查是否有未执行的SELECT语句。如果有,在继续处理前执行允许这些语句。

19. delayed_insert_timeout

一个INSERT DELAYED线程应该在终止之前等待INSERT语句的时间。

20. delayed_queue_size

为处理INSERT DELAYED分配的队列大小(以行为单位)。如果排队满了,任何进行INSERT DELAYED的客户必须等待队列空间释放后才能继续。

21. flush

在启动MySQL时加载 --flush 参数打开该功能。

22. flush_time

如果该设置为非0值,那么每flush_time秒,所有打开的表将被关,以释放资源和sync到磁盘。注意:只建议在使用 Windows9x/Me 或者当前操作系统资源严重不足时才使用该参数!

23. ft_boolean_syntax

搜索引擎维护员希望更改允许用于逻辑全文搜索的操作符。这些则由变量 ft_boolean_syntax 控制。

24. ft_min_word_len

指定被索引的关键词的最小长度。注意:在更改该参数值后,索引必须重建!

25. ft_max_word_len

指定被索引的关键词的最大长度。注意:在更改该参数值后,索引必须重建!

26. ft_max_word_len_for_sort

指定在使用REPAIR, CREATE INDEX, or ALTER TABLE等方法进行快速全文索引重建过程中所能使用的关键词的最大长度。超出该长度限制的关键词将使用低速方式进行插入。加大该参数的值,MySQL将会建立更大的临时文件(这会减轻CPU负载,但效率将取决于磁盘I/O效率),并且在一个排序取内存放更少的键值。

27. ft_stopword_file

从 ft_stopword_file 变量指定的文件中读取列表。在修改了 stopword 列表后,必须重建 FULLTEXT 索引。

28. have_innodb

YES: MySQL支持InnoDB类型数据表; DISABLE: 使用 --skip-innodb 关闭对InnoDB类型数据表的支持。

29. have_bdb

YES: MySQL支持伯克利类型数据表; DISABLE: 使用 --skip-bdb 关闭对伯克利类型数据表的支持。

30. have_raid

YES: 使MySQL支持RAID功能。

31. have_openssl

YES: 使MySQL支持SSL加密协议。

32. init_file

指定一个包含SQL查询语句的文件,该文件在MySQL启动时将被加载,文件中的SQL语句也会被执行。

33. interactive_timeout

服务器在关上它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对mysql_real_connect()使用CLIENT_INTERACTIVE选项的客户。也可见wait_timeout。

34. join_buffer_size

用于全部联合(join)的缓冲区大小(不是用索引的联结)。缓冲区对2个表间的每个全部联结分配一次缓冲区,当增加索引不可能时,增加该值可得到一个更快的全部联结。(通常得到快速联结的最佳方法是增加索引。)

35. key_buffer_size

用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始变慢慢。必须为OS文件系统缓存留下一些空间。为了在写入多个行时得到更多的速度。

36. language

用户输出报错信息的语言。

37. large_file_support

开启大文件支持。

38. locked_in_memory

使用 --memlock 将mysqld锁定在内存中。

39. log

记录所有查询操作。

40. log_update

开启update log。

41. log_bin

开启 binary log。

42. log_slave_updates

如果使用链状同步或者多台Slave之间进行同步则需要开启此参数。

43. long_query_time

如果一个查询所用时间超过该参数值,则该查询操作将被记录在Slow_queries中。

44. lower_case_table_names

1: MySQL总使用小写字母进行SQL操作;

0: 关闭该功能。

注意:如果使用该参数,则应该在启用前将所有数据表转换为小写字母。

45. max_allowed_packet

一个查询语句包的最大尺寸。消息缓冲区被初始化为net_buffer_length字节,但是可在需要时增加到max_allowed_packet个字节。该值太小则会在处理大包时产生错误。如果使用大的BLOB列,必须增加该值。

46. net_buffer_length

通信缓冲区在查询期间被重置到该大小。通常不要改变该参数值,但是如果内存不足,可以将它设置为查询期望的大小。(即,客户发出的SQL语句期望的长度。如果语句超过这个长度,缓冲区自动地被扩大,直到max_allowed_packet个字节。)

47. max_binlog_cache_size

指定binary log缓存的最大容量,如果设置的过小,则在执行复杂查询语句时MySQL会出错。

48. max_binlog_size

指定binary log文件的最大容量,默认为1GB。

49. max_connections

允许同时连接MySQL服务器的客户数量。如果超出该值,MySQL会返回Too many connections错误,但通常情况下,MySQL能够自行解决。

50. max_connect_errors

对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST;。

51. max_delayed_threads

不要启动多于的这个数字的线程来处理INSERT DELAYED语句。如果你试图在所有INSERT DELAYED线程在用后向一张新表插入数据,行将被插入,就像DELAYED属性没被指定那样。

52. max_heap_table_size

内存表所能使用的最大容量。

53. max_join_size

如果要查询多于max_join_size个记录的联合将返回一个错误。如果要执行没有一个WHERE的语句并且耗费大量时间,且返回上百万行的联结,则需要加大该参数值。

54. max_sort_length

在排序BLOB或TEXT值时使用的字节数(每个值仅头max_sort_length个字节被使用;其余的被忽略)。

55. max_user_connections

指定来自同一用户的最多连接数。设置为0则代表不限制。

56. max_tmp_tables

(该参数目前还没有作用)。一个客户能同时保持打开的临时表的最大数量。

57. max_write_lock_count

当出现max_write_lock_count个写入锁定数量后,开始允许一些被锁定的读操作开始执行。避免写入锁定过多,读取操作处于长时间等待状态。

58. myisam_recover_options

即为 --myisam-recover 选项的值。

(未完成,不断增加中……)

Mysql数据库基本操作概要(转)

虽然一直用的是mysql,可是对它的掌握并不很深,经常为一个基础的知识点上网查找。下面这篇帖子很全面和适用,收藏在此。感谢原作者。

转自:http://www.matrix.org.cn/blog/wenic705/archives/001511.html

Mysql数据库学习

写程序经常用到,写个接连就完事了,没去好好动过Mysql数据库。

今天有空仔细学习Mysql,做个笔记,自己以后看

我是在linix下操作数据库的,window下也差不多,不过在windows有人写好数据库管理软件,下一个窗口化操作很方便。

连接数据库:命令: mysql [host] –u [user] –p 提示密码输入后输入正确密码,OK,登陆进来了。

我事先不清楚这个数据库里有些什么,只好一个一个命令敲了。

查看数据库:命令: show databases 列出数据库服务器上所有数据库;

使用数据库:命令: use [database name] 切换到需要操作的数据库;

查看表: 命令: show tables 列出该数据库的所有表;

查看表结构:命令:describe [table name] 查看表结构;

表结构清楚了,那就可以开始进行操作了。

下面是基础资料:

  (一)字段类型

  1.INT[(M)]

  正常大小整数类型

  2.DOUBLE[(M,D)] [ZEROFILL]

  正常大小(双精密)浮点数字类型

  3.DATE

  日期类型。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给  DATE列

  4.CHAR(M)

  定长字符串类型,当存储时,总是是用空格填满右边到指定的长度

  5.BLOB TEXT   BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。

  6.VARCHAR  变长字符串类型,最常用的类型。

  (二)基本操作

  1:显示数据库

   mysql>SHOW DATABASES;

  2:当前选择的数据库,

   mysql> SELECT DATABASE();

   +------------+

   | DATABASE() |

   +------------+

   | test |

   +------------+

  3.当前数据库包含的表信息:

   mysql> SHOW TABLES;

   +---------------------+

   | Tables in test |

   +---------------------+

   | mytable1 |

   | mytable2 |

   +---------------------+

  4.获取表结构

   mysql> desc mytable1;

   +---------+-------------+------+-----+---------+-------+

   | Field | Type | Null | Key | Default | Extra |

   +---------+-------------+------+-----+---------+-------+

   | s1 | varchar(20) | YES | | NULL | |

   +---------+-------------+------+-----+---------+-------+

  5.创建表

  表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联。创建表的基本语法如下:

   create table table_name

   (column_name datatype {identity |null|not null},

   …)

  其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,参数datatype是一个标准的SQL类型或由用户数  据库提供的类型。用户要使用non-null从句为各字段输入数据。

  create table还有一些其他选项,如创建临时表和使用select子句从其他的表中读取某些字段组成新表等。还有,在创建表是可用PRIMARY   KEY、KEY、INDEX等标识符设定某些字段为主键或索引等。书写上要注意:在一对圆括号里的列出完整的字段清单。字段名间用逗号隔开  。字段名间的逗号后要加一个空格。最后一个字段名后不用逗号。所有的SQL陈述都以分号";"结束。

  例:

   mysql>CREATE TABLE guest (name varchar(10),sex varchar(2),age int(3),career varchar(10));

  6.创建索引

  索引用于对数据库的查询。一般数据库建有多种索引方案,每种方案都精于某一特定的查询类。索引可以加速对数据库的查询过程。创建  索引的基本语法如下:

   create index index_name

   on table_name (col_name[(length)],... )

  例:

   mysql> CREATE INDEX number ON guest (number(10));

  7.执行查询

  查询是使用最多的SQL命令。查询数据库需要凭借结构、索引和字段类型等因素。大多数数据库含有一个优化器(optimizer),把用户的查  询语句转换成可选的形式,以提高查询效率。

  值得注意的是MySQL不支持SQL92标准的嵌套的where子句,即它只支持一个where子句。其基本语法如下:

   SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]

   [DISTINCT | DISTINCTROW | ALL]

   select_expression,...

   [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]

   [FROM table_references

   [WHERE where_definition]

   [GROUP BY col_name,...]

   [HAVING where_definition]

   [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]

   [LIMIT [offset,] rows] //分页

   [PROCEDURE procedure_name] ]

  其中where从句是定义选择标准的地方,where_definition可以有不同的格式,但都遵循下面的形式:

  字段名操作表达式

  字段名操作字段名

  在第一种形式下,标准把字段的值与表达式进行比较;在第二种形式下,把两个字段的值进行比较。根据所比较的数据类型,       search_condition中的操作可能选以下几种:

   =检查是否相等

   !=检查是否不等

   > (或>=)检查左边值是否大于(或大于等于)右边值

   < (或<=)检查左边值是否小于(或小于等于)右边值

   [not] between检查左边值是否在某个范围内

   [not] in检查左边是否某个特定集的成员

   [not] like检查左边是否为右边的子串

   is [not] null检查左边是否为空值

  在这里,可以用通配符_代表任何一个字符,%代表任何字符串。使用关键字、和可以生成复杂的词,它们运行检查时使用  布尔表达式的多重标准集。

  例:

   mysql> select t1.name, t2.salary from employee AS t1, info AS t2swherest1.name = t2.name;

   mysql> select college, region, seed from tournament

   ORDER BY region, seed;

   mysql> select col_name from tbl_nameswherescol_name > 0;

  8.改变表结构

  在数据库的使用过程中,有时需要改变它的表结构,包括改变字段名,甚至改变不同数据库字段间的关系。可以实现上述改变的命令是   alter,其基本语法如下:

  alter table table_name alter_spec [, alter_spec ...]

  例:

   mysql> alter table dbname add column userid int(11) not null primary key auto_increment;

  这样,就在表dbname中添加了一个字段userid,类型为int(11)。

  9.修改表中数据

  在使用数据库过程中,往往要修改其表中的数据,比如往表中添加新数据,删除表中原有数据,或对表中原有数据进行更改。它们的基本  语法如下:

  数据添加:

   insert [into] table_name [(column(s))]

   values (expression(s))

  例:

   mysql>insert into mydatabase values('php','mysql','asp','sqlserver','jsp','oracle');

10.表的数据更新

  (1)一次修改一个字段,再次注意语法。文本需要加引号但数字不要。

   mysql>update table01 set field03='new info' where field01=‘1’;

   Query OK, 1 row affected (0.00 sec)

  (2)一次改变多个字段,记住在每一个更新的字段间用逗号隔开。

   mysql>update table01 set field04=19991022, field05=062218 where field01=1;

   Query OK, 1 row affected (0.00 sec)

  (3)一次更新多个数据

   mysql>update table01 set field05=152901 where field04>19990101;

   Query OK, 3 rows affected (0.00 sec)

  11.删除数据

   mysql>delete from table01 where field01=3;

   Query OK, 1 row affected (0.00 sec)

  12.导入数据库表

   (1)创建.sql文件

   (2)先产生一个库如auction.c:mysql in>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。

   (3)导入auction.sql文件

    c:mysql in>mysql -u root -p auction < auction.sql。

   通过以上操作,就可以创建了一个数据库auction以及其中的一个表auction。

  13.mysql数据库的授权

   mysql>grant select,insert,delete,create,drop

   on *.* (或test.*/user.*/..)

   to用户名@localhost

   identified by '密码';

  如:新建一个用户帐号以便可以访问数据库,需要进行如下操作:

   mysql> grant usage

   -> ON test.*

   -> TO testuser@localhost;

   Query OK, 0 rows affected (0.15 sec)

  此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test数据库。下一步,我们必须指定     testuser这个用户可以执行哪些操作:

   mysql> GRANT select, insert, delete,update

   -> ON test.*

   -> TO testuser@localhost;

   Query OK, 0 rows affected (0.00 sec)

  此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户  程序:

   mysql> exit

   Bye

  14.授权MySQL用户密码

  MySQL数据库的默认用户名为"root"(MS SQL Server的sa相似),密码默认为空。在DOS提示符(注意,不是mysql提示符)下输入

  c:mysql in>"mysqladmin -u root -p password newpassword

  回车后会提示你输入原来的密码,由于原来密码为空,直接回车,root用户的密码便改为"newpassword"了。

为了找出包含正好5个字符的名字,使用“_”模式字符: //这个还是比较有意思的

mysql> SELECT * FROM pet WHERE name LIKE "_____";

12、备份和恢复

备份数据库staffer

c:mysqlbinmysqldump -uroot -proot staffer>e:staffer.sql

得到的staffer.sql是一个sql脚本,不包括建库的语句,所以你需要手工

创建数据库才可以导入

恢复数据库staffer,需要创建一个空库staffer

c:mysqlbinmysql -uroot -proot staffer

如果不希望后来手工创建staffer,可以

c:mysqlbinmysqldump -uroot -proot --databases staffer>e:staffer.sql

mysql -uroot -proot >e:staffer.sql

但这样的话系统种就不能存在staffer库,且无法导入其他名字的数据库, 当然你可以手工修改staffer.sql文件

13、从文本向数据库导入数据

1)使用工具c:mysqlbinmysqlimport

这个工具的作用是将文件导入到和去掉文件扩展名名字相同的表里,如

staffer.txt,staffer都是导入到staffer表中

常用选项及功能如下

-d or --delete 新数据导入数据表中之前删除数据数据表中的所有信息

-f or --force 不管是否遇到错误,mysqlimport将强制继续插入数据

-i or --ignore mysqlimport跳过或者忽略那些有相同唯一

关键字的行, 导入文件中的数据将被忽略。

-l or -lock-tables 数据被插入之前锁住表,这样就防止了,

你在更新数据库时,用户的查询和更新受到影响。

-r or -replace 这个选项与-i选项的作用相反;此选项将替代表中有相同唯一关键字的记录。

--fields-enclosed- by= char

指定文本文件中数据的记录时以什么括起的, 很多情况下 数据以双引号括起。 默认的情况下数据是没有被字符括起的。

--fields-terminated- by=char

指定各个数据的值之间的分隔符,在句号分隔的文件中, 分隔符是句号。您可以用此选项指定数据之间的分隔符。

默认的分隔符是跳格符(Tab)

--lines-terminated- by=str

此选项指定文本文件中行与行之间数据的分隔字符串或者字符。 默认的情况下mysqlimport以newline为行分隔符。

您可以选择用一个字符串来替代一个单个的字符:

一个新行或者一个回车。

mysqlimport命令常用的选项还有-v 显示版本(version),

-p 提示输入密码(password)等。

这个工具有个问题,无法忽略某些列,这样对我们的数据导入有很大的麻烦,虽然可以手工设置这个字段,但会出现莫名其妙的结果,我们做一个简单的示例

我们定义如下的depart_no.txt,保存在e盘,间隔为制表符t

10 10

11 11

12 24

执行如下命令

c:mysqlbinmysqlimport -uroot -proot staffer e:depart_pos.txt

在这里没有使用列的包围符号,分割采用默认的t,因为采用别的符号会有问题,不知道是不是windows的原因

2)Load Data INFILE file_name into table_name(column1_name,column2_name)

这个命令在mysql>提示符下使用,优点是可以指定列导入,示例如下

c:mysqlbinmysql -uroot -proot staffer

mysql>load data infile "e:/depart_no.txt" into depart_no(department_id,position_id);

这两个工具在Windows下使用都有问题,不知道是Windows的原因还是中文的问题, 而且不指定的列它产生了空值,这显然不是我们想要的,所以谨慎使用这些工具

上面的资料从网上收集起来的,对于mysql的管理比较详细了。

mysql索引表出错的处理方法(转帖)

昨天,把原来的mysql数据库挂到linux下出现了不能打开“*.MRI”文件的错误,下面是一个解决的方法。

转自:http://blog.9zi.com/post/1/531

迁移到mysql4.13,居然隔三差五的出现索引文件错

吓死我了,还没来得及做每日自动备份。

这几天差点白写。

还好mysql是多库方式,以表为文件单位存储。

ERROR 1016 (HY000): Can't open file: 'plog_articles.MYI' (errno: 145)

一看是index文件,应该可以修复。

于是乎google,就找到了答案

mysql -u dbuname -h dbhost -p dbname;

repair table plog_articles;

也可以命令行修复 myisamchk -r plog_articles

在mysql中避免保留字的影响

如果在mysql中的sql语句中使用了mysql的保留字,就会报错,例如下面:


mysql> CREATE TABLE group (

    -> groupID tinyint(2) unsigned NOT NULL auto_increment,

    -> groupName varchar(60) default NULL,

    -> groupPriority tinyint(1) unsigned default '0',

    -> PRIMARY KEY  (groupID)

    -> ) TYPE=InnoDB;

ERROR 1064: You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'group (

groupID tinyint(2) unsigned NOT NULL auto_increment,

gr

mysql>

上面就因为使用了保留字“group”出现错误。

只要把字段和表名用"`"引起来,就可以避免保留字的影响。这也是写规范的mysql语句的要求之一;

但是,为了避免不必要的麻烦,还是尽量不要在其中使用mysql的保留字。