从一个MysqL的例子来学习查询语句

 更新时间:2016年11月25日 16:43  点击:1861
自上学这么多年以来,得出了从一个例子入手来学习是最快最有效,并能培养出很强的实践能力,这是一种很
好的学习方法。不访试试。比如看一本书的时候从各章节的例子入手,找出不了解的以及不懂的还是新知识,
进而有针对性的学习。看看下面的例子:
<?php
$ip = getenv("REMOTE_ADDR");
//echo "$ip";
$conn=mysql_connect('ip','root','****');
mysql_select_db('db',$conn);
$sql="select *from counter where ip="$ip";";
$result=mysql_query($sql,$conn);
$num=mysql_num_rows($result);
$count=mysql_query("select*from counter",$conn);
$count=mysql_num_rows($count);
//echo "$num";
//echo "$count";
if($num==0)
{
$sum=1;
$count ;
$sql="insert into counter(ip,sum,countdata)values('$ip','1','$count')";
mysql_query($sql,$conn);
mysql_close($conn);
//echo "$count";
}
else
{
$my="select sum from counter where ip='$ip'";
$bbbbbb=mysql_query($my) or die(mysql_error());
$row=mysql_fetch_Array($bbbbbb);
@$sum=$row[sum];
//echo "$sum";
$sum ;
$sql="update counter set sum='$sum' where ip='$ip'";
mysql_query($sql);
mysql_close($conn);
}
$str_count=strval($count);
$str_count=Chop($str_count);
$count_len=strlen($str_count);
$image_count="";
if($count_len<6)
{for($j=0;$j<6-$count_len;$j )
{$image_count=$image_count."<img src='0.gif'>";
}
}
for($i=0;$i<$count_len;$i )
{
$nom=substr($str_count,$i,1);
$image_count = $image_count."<img src='";
$image_count = $image_count.$nom;
$image_count = $image_count.".gif'>";
}
echo"$image_count<br>";
print"这是你的第".$sum."次访问";
创建表格
SQL语言中的create table语句被用来建立新的数据库表格。Create table语句的使用格式如下:
create table tablename
(column1 data type,
column2 data type,
column3 data type);
如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项:
create table tablename
(column1 data type [constraint],
column2 data type [constraint],
column3 data type [constraint]);
举例如下:
create table employee
(firstname varchar(15),
lastname varchar(20),
age number(3),
address varchar(30),
city varchar(20));
简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。注意,所有的SQL语句在结尾处都要使用“;”符号。
使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,后面可以使用字母,数字或下划线,名称的长度不能超过30个字符。注意,用户在选择表格名称时不要使用SQL语言中的保留关键词,如select, create, insert等,作为表格或列的名称。
数据类型用来设定某一个具体列中数据的类型。例如,在姓名列中只能采用varchar或char的数据类型,而不能使用number的数据类型。
SQL语言中较为常用的数据类型为:
char(size):固定长度字符串,其中括号中的size用来设定字符串的最大长度。Char类型的最大长度为255字节。
varchar(size):可变长度字符串,最大长度由size设定。
number(size):数字类型,其中数字的最大位数由size设定。
Date:日期类型。
number(size,d):数字类型,size决定该数字总的最大位数,而d则用于设定该数字在小数点后的位数。
最后,在创建新表格时需要注意的一点就是表格中列的限制条件。所谓限制条件就是当向特定列输入数据时所必须遵守的规则。例如,unique这一限制条件要求某一列中不能存在两个值相同的记录,所有记录的值都必须是唯一的。除unique之外,较为常用的列的限制条件还包括not null和primary key等。Not null用来规定表格中某一列的值不能为空。Primary key则为表格中的所有记录规定了唯一的标识符。
向表格中插入数据
SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下:
insert into tablename
今天为了体验一下SQL Server 2005的新功能,狠下心把本机的SQL Server 2000 干掉了,安装了一个SQL Server 2005,体验了一下很多很多的新功能,这时突然想起还有一些DTS改良工作还未完成,于是用SQL Server Management Studio 链接到SQL Server 2000服务器上,打开DTS包,正想编辑的时候,出现了错误误提示:编辑DTS包需要SQL Server 2000 DTS 设计器组件。要使用此功能,请安装特殊的WEB下载文件“SQL Server 2000 DTS 设计器组件". 也就是说SQL Server 2005 的 SQL Server Management Studio 默认是不能编辑DTS 2000(SQL Server 2000的DTS)的。为了解决这个问题,Microsoft增加了一个补丁提供给用户下载。装上这个补丁后就可以像SQL Server 2000一样编辑DTS包了。
SQL 2000 DTS tools are now available as part of the -
Download details: Feature Pack for SQL Server 2005 Nov 2005
(http://www.microsoft.com/downloads/details.aspx?familyid=D09C1D60-A13C-4479-9B91-9E8B9D835CDC&displaylang=en)
The direct link to the MSI-
http://www.microsoft.com/downloads/info.aspx?na=46&p=16&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=D09C1D60-A13C-4479-9B91-9E8B9D835CDC&u=http://download.microsoft.com/download/4/4/d/44dbde61-b385-4fc2-a67d-48053b8f9fad/SQLServer2005_DTS.msi&oRef=http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=126513&SiteID=1


SQL注入是什么?
许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码(一般是在浏览器地址栏进行,通过正常的www端口访问),根据程序返回的结果,获得某些想得知的数据,这就是所谓的SQL Injection,即SQL注入。 
SQL注入通过网页对网站数据库进行修改。它能够直接在数据库中添加具有管理员权限的用户,从而最终获得系统管理员权限。黑客可以利用获得的管理员权限任意获得网站上的文件或者在网页上加挂木马和各种恶意程序,对网站和访问该网站的网友都带来巨大危害。
  防御SQL注入有妙法
  第一步:很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用来防止别人进行手动注入测试。
  可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。
  第二步:对于注入分析器的防范,笔者通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。
  第三步:既然无法逃过检测,那我们就做两个账号,一个是普通的管理员账号,一个是防止注入的账号,为什么这么说呢?笔者想,如果找一个权限最大的账号制造假象,吸引软件的检测,而这个账号里的内容是大于千字以上的中文字符,就会迫使软件对这个账号进行分析的时候进入全负荷状态甚至资源耗尽而死机。下面我们就来修改数据库吧。
  1.对表结构进行修改。将管理员的账号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得再大点,可以选择备注型),密码的字段也进行相同设置。
  2.对表进行修改。设置管理员权限的账号放在ID1,并输入大量中文字符(最好大于100个字)。
  3.把真正的管理员密码放在ID2后的任何一个位置(如放在ID549上)。
  我们通过上面的三步完成了对数据库的修改。
  这时是不是修改结束了呢?其实不然,要明白你做的ID1账号其实也是真正有权限的账号,现在计算机处理速度那么快,要是遇上个一定要将它算出来的软件,这也是不安全的。我想这时大多数人已经想到了办法,对,只要在管理员登录的页面文件中写入字符限制就行了!就算对方使用这个有上千字符的账号密码也会被挡住的,而真正的密码则可以不受限制。
 


SQL Server 2005相对于SQL Server 2000改进很大,有些还是非常实用的。
举几个例子来简单说明 这些例子我引用了Northwind库。
1. TOP 表达式
SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了。
 
--前n名的订单
declare @n int
set @n = 10
select TOP(@n) * from Orders
2. 分页
不知各位过去用SQL Server 2000是怎么分页的,大多都用到了临时表。SQL Server 2005一句话就支持分页,性能据说也非常不错。
 
--按Freight从小到大排序,求20到30行的结果
select * from(
select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders
) a
where row between 20 and 30
3. 排名
select * from(
select OrderId, Freight, RANK() OVER(order by Freight) as rank from Orders
) a
where rank between 20 and 30
4. try ... catch
SQL Server 2000没有异常,T-SQL必须逐行检查错误代码,对于习惯了try catch程序员,2005是不是更加亲切:
SET XACT_ABORT ON -- 打开 try功能
BEGIN TRY
begin tran
insert into Orders(CustomerId) values(-1)
commit tran
print 'commited'
END TRY
BEGIN CATCH
rollback
print 'rolled back'
END CATCH
5. 通用表达式CTE
通过表达式可免除你过去创建临时表的麻烦。
www.111cn.net
--例子:结合通用表达式进行分页
WITH OrderFreight AS(
select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders
)
select OrderId, Freight from OrderFreight where row between 10 and 20
特别,通过表达式还支持递归。
6. 直接发布Web Service
想要把store procedure变成Web Service就用这个吧,.NET, IIS都不需要,通过Windows 2003的HTTP Protocol Stack直接发布WebService,用这个功能需要Windows 2003 sp1
--DataSet CustOrdersOrders(string customerID)
CREATE ENDPOINT Orders_Endpoint
state=started
as http(
path='/sql/orders',
AUTHENTICATION=(INTEGRATED),
[!--infotagslink--]

相关文章

  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • php使用floor去掉小数点的例子

    floor会产生小数了如果我们不希望有小数我们是可以去除小数点的了,下面一聚教程小编来为各位介绍php使用floor去掉小数点的例子,希望对各位有帮助。 float floor (...2016-11-25
  • 值得分享和收藏的Bootstrap学习教程

    这绝对是一套值得分享和大家收藏的Bootstrap学习教程,完整的知识体系,系统的学习资料,帮助大家开启Bootstrap学习之旅,享受Bootstrap带给大家的奇妙乐趣...2016-05-14
  • 开启BootStrap学习之旅

    当下最流行的前端开发框架Bootstrap,可大大简化网站开发过程,从而深受广大开发者的喜欢,你如果也喜欢Bootstrap前端开发框架,不要错过这次旅行...2016-05-05
  • 学习 Vue.js 遇到的那些坑

    这篇文章主要介绍了学习 Vue.js 遇到的那些坑,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...2021-02-04
  • 纯Css实现下拉菜单的简单例子

    下面我们来看一篇关于纯Css实现下拉菜单的简单例子,希望这篇文章能够给各位同学带来帮助,具体步骤如下. 大家可能会经常用到hover这属性,用hover实现鼠标经过的颜...2017-01-22
  • AI:如何训练机器学习的模型

    这篇文章主要介绍了是如何进行机器学习的模型的训练,全文逻辑清晰,简单易懂,如果您正在学习机器学习那么可以参考下,说不定会有不一样的收货...2021-04-16
  • php时间日期对比与日期加减例子

    在php中日期对比用得比较多了,还有一个日期加减也用到不少,下面我拿两个例子来给大家介绍在php中日期操作方法吧,希望文章能给你带来帮助 功能需求 文章发布时段操...2016-11-25
  • php更新修改excel中的内容例子

    本例子不是读取Excel或生成新的Excel,而是读取现有的Excel文件,然后修改Excel中的数据,就像修改mysql中数据一样的哦。 代码如下 ...2016-11-25
  • php正则获取文章内容中图片地址例子

    正则提取图片中的地址我们介绍过很多的相关文章了,下面再来给各位介绍一个可以提取内容中第一张图片的例子,希望对各位有帮助。 代码如下 复制代码 ...2016-11-25
  • php获取QQ头像并显示的例子

    最近看到博客留言的头像有点别扭,因为游客的头像都是同一个头像,看着不是很舒服。虽然现在绝大多数的主题集成了Gavatar头像功能,先不说gavatar被墙的问题,我自己现在都没...2016-11-25
  • php判断字符串是否包含另一个字符串例子

    php判断字符串是否包含另一个字符串的实现方法有许多的办法,像我们在网上一搜索可看到大量关于字符是否包含指定字符的方法,下面我把这些实用的例子整理一起与大家分享...2016-11-25
  • PHP date函数获取时间几个例子

    date函数是php中一个非常好用的日期获取函数了,我们可以使用它来获取指定日期或者当前日期了,下面我来简单的介绍一下date函数用法与常用用法吧。 PHP星期几获取代...2016-11-25
  • 学习使用PHP数组

    PHP4.0中共有超过30个新的数组相关函数。其中很多通用函数答应你检查给定数组中是否存在特定对象、对数组元素计数、增加或删除元素,或对元素排序。 假如你有很大的...2016-11-25
  • ps是什么 ps学习思路

    ps软件的使用是很受大家喜欢的,这次文章就给大家介绍下ps是什么,ps怎么学习,还不是很清楚的下面我们一起来了解下。 PS是什么样的一个软件?&#8195;&#8195;1.PS是目前...2017-07-06
  • PHP的FTP学习(二)

    By Vikram Vaswani Melonfire November 07, 2000 登录了FTP服务器,PHP提供了一些函数,它们能获取一些关于系统和文件...2016-11-25
  • 学好C++必须做到的50条 绝对经典!

    学好C++必须做到的50条,绝对经典!想要学好C++的朋友一定要认真阅读本文,更要做到以下50条...2020-04-25
  • php 设置cookie路径例子总结

    对于cookie path很多的朋友不以为燃了这样会发现就是因为一个小点或一个路径问题测试了一天发现读取不了cookie值了,今天我就来给大家介绍cookie中路径的一些例子与注...2016-11-25
  • php文件锁类防止并发的例子

    文件锁可以防止文件读写时多人访问时出现共享问题或数据不准确的问题,下面我们来看一篇关于php文件锁类防止并发的例子,具体如下. 工作间隙写了个文件锁的类,用于...2016-11-25