官方澳门新永利下载:行为规范,原创精华篇

核心提示:我最早使用的一个关系型 DBMS 就是 Microrims R:Base 4000.
R:Base

   
学习web安全足足有一个半月有余,之前学的是前端,也会一点python。。好吧差不多忘了。常规工具算是熟悉基本流程了。。还欠缺实战。

我最早使用的一个关系型 DBMS 就是 Microrims R:Base 4000. R:Base,与其 PC
竞争对手 dBase 不同的是,它是真正的关系型数据库管理系统,是在 20 世纪 80
年代初作为 NASA RIM(关系信息管理,Relational Information
Management)系统的一个 PC
版本开发出来的。而我最欣赏的功能之一是它允许用户在导入过程中查看示例数据。尽管像
bcp、DTS、新的 SQL Server 2005
集成服务这样的工具以及各种移植工具和向导已经将数据导入过程自动化到 SQL
Server 之中,但这不意味着我们可以一劳永逸。本月,Ron Talmage
提供一些关于导入数据的非常好的常识性建议。 SQL Server DBA(Database
Administrator,数据库管理员)发现他们经常使用 T-SQL
导入和处理数据。为什么呢?因为一些数据传输需要技术成熟的 SQL
所具备的强大功能。最近我刚好完成了另一个数据导入的案例,该案例触动我汇编了一份供我使用的行为规范列表。

   
再学习SQL注入的时候,头痛于不理解SQL语法,这个骗不了别人,即使凭借经验记住SQL注入绕过语法也不懂得他们的意思,尤其是看《SQL注入攻击与防御》这本书的150-175页的时候,我是彻底懵比了!
 

确保将载入的原始数据暂存为 varchar 数据类型

     
 我内心是不服输的,然后书一直没看,因为看不懂啊,那种感受就好像有一大堆好吃的在你旁边,你却吸收不了。对就是那种感觉。

源自所谓的旧式系统的原始数据通常以文本格式传送,因此我首先总是将原始数据载入一个单独的暂存数据库。我从不尝试将数据直接载入一个成品数据库。

   
时间就是生命,我这星期才明白什么叫短暂的时间能做出很多事情,时间就像海绵一样,挤一挤就有了。利用下课的空闲时间完成了一份SQL语法笔记,我也是边看W3c边做的笔记。因为住宿,我无法提供数据库练习,这里颇有遗憾,但是笔记理论性绝对强!
 
笔记不是完美了,我只是个新手,从我的角度从我新手的角度理解,有不对的地方请各位大牛提出来,大家一起互相学习。

我做的事情是将所有 原始文本数据载入相应的原始表,表中的列为 varchar
数据类型。(DTS 将自动完成该过程,这样很好。但是,DTS 还会将列命名为
COL001,因此您不用事先提供列名。)varchar 的主要优点是它能够接收任何数据

甚至是“坏”数据。如果您尝试从一个没有对用户输入的数据进行严格检查的旧式系统加载数据,那么被忽略的数据或写入异常文件的数据可能比加载的数据还多,如果您不想冒这样的风险,除非接收每一个可能的值。将字符载入
varchar 数据类型的列则可以做到这一点。

   不bb了,看我四天的工作量吧!

在暂存表/列名时不要使用非字母数字字符


您可能无法控制在包含原始数据的表中如何对列进行初始命名,但是我会尝试修改可能包含空格或其他非常规字符的旧式列名。当列名或表名包含非字母数字的字符时,我们必须使用方括号或双引号对其进行分隔。这种代码不但编写起来比较困难,而且可读性较差。

熟悉SQL之路

不要在列名中使用关键字

SQL是结构化查询语

源自旧式系统的数据通常包含能够破坏 SQL
查询的描述性列名。例如,房地产数据可能会包含一个名为 KEY
的列,它用来反映放置在待售房屋上的钥匙箱。然而,KEY 也是 T-SQL
中的一个关键字
(!),如果使用这样的列名,查询操作在直接引用该列名时将失败。因此,最终您必须用方括号或双引号分隔含有关键字的列名。

SQL对大小写不敏感!

确保使用正确的数据类型创建一个暂存表

*代表所有!

下一步是创建一个或多个额外的暂存表,这些表有“正确的”数据类型。我喜欢使暂存表和目标
OLTP(Online Transaction
Processing,联机事务处理)数据库中的目的表具有相同的列名。不管怎样,重要的是原始数据中每列的数据类型在载入暂存时都将执行检查并予以改正。在
SQL Server 表中找到坏数据比在加载失败的外部文件中找到坏数据容易得多。

SELECT获取数据,查询语句

确保将新列添加到暂存表中

select name(列名) from admin(表名)

当暂存数据没有相应的列时,您可以添加这些列,然后拆分或合并载入的数据。例如,即使目的表分解出街道名和门牌号,地址仍然可能作为一个简单的字符串载入暂存表。那么您可以在暂存表中添加街道名列和门牌号列,将旧式地址分解为两个列。这样做的优点是,原始数据与新拆分的数据并存,因此您能够通过比较列来测试脚本。


确保使用本地副本来测试填充的产品数据

DISINCT,配合SELECT使用,作用,去除重复部分。

当您准备好要插入暂存表的数据时,可以首先通过将其插入成品表的本地副本来测试这些数据。有时您只需清空表;有时,您必须填充表。

select disinct name from admin (from后面是存储数据(列名)的数据库表)

确保保留产品约束


在副表上总是保留产品约束。这样,您就能够测试暂存表数据满足这些约束的程度。这些约束包括
NULL、默认值、检查、主键和外键约束。首先保证副表列上的 NULL 或 NOT NULL
属性与目标系统的相同,然后再逐步检查其他所有约束。如果您的测试表明暂存数据插入过程满足所有约束,那么您距离成功就只有一步之遥了。

WHERE字句,SELECT * from person where name=”红尘”
 查询列名是红尘的来自person表。

确保在一个产品数据副本上测试

//where是条件语句

虽然将导入数据插入空表将遇到很多潜在的问题,但是不会遇到所有的问题。在通过了所有之前的测试后,确保您将在一个目标数据或成品系统的副本(或至少是一个合理的子集)上测试导入。您能够接收的最终错误类型将由数据配置决定,而且这是此项测试能够检测到的。那么,您就能够在数据库副本中检查结果,甚至可能将应用程序重定向到该副本以便进一步测试和验证。

用于条件搜索:select * from person where like=’jack’//搜索关键字jack

如果导入过程至此通过了所有测试,那么您可能已经准备好进行导入数据了,或者至少可以将导入过程交给质量管理员
(QA, Quality Assurance) 了。


AND&OR AND是并列关系,两者都需要满足,OR是或的意思,两者满足其一。


关于order by

order by字母的排序方式是以:A,B,C,D……Z这种,越靠前就排序靠前。

order by数字的排序方式是以:1,2,3,4,5,6….这种,越靠前排序靠前。

order by字母和order
by数字同时排序的时候,排序的方式:字母的排序大于数字的排序!所以排序先看字母,字母越靠前顺序就最前面!假如字母的位数都相同,比较数字的话,那么数字越小的越靠前。

SQL语句对大小写不敏感,ORDER BY也是可以。

反之desc(DESC)是反序排列,排序方法与正序排列雷同。


insert into语句,含义:像表格中插入新的一行数据

insert into admin(表名) values(‘红尘’,’男’,’red’,’apple’)

*要已知表名是admin并且admin表是四列!

insert into admin(‘姓名’,’性别’)
values(‘红尘’,’男’);//指定插入一行数据,你得知道表中的列名。


update 含义:修改表中的数据

update 表 set(创建) name=jack(新值) where people(列名)=man

update admin set name=jack where people=man


delete语句

delete from admin(表名)  where name(列名)=jack

//删除表中列名为jack的一行。

delete * from table_name

//删除所有行


Top子句,Limit子句,ROWSUM子句

不是所有数据库都支持top字句,支持top的只有mssql数据库(sql server数据库)

top的用法有两种:

1、select top 2  * /  指定某一个列名(columns_name) from admin(表名)
 //注释top的含义自我翻译了下,含义很多,感觉最标准就是在…的前头,这里的含义就是查询所有列名中的前两行的数据记录行来自表名
(admin) / 查询前二行的指定列名下的数据内容来自表名(admin)。

2、select top 50percent * / 指定某一个列(columns_name)from admin(表名)
  //查询前百分之50的所有列下的数据记录行来自admin(表) /
查询前百分之50的指定列名下的数据来自admin(表)。

///////////////////

与top用法相同的是limit字句,limit适用于mysql,它是支持mysql数据库的。

limit详细用法:

1、select * / 列名(columns_name) from admin(表名) limit 5    
//查询前5行的所有列下的数据记录行来自admin(表) /
查询前5行的指定列名下的数据来自admin(表)。2、select * /
列名(columns_name) from admin(表名) limit 5,10
//查询前6行-15行的所有列下的数据记录行来自admin(表) /
查询前5行-15行的指定列名下的数据来自admin(表)。//limit5,10起始是5开始,变成6,因为返回的是所有记录,所以10要加上起始的5就是15。举例:limit
3,6就是前4行-9行。是limit (初始值+1) (初始值+末尾值)使用limit注意点:

limit不可以是负数!limit初始值是0不是1

limt 0相当于limit 0,n。

取决于第二位数。


 与top,limit雷同的语句是:ROWNUM,rownum支持oracle数据库。

用法:select * from admin(表)  where rownum<=5

这里的rownum使用方式比较奇怪,它是跟在where子句上的,是条件语句执行的。

rownum初始值是1,rownum=1就是显示表中的第一行,顾名思义,2就是显示表中的前二行。但是写法上就有点不一样。

假如写成rownum=2,这样写看上去是对的,但是oracle语法不支持这种写法,既然是限制,那么我想显示表中前二行的记录行,那么应该是rownum<=2,这里的意思就是返回前面二行的记录行,<在这里有种过去的意思。

那rownum>2呢,它的意思就是从第二行开始返回记录行。怎么才能使用它?

答:需要调用rownum rn才行!

用法如下:

查询前3条信息:select * from admin where rownum<4

查询前3条信息:select * from admin where rownum<=3

像mssql数据库中top n一样,我们需要:select * from (select * from admin
order by ID) where rownum<=5

查询第3条-第5条信息:select * from(select a.* rownum rn from
admin(表名) a)  where rn>=3 and rn<=5

a.*是数据库别名,我也不太懂。


LIKE操作符,比较好理解,不像上面的那些好抽象。

用法有四种:

1、select * from admin(表名) where name(列名) like ‘j%’    
//查询搜索来自admin表中以j开头name(列名)的人

2、select * from admin(表名) where name(列名) like ‘%j’    
//查询搜索来自admin表中以j末尾的name(列名)的人

3、select * from admin(表名) where name(列名) like ‘%jack%’  
 //查询搜索来自admin表中包含jack的name(列名)的人

4、select * from admin(表名) where name(列名) not like ‘%jack%’  
 //查询搜索来自admin表中不包含jack的name(列名)的人

—  %是SQL的通配符


IN操作符,选取表中的内容

用法:select * from admin(表) where name(列名) in(‘jack’,’marry’)  
 //获取来自admin表中的name列名是jack和marry的数据记录行


BETWEEN操作符

between..and的含义就是选取两个值之间的数据范围,选取的两个值可以是数字,也可以是字母。

用法:

1、select * from admin where name between ‘jack’ and ‘abc’  
 //查询来自admin表中列名是在jack和abc之间的数据记录行

2、也可以用大小于号代替BETWEEN

用法如下:select * from admin where number>10 and number<20  
 //查询来自admin表中number(列名)是在大于10和小于20的之间的数据记录行

这些都是选取两个值之间的数据范围,一切都是两面性,还有不选取两个值之间的数据范围,它就是not
between,

not between用法和between用法雷同


SQL JOIN彻底刨析

  我已经无法用语言解释了,此乃精品!


SQL  UNION

解释:UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看,
UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。
UNION 的一个限制是两个 SQL
语句所产生的栏位需要是同样的资料种类。另外,当我们用
UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT
DISTINCT)。不会出现重复的一模一样的。

用法:union select name from admin

//会获取所有的name(列名),不会有重复


SQL  SELECT INTO FROM


熟悉SQL之路续篇1

SQL   SELECT INTO FROM

select…into…from…不支持mysql数据库!

解释三个…;依次从左往后

1、…*/columns_name

2、…newtable_name

3、…oldtable_name

支持mssql数据库!

用法:select id,name into admin2 from admin1    
 //获取admin1表中的id,name;id和name都是admin1表中的列名插入到admin2表中了。在这里我们不需要事先创建admin2,admin2会系统自动创建假如你事先创建了admin2那么就会说你已经存在此表,不能插入。


我们也可以添加where子句。

用法:select id,name into admin2 from admin1 where city=’china’  
//查询获取来自admin1中的id,name,把id,name插入到admin2表,这个插入过程中,需要满足的条件是要保证插入的城市是china。


create DB 数据库名 //创建数据库

create table 表名称(列名1 数据类型,列名2 数据类型,列名3 数据类型…….)


SQL的约束

1、NOT NULL

NOT NULL顾名思义,没有NULL的意思。在SQL语法中就是强制列不接受NULL值。NOT
NULL一般写在数据类型的后面或者代替数据类型的位置

举例子说明:

create table abc(

id   int  NOT NULL

);

2、UNIQUE

UNIQUE约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

注意点:UNIQUE可以标识多次约束对每个表,而PRIMARY
KEY只能标识一次对每个表。

感觉很好理解,不手写了,负责一段内容自己找寻其中规律:

下面的 SQL 在 “Persons” 表创建时在 “Id_P” 列创建 UNIQUE 约束:

     MySQL:

CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT
NULL, FirstName varchar(255), Address varchar(255), City varchar(255),
UNIQUE (Id_P) )

     SQL Server / Oracle / MS Access:

CREATE TABLE Persons ( Id_P int NOT NULL UNIQUE, LastName varchar(255)
NOT NULL, FirstName varchar(255), Address varchar(255), City
varchar(255) )

     如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE
约束,请使用下面的 SQL 语法:

     MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT
NULL, FirstName varchar(255), Address varchar(255), City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) )


规律:UNIQUE约束都是添加在最后的,约束一个的话,最后一个逗号是UNIQUE前面一位数据类型上,而且需要区别数据库。UNIQUE约束多位的话,不需要区分多位数据库,并且UNIQUE约束的前一位数据类型后面不需要逗号,数据库认为约束的前面一位是最后一位。

3、PRIMARY KEY

不想手写了,参照UNIQUE就行!摘录网上的一段:

SQL PRIMARY KEY 约束

     PRIMARY KEY 约束唯一标识数据库表中的每条记录。

     主键必须包含唯一的值。

     主键列不能包含 NULL 值。

     每个表都应该有一个主键,并且每个表只能有一个主键。

SQL PRIMARY KEY Constraint on CREATE TABLE

     下面的 SQL 在 “Persons” 表创建时在 “Id_P” 列创建 PRIMARY KEY
约束:

     MySQL:

CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT
NULL, FirstName varchar(255), Address varchar(255), City varchar(255),
PRIMARY KEY (Id_P) )

     SQL Server / Oracle / MS Access:

CREATE TABLE Persons ( Id_P int NOT NULL PRIMARY KEY, LastName
varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255),
City varchar(255) )

     如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY
约束,请使用下面的 SQL 语法:

     MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT
NULL, FirstName varchar(255), Address varchar(255), City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName) )

//自行寻找规律

4、FOREIGN KEY

FOREIGN KEY的含义是外键。

看了文章没看懂,到时候看懂补上。。。

为什么要添加外键?

答:FOREIGN KEY 约束用于预防破坏表之间连接的动作。

FOREIGN KEY
约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

熟悉SQL之路续篇2

5、SQL CHECK 约束  挺简单的。。。。

CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

SQL CHECK Constraint on CREATE TABLE

下面的 SQL 在 “Persons” 表创建时为 “Id_P” 列创建 CHECK 约束。CHECK
约束规定 “Id_P” 列必须只包含大于 0 的整数。

My SQL:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CHECK (Id_P>0)

)

SQL Server / Oracle / MS Access:

CREATE TABLE Persons

(

Id_P int NOT NULL CHECK (Id_P>0),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL
语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT chk_Person CHECK (Id_P>0 AND City=’Sandnes’)

)

SQL CHECK Constraint on ALTER TABLE

如果在表已存在的情况下为 “Id_P” 列创建 CHECK 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons

ADD CHECK (Id_P>0)

如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL
语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons

ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City=’Sandnes’)

撤销 CHECK 约束

如需撤销 CHECK 约束,请使用下面的 SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons

DROP CONSTRAINT chk_Person

MySQL:

ALTER TABLE Persons

DROP CHECK chk_Person

//偷懒了,实在内容太多这块,我解释不清。。。但是这个没啥难度。

6、DEFAULT

SQL DEFAULT 约束

DEFAULT 约束用于向列中插入默认值。

如果没有规定其他的值,那么会将默认值添加到所有的新记录。

发表评论

电子邮件地址不会被公开。 必填项已用*标注