mysql - 私房课
当前位置:首页 » mysql

新鲜出炉LNMP安装包,快来下载呀 On 编程语言  @2013-10-18

DebianLNMP是一个用Linux Shell编写的可以为Debian/Ubuntu VPS(VDS)或独立主机安装LNMP(Nginx、MySQL、PHP、phpMyAdmin)生产环境的Shell程序。
DebianLNMP 是以 Debian + Linux + Nginx + MySQL + PHP 的安装顺序命名;
DebianLNMP一键安装包是很不错的安装脚本,用在低配置VPS上最合适不过啦,安装方便快捷,轻轻松松全自动安装LNMP(Nginx、MySQL、PHP、phpMyAdmin)可直接用再生产环境。

1
2
root@DebianLNMP-Jimmyli:~# wget http://sourceforge.net/projects/debian-lnmp/files/DebianLNMP/DebianLNMP-Jimmyli.sh
root@DebianLNMP-Jimmyli:~# sh DebianLNMP-Jimmyli.sh

下载地址:
http://sourceforge.net/projects/debian-lnmp/files/DebianLNMP/

打签» , , , , , ,   评论» 新鲜出炉LNMP安装包,快来下载呀已关闭评论

MYSQL中无重复插入更新的三种方法 On 编程语言  @2013-05-26

第一种解决方案:
如果你指定了ON DUPLICATE KEY UPDATE命令语句,那么在唯一索引或者主索引的作用下将不插入与数据库记录重复的内容,但同时会更新数据库中的旧记录。例如,字段a被声明为唯一索引并且里面只包含有值为1的记录,以下两个语句会达到同样的效果:

一、INSERT INTO table (a,b,c) VALUES (1,2,3)
     ON DUPLICATE KEY UPDATE c=c+1;

二、UPDATE table SET c=c+1 WHERE a=1;

受影响的是a=1的行,当插入时c的值加1。
如果字段b也是唯一的话,这个插入语句将和以下语句的效果一样:
UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
如果a=1 OR b=2匹配了不止一行,也只是第一行被更新。一般地,如果表中有多个唯一索引的话,你应该避免在使用用ON DUPLICATE KEY子句。
你可以在插入更新语句 INSERT … UPDATE 中使用 VALUES(字段名) 函数去关联某一行记录。也就是说, VALUES(字段名) 可以用在UPDATE语句中去更新某字段的值而不会出现重复键。这个函数在多行插入中尤其有用。但是函数 VALUES() 仅当用在 INSERT … UPDATE 语句中才有意义,否则会返回NULL。例如:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

这个语句和下面两个是同效果的:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=3;
INSERT INTO table (a,b,c) VALUES (4,5,6)
  ON DUPLICATE KEY UPDATE c=9;

如果表中包含有一个自动递增字段AUTO_INCREMENT,并用 INSERT … UPDATE 插入一行,函数 LAST_INSERT_ID()会返回AUTO_INCREMENT的值,如果这个语句更新某一行, LAST_INSERT_ID() 就没有意义了。但是,你可以通过用 LAST_INSERT_ID(expr)使它变得有意义,假如id字段是自动递增栏的话,使 LAST_INSERT_ID() 对更新语句有意义的方法如下:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;

如果你使用 ON DUPLICATE KEY UPDATE 语句的话,延迟执行选项 DELAYED 将被忽略。
第二种解决方案
这种解决方案比较通用,不过个人感觉性能不是很好(没有测试)
示例一:插入多条记录
假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:

INSERT INTO clients 
(client_id, client_name, client_type) 
SELECT supplier_id, supplier_name, 'advertising' 
FROM suppliers 
WHERE not exists (select * from clients 
where clients.client_id = suppliers.supplier_id); 

示例二:插入单条记录

INSERT INTO clients 
(client_id, client_name, client_type) 
SELECT 10345, 'IBM', 'advertising' 
FROM dual 
WHERE not exists (select * from clients 
where clients.client_id = 10345); 

使用 dual 做表名可以让你在 select 语句后面直接跟上要插入字段的值,即使这些值还不存在当前表中。
第三种解决方案
使用REPLACE语句
  我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的错误。当然,我们可能想用新记录的值来覆盖原来的记录值。如果使用传统的做法,必须先使用DELETE语句删除原先的记录,然后再使用INSERT插入新的记录。而在MySQL中为我们提供了一种新的解决方案,这就是REPLACE语句。使用REPLACE插入一条记录时,如果不重复,REPLACE就和INSERT的功能一样,如果有重复记录,REPLACE就使用新记录的值来替换原来的记录值。
  使用REPLACE的最大好处就是可以将DELETE和INSERT合二为一,形成一个原子操作。这样就可以不必考虑在同时使用DELETE和INSERT时添加事务等复杂操作了。

  在使用REPLACE时,表中必须有唯一索引,而且这个索引所在的字段不能允许空值,否则REPLACE就和INSERT完全一样的。

  在执行REPLACE后,系统返回了所影响的行数,如果返回1,说明在表中并没有重复的记录,如果返回2,说明有一条重复记录,系统自动先调用了DELETE删除这条记录,然后再记录用INSERT来插入这条记录。如果返回的值大于2,那说明有多个唯一索引,有多条记录被删除和插入。

  REPLACE的语法和INSERT非常的相似,如下面的REPLACE语句是插入或更新一条记录。

  REPLACE INTO users (id,name,age) VALUES(123, '赵本山', 50); 

  插入多条记录:

  REPLACE INTO users(id, name, age) 
  VALUES(123, '赵本山', 50), (134,'Mary',15); 

  REPLACE也可以使用SET语句

  REPLACE INTO users SET id = 123, name = '赵本山', age = 50; 

  上面曾提到REPLACE可能影响3条以上的记录,这是因为在表中有超过一个的唯一索引。在这种情况下,REPLACE将考虑每一个唯一索引,并对每一个索引对应的重复记录都删除,然后插入这条新记录。假设有一个table1表,有3个字段a, b, c。它们都有一个唯一索引。

  CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE); 

  假设table1中已经有了3条记录

  a b c 
  1 1 1 
  2 2 2 
  3 3 3 

  下面我们使用REPLACE语句向table1中插入一条记录。

  REPLACE INTO table1(a, b, c) VALUES(1,2,3); 

  返回的结果如下

  Query OK, 4 rows affected (0.00 sec) 

  在table1中的记录如下

  a b c 
  1 2 3 

我们可以看到,REPLACE将原先的3条记录都删除了,然后将(1, 2, 3)插入。

打签» ,   评论» MYSQL中无重复插入更新的三种方法已关闭评论

在命令行中将mysql的查询结果导出到文本文件中 On 编程语言  @2012-08-25

有时候我们在mysql命令行中执行一些查询语句总希望将查询到的结果输出到一个文本中方便以后查看或对比多次的查询结果。在这里给大家介绍一个简单的语句。

SELECT * INTO OUTFILE '/home/mark/Orders.txt' 
FROM Orders 
WHERE Order_Date >= '2000-01-01'

如果我样需要对输出的结果字段间添加一个分隔符可以使用如下语句

SELECT * INTO OUTFILE '/home/mark/Orders.txt' 
FIELDS 
TERMINATED BY ',' 
FROM Orders 
WHERE Order_Date >= '2000-01-01'
打签» ,   评论» 在命令行中将mysql的查询结果导出到文本文件中已关闭评论

当忘记mysql的root帐号密码时怎么办? On 服务器相关  @2012-05-28

首先停止 MySQL 服务 “/etc/init.d/mysql stop”
启动 MySQL 服务并屏蔽用户权限检查,可通过如下命令:

mysqld_safe --skip-grant-tables 

记住,当你使用这个参数启动服务时,任何人无需密码即可连接到 MySQL 并拥有最高权限,因此你需要确定你在做这个的过程中,别让其他人访问数据库。可以使用如下命令来拒绝网络连接:

mysqld_safe --skip-grant-tables --skip-networking

这样就只能通过本机连接到 MySQL 服务器
然后使用 mysql -u anything 命令来连接到 MySQL
执行 SQL 语句:

update mysql.user set Password=PASSWORD(‘new-password’) WHERE User=’root’

用 mysqladmin -u qualquer_coisa shutdown 命令停止 MySQL 服务,然后以正常模式启动 MySQL 即可

来源:http://www.oschina.net/question/54100_55378

打签»   评论» 当忘记mysql的root帐号密码时怎么办?已关闭评论

mysql中从子类ID查询所有父类(做无限分类经常用到) On 编程语言  @2012-05-26

先来看数据表的结构如下:

id  name    parent_id   
---------------------------   
1   Home        0   
2   About       1   
3   Contact     1   
4   Legal       2   
5   Privacy     4   
6   Products    1   
7   Support     1 

我要的要求是根据一个分类ID(这个分类ID可能是一个子分类),得到所有的父分类,下面是相应的SQL:

SELECT T2.id, T2.name   
FROM (   
    SELECT   
        @r AS _id,   
        (SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,   
        @l := @l + 1 AS lvl   
    FROM   
        (SELECT @r := 5, @l := 0) vars,   
        table1 h   
    WHERE @r <> 0) T1   
JOIN table1 T2   
ON T1._id = T2.id   
ORDER BY T1.lvl DESC

代码@r := 5标示查询id为5的所有父类。结果如下

1, ‘Home’
2, ‘About’
4, ‘Legal’
5, ‘Privacy’

打签» ,   评论» mysql中从子类ID查询所有父类(做无限分类经常用到)已关闭评论

windows环境下php+apache+mysql环境配置攻略 On 服务器相关  @2012-05-24

windowns环境下php环境配置攻略

先从各官方网站下了APACHE2.0.51、PHP5.01、MYSQL4.0.20、PHPMYADMIN2.57

apache_2.0.51-win32-x86-no_ssl.msi ——http://httpd.apache.org/
php-5.0.1-Win32.zip ———http://www.php.net
mysql-4.0.20d-win.zip ———http://www.mysql.org
phpMyAdmin-2.5.7.zip———这个到天空下载站去下会更快

注意:由于时效性,你看贴的时候也许会有更高的版本的,不过如果没有特殊说明,安装方法是一样的

假设:系统盘为 c:/假设:把所有的东西安装在D盘下的php目录下假设:安装好后目录状态会是这样子:

apache d:/php/apache
mysql d:/php/mysql
php d:/php/php
网页文件 d:/php/www

以上这些是我的喜好,你可以改成你喜欢的

第一步 安装mysql4.0.20d( 先声名一下,本文章的配置不适用于mysql4.1 和 mysql5.0版本 )

如果你下载的是非安装的mysql压缩包,直接解压到指定目录(d:\php\mysql)就可以了
然后双击 D:\php\mysql\bin\winmysqladmin.exe 这个文件,请输入winmysqladmin的初始用户、密码(注:这不是mysql里的用户、密码)随便填不必在意.确定之后你的右下角任务的启动栏会出现一个红绿灯的图标,红灯亮代表服务停止,绿灯亮代表服务正常,左击这个图标->winnt->install the service 安装此服务
再左击这个图标->winnt->start the service 启动mysql服务

修改mysql数据库的root密码
用cmd进入命今行模式输入如下命令: ( 注: d:\php\mysql 为mysql安装目录)
cd d:\php\mysql\bin
mysqladmin -u root -p password 123456
回车出现
Enter password: ( 注:这是叫你输入原密码. 刚安装时密码为空,所以直接回车即可)
此时mysql 中账号 root 的密码 被改为 123456 安装完毕

如果你下载的是进制安装包,解压到任意目录后就直接双击setup.exe 文件,按照你安装软件的习惯装好它,记得到路径选择那一步时请写d:\php\mysql 装好后打开d:\php\mysql\bin\文件夹,双击winmysqladmin.exe文件,会弹出一个窗口,要求设置你的mysql服务的管理员用户名密码.自己定吧

两种方法区别一看就明了.
提示:mysql当前状态,红灯亮代表mysql服务停止,绿灯亮代表服务正常.

第二步: 安装apache 并配置支持PHP

点击安装文件apache_2.0.51-win32-x86-no_ssl.msi
将apache安装在 D:\php\apache 目录下
还会有输入框,提示输入域名呀管理员信箱,随便填就是了.

注: 安装完后会自动安装并启动apache的服务,如在此处出现问题:
“(OS 10048)通常每个套接字地址 (协议/网络地址/端口) 只允许使用一次:
make_sock: could not bind to address 0.0.0.0:80…” 一般是IIS占用了80端口引起的
解决方法: 打开 控制面板->服务 找到 IIS admin 的服务关闭并禁用
然后用CMD进入命令行模式 进入你安装apache的目录 /apache2/bin
输入
apache -k install
apache -k start
如果成功的话,再接着做下面的!

将php-5.0.1-Win32.zip 里内容解压到 D:\php\php 里

找到 php目录里的 php.ini-dist (似乎这是一个习惯,其实我更喜欢用php.ini-recommended)重命名为 php.ini 并拷到 windows系统目录下(特殊情况:win2k系统目录为winnt)
如我的php.ini是拷到 c:\windows目录
再将php目录里的 php5ts.dll,libmysql.dll 拷到系统目录(system/system32) 如我的是c:\windows\system里

配置apache里的httpd.conf

打开 D:\php\Apache\conf\httpd.conf 这个文件

找到 AddDefaultCharset ISO-8859-1 将其改为

AddDefaultCharset GB2312 (让默认语言编码为简体中文)

找到 DocumentRoot “D:/php/Apache2/htdocs” 将其改为你的WEB目录,如我的为

DocumentRoot “D:/php/www”

找到 DirectoryIndex index.html index.html.var 在后面加入 index.htm index.php (默认index.php为首页文件)

选择安装模式: 模块化模式安装 或 CGI模式安装 (选一样即可)

————–模块化安装配置————
找到 #LoadModule ssl_module modules/mod_ssl.so 这行,在此行后加入一行

LoadModule php5_module d:/php/php/php5apache2.dll

其中d:/php/php/php5apache2.dll 为你php目录中php5apache2.dll所在的位置

再找到 AddType application/x-gzip .gz .tgz 这行,在此行后加入一行

AddType application/x-httpd-php .php(其实:上面两行红色的,你可以直接加在httpd.conf文件的最后面也可以的)

————–CGI安装配置———–

找到 AddType application/x-gzip .gz .tgz 这行,加入如下即可

ScriptAlias /php/ “d:/php/php”
AddType application/x-httpd-php .php
Action application/x-httpd-php “/php/php-cgi.exe”
—————————————

此时PHP环境基本已经配置成功
在WEB根目录(如我的D:\php\www)里建一个名为test.php (提示:用记事本的朋友,请避免文件为test.php.txt) ,的文件内容如下

程序代码

1
2
3
<?php
 echo phpinfo();
 ?>

重新启动apache服务
用浏览器打开 http://localhost/test.php
如果可以看到php配置输出信息就OK了
(如果看到的是下载页面或者,请查查你所做的与上面是否有错漏)

三、配置php.ini并测试mysql(php.ini为 c:\windows下的 php.ini)

找到extension_dir = “./” 改为

xtension_dir = “d:/php/php/ext”

找到
;extension=php_mysql.dll
将’;’去掉改为.

extension=php_mysql.dll

找到
;session.save_path = “/tmp”
将’;’去掉.设置你保存session的目录,如

session.save_path = “C:\WINDOWS\Temp”;

重启apache服务
在Web根目录下(如 D:\php\www)建立testdb.php文件内容如下:

程序代码

1
2
3
4
5
6
<?php 
$link=mysql_connect(’localhost’,’root’,’123456’); //这里的root和123456是MYSQL的用户和密码,请根据你自己的情况改好 
if(!$link) echo "fail"; 
else echo "success"; 
mysql_close(); 
?>

用浏览器打开http://localhost/testdb.php 如果输出success就OK了

四、phpmyadmin的安装配置

将phpMyAdmin-2.5.7.zip解压到WEB根目录(d:\php\www\中去),重命名文件夹为phpmyadmin或其它
打开phpmyadmin 目录中的 config.inc.php
找到以下这些(以下我已改好):

$cfg[’PmaAbsoluteUri’] = ’http://localhost/phpmyadmin’;
$cfg[’Servers’][$i][’user’] = ’root’;
$cfg[’Servers’][$i][’password’] = ’123456’; //分别填上你mysql的用户和密码即可
$cfg[’Servers’][$i][’auth_type’] = ’http’; // 这里也可以改为cookie

改好了保存,在浏览器打开http://localhost/phpmyadmin 输入你的用户名和密码,便可以管理mysql了

差不多了,如果你想让你的PHP代码执行得更快,就再装个Zend Optimizer.
方法是,下载了就选择路径安装.问PHP.INI路径就填 c:/windows

装好重启apache服务.再看http://localhost/test.php 时应该看到会多一些东西

with Zend Extension Manager v1.0.3, Copyright (c) 2003-2004, by Zend Technologies
with Zend Optimizer v2.5.3, Copyright (c) 1998-2004, by Zend Technologies

以是我在windows环境在php的安装配置,有不对的地方欢迎多多指正。

打签» , , ,   评论» windows环境下php+apache+mysql环境配置攻略已关闭评论

一个java链接mysql操作类,附mysql-connector-java-5.1.18.zip On 编程语言  @2012-03-31

初次学java,新手。下面是我第一个java链接mysql操作类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package JDBC;

import java.sql.*;
/**
 *
 * @author Administrator
 */
public class MysqlConnection {
    
    public static Connection getConnection() {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://127.0.0.1:3306/cms3";
        String user = "root";
        String pwd = "123456";
        Connection conn = null;
        try{
            Class.forName(driver);
            try {
                conn = DriverManager.getConnection(url, user, pwd);
                if(!conn.isClosed()) {
                    System.out.println("succeeded connecting to the database!");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }catch(ClassNotFoundException e) {
            System.out.println("Sorry,can`t find the Driver!");
            e.printStackTrace();
        }
        return conn;
    }
    
    public ResultSet getResult(String sql) {
        try{
            Connection conn = getConnection();
            Statement stm = (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.TYPE_FORWARD_ONLY);
            //Statement stm = (Statement) conn.createStatement();
            ResultSet result = stm.executeQuery(sql);
            return result;
        }catch(SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

点击下载:mysql-connector-java-5.1.18

打签» ,   评论» 一个java链接mysql操作类,附mysql-connector-java-5.1.18.zip已关闭评论

一个不错的centos+php+mysql+nginx的安装教程 On 编程语言  @2011-12-12

最近一直在学习linux环境下LNMP环境的搭建,试了许多网上教的方法,也遇到了许多问题。不过最终还是捣鼓出来了,这里不得不介绍下如下这个教程:http://www.cnblogs.com/wubaiqing/archive/2011/11/08/2241195.html 内容写得比较详细,对新手来说帮助很大,特留此标记供以后查阅。

打签» , ,   评论» 一个不错的centos+php+mysql+nginx的安装教程已关闭评论