存档

‘MySQL’ 分类的存档

数据库基本—-SQL语句大全 (转载)

2011年8月12日 1 条评论

学会数据库是很实用D~~记录一些常用的sql语句…有入门有提高有见都没见过的…好全…收藏下…
其实一般用的就是查询,插入,删除等语句而已….但学学存储过程是好事…以后数据方面的东西就不用在程序里搞喽..而且程序与数据库只要一个来回通讯就可以搞定所有数据的操作….

一、基础

1、说明:创建数据库
Create DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
— 创建 备份数据的 device
USE master
EXEC sp_addumpdevice ‘disk‘, ‘testBack‘, ‘c:\mssql7backup\MyNwind_1.dat‘
— 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

二、提升

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in ‘”&Server.MapPath(“.”&”\data.mdb” &”‘ where..

4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b 或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a
select * from (Select a,b,c FROM a) T where t.a > 1;

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1

11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where …..

12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff(‘minute‘,f开始时间,getdate())>5

13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:前10条记录
select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据
select top 10 * from tablename order by newid()

18、说明:随机选择记录
select newid()

19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,…)

20、说明:列出数据库里所有的表名
select name from sysobjects where type=‘U‘

21、说明:列出表里的所有的
select name from syscolumns where id=object_id(‘TableName‘)

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when ‘A‘ then pcs else 0 end),sum(case vender when ‘C‘ then pcs else 0 end),sum(case vender when ‘B‘ then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

三、技巧

1、1=1,1=2的使用,在SQL语句组合时用的较多

“where 1=1” 是表示选择全部 “where 1=2”全部不选,
如:
if @strWhere !=‘
begin
set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘] where ‘ + @strWhere
end
else
begin
set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘]‘
end

我们可以直接写成
set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘] where 1=1 安定 ‘+ @strWhere

2、收缩数据库
–重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
–收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE

3、压缩数据库
dbcc shrinkdatabase(dbname)

4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login ‘update_one‘,‘newname‘,‘oldname‘
go

5、检查备份集
RESTORE VERIFYONLY from disk=‘E:\dvbbs.bak‘

6、修复数据库
Alter DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB(‘dvbbs‘,repair_allow_data_loss) WITH TABLOCK
GO
Alter DATABASE [dvbbs] SET MULTI_USER
GO

7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT

USE tablename — 要操作的数据库名
Select @LogicalFileName = ‘tablename_log‘, — 日志文件名
@MaxMinutes = 10, — Limit on time allowed to wrap log.
@NewSize = 1 — 你想设定的日志文件的大小(M)

– Setup / initialize
DECLARE @OriginalSize int
Select @OriginalSize = size
FROM sysfiles
Where name = @LogicalFileName
Select ‘Original Size of ‘ + db_name() + ‘ LOG is ‘ +
CONVERT(VARCHAR(30),@OriginalSize) + ‘ 8K pages or ‘ +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + ‘MB‘
FROM sysfiles
Where name = @LogicalFileName
Create TABLE DummyTrans
(DummyColumn char (8000) not null)

DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
Select @StartTime = GETDATE(),
@TruncLog = ‘BACKUP LOG ‘ + db_name() + ‘ WITH TRUNCATE_ONLY‘

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
– Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) — time has not expired
AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN — Outer loop.
Select @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN — update
Insert DummyTrans VALUES (‘Fill Log‘)
Delete DummyTrans
Select @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
Select ‘Final Size of ‘ + db_name() + ‘ LOG is ‘ +
CONVERT(VARCHAR(30),size) + ‘ 8K pages or ‘ +
CONVERT(VARCHAR(30),(size*8/1024)) + ‘MB‘
FROM sysfiles
Where name = @LogicalFileName
Drop TABLE DummyTrans
SET NOCOUNT OFF

8、说明:更改某个表
exec sp_changeobjectowner ‘tablename‘,‘dbo‘

9、存储更改全部表

Create PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS

DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)

DECLARE curObject CURSOR FOR
select ‘Name‘ = name,
‘Owner‘ = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name

OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + ‘.‘ + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
– select @name,@NewOwner,@OldOwner

FETCH NEXT FROM curObject INTO @Name, @Owner
END

close curObject
deallocate curObject
GO

10、SQL SERVER中直接循环写入数据
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end

分类: MySQL 标签: ,

在Fedora 14中安装Lighttpd+PHP5+MySQL

2010年12月22日 4 条评论

Lighttpd是一款安全,高效,基于标准且为高速环境设计的web服务器。这篇教程将教你如何在一台Fedora 14中安装Lighttpd+PHP5(FastCGI模式)+MySQL。
我已经测试无误,这将保证为你工作!

1 前言备注

在这篇教程中我使用的用户名是www.unixbar.net,IP地址是192.168.0.100.这些设置可能与你的有所不同,因此 你需要在适当的地方修改一下.

1.安装MySQL

[root@server ~]# yum -y install mysql mysql-server

为MySQL添加自启动,让MySQL伴随系统启动:

[root@server ~]# chkconfig --levels 235 mysqld on
[root@server ~]# /etc/init.d/mysqld start

阅读全文…

在Fedora 14中安装Nginx+MySQL+PHP5(PHP-FPM模式) LNMP

2010年12月22日 没有评论

Nginx(发音为 “engine x”)是一款免费、开源、高性能的HTTP服务器。同时Nginx以稳定、功能丰富、配置简单、资源消耗少著称。这篇教程将会为你展示如何在一台 Fedora 14中安装Nginx+MySQL+PHP5(PHP-FPM模式)

我已经测试无误,这将保证为你工作!

1 前言备注

在这篇教程中我使用的用户名是www.unixbar.net,IP地址是192.168.0.100.这些设置可能与你的有所不同,因此 你需要在适当的地方修改一下.
阅读全文…

在phpMyAdmin中隐藏数据库

2010年11月23日 没有评论

今天遇到了这样的一个问题,默认的普通数据库的用户,可以在phpmyadmin中看到information_schema和test两个数据库.我的服务器并不需要这些用户看到其中的information_schema数据库,就需要找到一个办法隐藏它。
在这里我们通过修改phpmyadmin文件夹中的config.inc.php文件,来实现数据库的隐藏.

$cfg['Servers'][$i]['hide_db'] = 'information_schema';

只需要在配置文件中添加如下代码,保存退出,并重新登录,就会发现普通的mysql用户是看不到了information_schema数据库了。

在Debian Lenny中安装Nginx+PHP5+MySQL

2010年10月26日 没有评论

Nginx是一款优秀的网站服务器,其特点是可承受负载大,占用内存少,目前国内很多门户网站都已经开始使用Nginx,今天这篇教程我们一起来学习如何在Debian lenny中通过apt来配置一个Nginx+PHP5+MySQL的环境。

1.安装前的准备

在安装之前,首先确保你已经安装好了一台Debian Lenny的服务器,并配置好了常用的服务,比如sshd等。在这里我们假设服务器的主机名为www.unixbar.net,ip地址是192.168.10.24
阅读全文…

分类: Debian, MySQL, Nginx, PHP 标签: , , ,

更新mysql用户口令

2010年5月13日 没有评论

方法1:手工更新授权表,并且仅仅更新口令

bin>mysql -u root mysql
mysql> update user set password=password('新密码') where user='用户名称';
mysql>flush privileges;

阅读全文…

在Fedora 12中安装Nginx+MySQL+PHP5(FastCGI模式)LNMP

2010年2月6日 5 条评论

Nginx(发音为 “engine x”)是一款免费、开源、高性能的HTTP服务器。同时Nginx以稳定、功能丰富、配置简单、资源消耗少著称。这篇教程将会为你展示如何在一台 Fedora 12中安装Nginx+MySQL+PHP5(FastCGI模式)

我已经测试无误,这将保证为你工作!

1 前言备注

在这篇教程中我使用的用户名是server1.example.com,IP地址是192.168.0.100.这些设置可能与你的有所不同,因此 你需要在适当的地方修改一下.

2.安装MySQL5

我们通过执行下面的命令来安装MySQL:

yum install mysql mysql-server

然后我们为MySQL创建系统启动连接(这样的话,MySQL就会在系统启动的时候自动启动)并且启动MySQL服务器:

chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

现在检查是否支持网络访问,运行:

netstat -tap | grep mysql

应该显示如下信息:

[root@server1 ~]# netstat -tap | grep mysql
tcp        0      0 *:mysql                     *:*                         LISTEN      1376/mysqld
[root@server1 ~]#

如果不显示,编辑/etc/my.cnf文件,并注释掉skip-networking参数:

vi /etc/my.cnf
[...]
 
#skip-networking
 
[...]

并重启 MySQL 服务器:

/etc/init.d/mysqld restart

运行

mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

来为root用户设置一个密码(否则的话任何人都可以访问你的MySQL数据库!)。

3安装 Nginx

Nginx是Fedora12的默认包,我们可以通过下列命令安装它:

yum install nginx

然后我们为nginx创建一个系统启动链接,并启动它:

chkconfig --levels 235 nginx on
/etc/init.d/nginx start

在你的浏览器 中输入你的服务器IP地址或者主机名(例如http://192.168.0.100),然后你就可以看到nginx的欢迎页面:

4 安装PHP5
我们可以让PHP5在nginx中以FastCGI的模式工作。默认情况下Fedora中没有独立的FastCGI deamon包,因此我们使用lighttpd的FastCGI包(lighttpd-FastCGI),并同时安装php-cli和其他的PHP5模 块,例如php-mysql,它可以使你的PHP脚本支持MySQL:

yum install lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-eaccelerator php-magickwand php-magpierss php-mapserver php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

然后打开/etc/php.ini文件,并在文件的最后加入这一行line cgi.fix_pathinfo = 1:

vi /etc/php.ini
[...]
cgi.fix_pathinfo = 1

我们可以使用Lighttpd-fastcgi包中自带的/usr/bin/spawn-fcgi,启动FastCGI进程。请参考

spawn-fcgi –help

来学习更多的东西.
我们运行下列命令可以启动一个监听本地9000端口,并以nginx用户和组运行的PHP FastCGI后台:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi -P /var/run/fastcgi-php.pid

当然,你并不像每次启动的时候都手动的输入这些命令,因此你可以让系统在启动时自动执行这些命令,打开/etc/rc.local…

vi /etc/rc.local

… 然后在文件的结尾添加下列命令:

[...]
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi -P /var/run/fastcgi-php.pid

5 配置nginx

现在我们打开nginx的配置文件/etc/nginx/nginx.conf:

vi /etc/nginx/nginx.conf

配置文件简单易懂
(你可以在下列网站学习更多的配置方法http://wiki.codemongers.com/NginxFullExamplehttp://wiki.codemongers.com/NginxFullExample2)
首先你可以增加worker process的数量和设置keepalive_timeout为一个合理值:

[...]
worker_processes  5;
[...]
keepalive_timeout  2;
[...]

虚拟主机定义在server{}容器中.我们使用下列命令修改默认的虚拟主机:

[...]
    server {
        listen       80;
        server_name  _;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   /usr/share/nginx/html;
            index  index.php index.html index.htm;
        }
 
        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }
    }
[...]

server_name  www.unixbar.net; 你可以在这里通过修改www.unixbar.net来确 定你的域名
在location /部分,我在index行加入了index.php。root /usr/share/nginx/html 意思是文档路径为/usr/share/nginx/html。
对于PHP来说最重要的部分就是 location ~ \.php$ {}。取消它的注释。改变root这一行为网站的文档路径。例如root /usr/share/nginx/html。请确保把fastcgi-param行修改成了fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;;否则得花PHP解析器将不会找到浏览器中调用的PHP.
现在我们保存文件并重启nginx:

/etc/init.d/nginx stop
/etc/init.d/nginx start

(我不能使用/etc/init.d/nginx restart,因为这个命令只停止了nginx,但是无法启动它-不知道为什么…)
现在在文档路径root /usr/share/nginx/html创建下列PHP文件:

vi /usr/share/nginx/html/info.php

现在我们就可以在浏览器中通过http://192.168.0.100/info.php访 问了。

正如你在Server API这一行中所看到的一样,PHP5现在已经以FastCGI模式运行了。如果你继续向下翻看,你就能过看到PHP5所支持的模块,其中就包括 MySQL模块:

6 相关链接

7 原文地址

http://www.howtoforge.com/installing-nginx-with-php5-and-mysql-support-on-fedora-12

分类: Fedora, MySQL, PHP 标签: , ,

在CentOS5.4中安装Lighttpd+PHP5+MySQL

2010年1月23日 15 条评论

Lighttpd是一款安全,高效,基于标准且为高速环境设计的web服务器。这篇教程将教你如何在一台CentOS 5.4中安装Lighttpd+PHP5(FastCGI模式)+MySQL。

我已经测试无误,你可以放心使用。

1 前言备注

在这篇教程中,我使用的主机名为server1.example.com,ip地址是192.168.0.100。这些设置可能与你想要的有所不同,所以你必须在适当的地方修改一下。
阅读全文…

在Fedora 11中安装Nginx+MySQL+PHP5(FastCGI模式)LNMP

2010年1月21日 6 条评论

Nginx(发音为 “engine x”)是一款免费、开源、高性能的HTTP服务器。同时Nginx以稳定、功能丰富、配置简单、资源消耗少著称。这篇教程将会为你展示如何在一台Fedora 11中安装Nginx+MySQL+PHP5(FastCGI模式)
阅读全文…

分类: Fedora, MySQL, PHP 标签: , , , ,

在Ubuntu 9.10中安装设置Apache2+mod_fcgid+PHP5

2010年1月16日 没有评论

这篇教程将教给你如何在Ubuntu 9.10中安装设置Apache2+mod_fcgid+PHP5.mod_fcgid兼容替代老版mod_fastcgi。Mod_fcgid可以让PHP脚本运行在其所有人的的权限下,而非Apache用户。

我已经测试无误,这将保证为你工作!

1.前言

在这篇教程中,我使用的是一台Ubuntu 9.10服务器,主机名为Server1.example.com,Ip地址为192.168.0.100

在这里我将创建两个Apache虚拟主机,分别是www.example1.com and www.example2.com,来演示mod_fcgid的用法。
阅读全文…