Home > Database > Mysql Tutorial > body text

Oracle数据库语句大全

WBOY
Release: 2016-06-07 15:51:17
Original
1370 people have browsed it

ORACLE支持五种类型的完整性约束 NOT NULL(非空)--防止NULL进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL. CHECK(检查)--检查在约束中指定的条件是否得到了满足. UNIQUE(唯一)--保证在指定的列中没有重复.在该表中每一个或者每一组

ORACLE支持五种类型的完整性约束

NOT NULL(非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值.

CHECK(检查)--检查在约束中指定的条件是否得到了满足.

UNIQUE(唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的.

PRIMARY KEY(主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束.

POREIGN KEY(外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.ORACLE支持五种类型的完整性约束

NOT NULL(非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值.

CHECK(检查)--检查在约束中指定的条件是否得到了满足.

UNIQUE(唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的.

PRIMARY KEY(主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束.

POREIGN KEY(外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.

 

 

1--设置每行显示多少字符  setlinesize  300;

2 设置每页显示多少条记录 set pagesize 30;

3 用户名的切换: 如 connsystem/tiger

Conn sys/change_on_install as sysdba(注意超级用户在后面加as sysdba)

4 在超级用户下查找普通用户的表是查不到的必须这样查找  如 select * fromscott.emp(普通用户下的emp表)

5 查看当前是那个用户身份登录: show user;

6 查看有多少张表: select * fromtab;(注意不同用户下的表是不同的)

7查看表的结构: desc emp(emp为表名)

8 取出重复的列(DISTINCT): 如 SELECTDISTINCT  JOBEMP(去掉job的重复的值)

9字符串的链接操作用:  ||

10 查询有奖金的员工: select* from emp where comm is notnull;

11 查询没有奖金的员工信息: select * from emp where comm isnull;

12 两个条件以上就得用and如查询工资大雨1500和有奖金的员工 select * from empwhere                                                                                               sal>1500  and comm is not null;

13 表示两个条件有一个满足就可就用:or如查询工资大于1500或者没有奖金的员工信息

Select * from emp where sal>1500 or comm is notnull;

14取反可以用not 如查询员工工资不大于1500和有奖金的员工信息 如:

 Select * from emp where not(sal>1500  or comm is not null);

15在什么什么之间用between----and----如查询工资在1500和3000之间的员工信息:

Select * from emp  wheresal  between 1500 and 3000;

16  查询员工编号是2323, 4555, 2222的员工具体信息:如

Select * from emp where empno in(2323,4555,2222);

17.l模糊查询  like一般结合"%"和"_"使用其中%:表示可以匹配任意长度的内容,"_"表示匹配一个长度放入内容 如: 查询员工姓名中第二哥字母是M的员工信息:

Select * from emp where ename LIKE '_M%';

又如姓名中包含M的员工  Select *from emp where ename LIKE  '%M%';

18oracle中不等于有两种表示方式""和"!="

19 排序用order by {ascdesc}其中asc 是升序排列如果不写就默认按升序排列desc是按降序排列 排序语句放在sal语句的最后如: 按员工工资进行排序

Select * from emp order by sal asc(升序)

Selecct * from emp order by saldesc(降序)

Select * from emp where deptno='10' order by saldesc,hiredateasc;(查询部门10的员工工资的升序排列如果工资相等就按员工的入职时间排序)

20.group by 用于对查询的结果进行分组统计:显示每个部门的平均工资和最高工资 如:

Select avg(sal),max(sal) from emp group by deptno;

 

Having  子句用于限制分组显示结果:显示平均工资大于2000的的部门号和他的平均工资?

如:select avg(sal), deptno from emp group by deptnohaving avg(sal)>2000;

2. 单行函数:

1 小写变大写: upper 如 select * fromemp where ename=upper('smith');

讲一个字符串变为小写字母表示 如: select  lower('HELLO WORLD') FROM DUAL;

将单词的首字母变大写 用 INITCAP 如: SELECTINITCAP('HELLO WORLD') FROM DUAL;

2.字符串的操作

  Substr()截取字符串length()字符串的长度 replace()替换字符串

3数值函数

四舍五入: round();

截断小数位:trunc();

 

一.入门部分

1.   创建表空间
create tablespace schooltbs datafile‘D:\oracle\datasource\schooltbs.dbf’ size 10M autoextend on;

2.   删除表空间
drop tablespace schooltbs[including contents and datafiles];

3.   查询表空间基本信息
select *||tablespace_name from DBA_TABLESPACES;

4.   创建用户
create user  lihua
identified by lihua
default tablespace schooltbs
temporary tablespace temp;

5.   更改用户
alter user lihua
identified by 123
default tablespace users;

6.   锁定用户
alter user lihua account lock|unlock;

7.   删除用户
drop user lihua cascade;--删除用户模式

8.   oracle数据库中的角色
connect,dba,select_catalog_role,delete_catalog_role,execute_catalog_role,exp_full_database,imp_full_database,resource

9.   授予连接服务器的角色
grant connect to lihua;

10.授予使用表空间的角色
grant resource to lihua with grant option;--该用户也有授权的权限

11.授予操作表的权限
grant select,insert on user_tbl to scott;--当前用户
grant delete,update on lihua.user_tbl to scott;--系统管理员

12.修改表的结构(alter)

Alter table  表名 add(列的名称,列的类型);

二.SQL查询和SQL函数

1.SQl支持的命令:
数据定义语言(DDL):create,alter,drop
数据操纵语言(DML):insert,delete,update,select
数据控制语言(DCL):grant,revoke
事务控制语言(TCL):commit,savepoint,rollback

2.Oracle数据类型
字符,数值,日期,RAW,LOB
字符型
char:1-2000字节的定长字符
varchar2:1-4000字节的变长字符
long:2GB的变长字符
 注意:一个表中最多可有一列为long型

Long列不能定义唯一约束或主键约束

long列上不能创建索引

过程或存储过程不能接受long类型的参数。

数值型
number:最高精度38位
日期时间型
date:精确到ss
timestamp:秒值精确到小数点后6位

函数
sysdate,systimestamp返回系统当前日期,时间和时区。
更改时间的显示
alter session set nls_date_language=’american’;
alter session set nls_date_format=’yyyy-mm-dd’;

Oracle中的伪列
像一个表列,但没有存储在表中

伪列可以查询,但不能插入、更新和修改它们的值
常用的伪列:rowid和rownum
rowid:表中行的存储地址,可唯一标示数据库中的某一行,可以使用该列快速定位表中的行。
rownum:查询返回结果集中的行的序号,可以使用它来限制查询返回的行数。

3.数据定义语言

用于操作表的命令
create table
alter table
truncate table
drop table

修改表的命令
alter table stu_table rename to stu_tbl;--修改表名
alter table stu_tbl rename column stu_sex to sex;--修改列名
alter table stu_tbl add (stu_age number);--添加新列
alter table stu_tbl drop(sex);--删除列
alter table stu_tbl modify(stu_sex varchar2(2));--更改列的数据类型
alter table stu_tbl add constraint pk_stu_tbl primarykey(id);--添加约束

4.数据操纵语言

select,update,delete,insert
利用现有的表创建表
create table stu_tbl_log as select id,stu_name,stu_age fromstu_tbl;--
选择无重复的行

select distinct stu_name from stu_tbl;--
插入来自其他表中的记录
insert into stu_tbl_log select id,stu_name,stu_age fromstu_tbl;

5.数据控制语言
grant,revoke
6.事务控制语言
commit,savepoint,rollback
7.SQL操作符
算术操作符:L+-*/
比较操作符:L=,!=,,>,=, 逻辑操作符:Land,or,not
集合操作符:Lunion,union all,intersect,minus
连接操作符:L||
示例中stu_tbl_log中的数据如下:
       IDSTU_NAME               STU_AGE

---------- -------------------- ----------

     1000 李华                         20

     1001accp                        20

     1003nimda                        3
stu_tbl中的数据如下:
       IDSTU_NAME            ST   STU_AGE

---------- -------------------- -- ----------

     1000李华                 男        20

     1001accp                男        20

     1002admin               男        30
示例:
select (3+2)/2 from dual;--算术操作符,结果:2.5
select * from stu_tbl where stu_age>=20;--比较操作符
select * from stu_tbl where stu_name like '%a%';--比较操作符:like
select * from stu_tbl where stu_name like 'a___';--比较操作符:like
select * from stu_tbl where stu_age in(20,30);--比较操作符:in
select * from stu_tbl where stu_age between 20 and30;--比较操作符:between
select stu_name from stu_tbl union all
select stu_name from stu_tbl_log;--集合操作符:union all,测试结果具体如下:
STU_NAME

-----------

李华

accp

admin

李华

accp

nimda

 

已选择6行。
select stu_name from stu_tbl union
select stu_name from stu_tbl_log;--集合操作符:union,测试结果具体如下:
STU_NAME

---------

accp

admin

nimda

李华
select stu_name from stu_tbl intersect
select stu_name from stu_tbl_log;--集合操作符:intersect,测试结具体如下:
STU_NAME

----------

accp

李华
select stu_name from stu_tbl minus
select stu_name from stu_tbl_log;--集合操作符:minus,测试结果如下:
STU_NAME

----------

Admin
从中可以看出:
minus是获取第一张表独有的数据
intersect是获取两张表中都有的数据
union是整合两张表的数据,都有的只显示一次
union all是纯粹的两张表数据整合
select id,stu_name||' '||stu_sex as name_sex,stu_age
from stu_tbl;--连接操作符||,测试结果具体如下:
       IDNAME_SEX                  STU_AGE

---------- ----------------------- ----------

     1000 李华   男                        20

     1001 accp  男                        20

     1002 admin 男                        30

8.SQL函数
单行函数:从表中查询的每一行只返回一个值,可出现在select子句,where子句中

日期函数

数字函数

字符函数

转换函数:ToChar(),ToDate(),ToNumber()

其他函数:

Nvl(exp1,exp2):表达式一为null时,返回表达式二

Nvl2(exp1,exp2,exp3):表达式一为null时返回表达式三,否则返回表达式二

Nullif(exp1,exp2):两表达式相等时,返回null,否则返回表达式一
分组函数:基于一组行来返回

Avg,Min,Max,Sum,Count

Group by,having
分析函数

Row_number,rank,dense_rank
示例:
select u.user_name,sum(oi.order_num*oi.order_price) astotal,row_number() over (order by sum(oi.order_num*oi.order_price)desc) as sort from order_item_tbl

  oi,user_tbl u,order_tbl  o where oi.order_id = o.id ando.user_id = u.id group by u.user_name;

 

三.锁和数据库对象

1.锁:数据库用来控制共享资源并发访问的机制。
锁的类型:行级锁,表级锁
行级锁:对正在被修改的行进行锁定。行级锁也被称之为排他锁。
在使用下列语句时,Oracle会自动应用行级锁:
insert,update,delete,select…… for update
select……for update允许用户一次锁定多条记录进行更新。
使用commit or rollback释放锁。
表级锁:
lock table user_tbl in mode mode;
表级锁类型:
行共享 row share
行排他 row exclusive
共享 share
共享行排他 share row exclusive
排他 exclusive
死锁:两个或两个以上的事务相互等待对方释放资源,从而形成死锁
2.数据库对象
oracle数据库对象又称模式对象
数据库对象是逻辑结构的集合,最基本的数据库对象是表
数据库对象:

表,序列,视图,索引

序列
用于生成唯一,连续序号的对象。
创建语法:
create sequence user_id_seq
start with 1000
increment by 1
maxvalue 2000
minvalue 1000
nocycle
cache 1000;--指定内存中预先分配的序号
访问序列:
select user_id_seq.currval from dual;
select user_id-seq.nextval from dual;

更改删除序列:
alter sequence user_id_seq maxvalue 10000;--不能修改其start with 值
drop sequence user_id_seq;
在Hibernate中访问序列:

     
user_id_seq

 

视图
以经过定制的方式显示来自一个或多个表的数据
创建视图:
create or replace view
user_tbl_view (vid,vname,vage)
as select id,user_name,age from user_tbl
[with check option]|[with read only];
创建带有错误的视图:
create force view user_tbl_force_view as
select * from user_table;--此时user_table可以不存在
创建外联接视图:
create view user_stu_view as
select u.id,u.user_name,u.password,s.ddress
from user_tbl u,stu_tbl s
where u.s_id(+)=s.id;--哪一方带有(+),哪一方就是次要的
删除视图:
drop user_stu_view;

 

索引
用于提高SQL语句执行的性能
索引类型:
唯一索引,位图索引,组合索引,基于函数的索引,反向键索引

创建标准索引:
create index user_id_index on user_tbl(id) tablespaceschooltbs;
重建索引:
alter index user_id_index rebuild;
删除索引:
drop index user_id_index;

创建唯一索引:
create unique index user_id_index on user_tbl(id);
创建组合索引:
create index name_pass_index on user_tbl(user_name,password);
创建反向键索引:
create index user_id_index on user_tbl(id) reverse;

 

四.使用PL/SQL

可用于创建存储过程,触发器,程序包,给SQL语句的执行添加程序逻辑。
支持SQL,在PL/SQL中可以使用:

数据操纵命令
事务控制命令
游标控制
SQL函数和SQL运算符

支持面向对象编程(OOP)

可移植性

更佳的性能,PL/SQL经过编译执行

 

分为三个部分:声明部分,可执行部分和异常处理部分
[declare
declarations]
begin
executable statements
[exception
handlers]
end;

打开输出
set serverout on;

 

--根据输入编号获取某学员的成绩--if

declare

score user_tbl.score%type;

begin

select score into score from user_tbl where id='&id';

if score>90 then

dbms_output.put_line('优秀');

elsif score>80 then

dbms_output.put_line('良好');

elsif score>60 then

dbms_output.put_line('及格');

else

dbms_output.put_line('差');

end if;

end;

 

--根据学员姓名获取某学员的成绩--if

declare

score user_tbl.score%type;

begin

select score into score from user_tbl whereuser_name='&name';

if score>90 then

dbms_output.put_line('优秀');

elsif score>80 then

dbms_output.put_line('良好');

elsif score>60 then

dbms_output.put_line('及格');

else

dbms_output.put_line('差');

end if;

end;

 

--case的使用

declare

grade user_tbl.grade%type;

begin

select grade into grade from user_tbl where id='&id';

case grade

when 'A' then dbms_output.put_line('优异');

when 'B' then dbms_output.put_line('优秀');

when 'C' then dbms_output.put_line('良好');

else dbms_output.put_line('一般');

end case;

end;

 

--基本循环

declare

i number(4):=1;

begin

loop

dbms_output.put_line('loop size:'||i);

i:=i+1;

exit when i>10;

end loop;

end;

 

 

--while循环

declare

i number(4):=1;

begin

while i

dbms_output.put_line('while loop size='||i);

i:=i+1;

end loop;

end;

 

--for循环

declare

i number(4):=1;

begin

for i in 1..10 loop

dbms_output.put_line('for loop Size:'||i);

end loop;

end;

 

declare

i number(2):=1;

j number(2):=1;

begin

for i in reverse 1..9 loop

for j in 1..i loop

dbms_output.put(j||'x'||i||'='||j*i||' ');

end loop;

dbms_output.put_line('');

end loop;

end;

 

--动态SQL

declare

userId number(2);

sql_str varchar2(100);

userName user_tbl.user_name%type;

begin

execute immediate 'create table testExe(id number,test_namevarchar2(20))';

userId:='&userId';

sql_str:='select user_name from user_tbl where id=:id';

execute immediate sql_str into userName using userId;

dbms_output.put_line(userName);

end;

(or

declare

 id_param number:='&id_param';

 sql_str varchar2(100);

 name_param stu_tbl.stu_name%type;

 begin

 sql_str:='select stu_name from stu_tbl whereid=:p';

 execute immediate sql_str into name_paramusing id_param;

 dbms_output.put_line(name_param);

 end;

 /

)

 

--异常处理

declare

grade number(4);

begin

grade:='&grade';

case grade

when 1 then dbms_output.put_line('好的');

--else dbms_output.put_line('不好');

end case;

exception

when case_not_found then

dbms_output.put_line('输入类型不匹配!');

end;


--系统异常

declare

rowD user_tbl%rowtype;

begin

select * into rowD from user_tbl;

dbms_output.put_line(rowD.id||''||rowD.user_name||''||rowD.password);

exception

when too_many_rows then

dbms_output.put_line('不能将多行赋予一个属性!');

end;

or

declare

rowD user_tbl%rowtype;

begin

select * into rowD from user_tbl where id=5;

dbms_output.put_line(rowD.id||' '||rowD.user_name||''||rowD.password);

exception

when too_many_rows then

dbms_output.put_line('不能将多行赋予一个属性!');

when no_data_found then

dbms_output.put_line('没有您要查找的数据!');

end;

 

--自定义错误

declare

invalidError exception;

category varchar2(20);

begin

category:='&category';

if category not in('附件','顶盘','备件') then

raise invalidError;

else

dbms_output.put_line('您输入的类别是:'||category);

end if;

exception

when invalidError then

dbms_output.put_line('无法识别的类别!');

end;

 

--引发应用程序异常

declare

app_exception exception;

grade user_tbl.grade%type;

begin

select grade into grade from user_tbl whereid=&id;

if grade='A' then

raise app_exception;

else

dbms_output.put_line('查询的等级为:'||grade);

end if;

exception

when app_exception then

raise_application_error(-20001,'未知的等级!');

end;


五、游标管理

游标类型:隐式游标,显式游标,REF游标

REF游标用于处理运行时才能确定的动态SQL查询的结果

 

==========隐式游标==========

在PL/SQL中使用DML语句时自动创建隐式游标
隐式游标自动声明、打开和关闭,其名为SQL

隐式游标的属性:
%found       SQL语句影响实质后返回true
%notfound    SQL语句没有影响实质后返回true
%rowcount    SQL语句影响的行数
%isopen      游标是否打开,始终为false

示例:

begin

update user_tbl set score=score+5;

if SQL%found then

   dbms_output.put_line('数据被更改: '||SQL%rowcount);

elsif sql%notfound then

   dbms_output.put_line('没有找到数据!');

end if;

if SQL%isopen then

   dbms_output.put_line('Open');

else

   dbms_output.put_line('Close');

end if;

end;

 

==========显式游标==========

在PL/SQL的声明部分定义查询,该查询可以返回多行

       声明游标

       打开游标

       从游标中取回数据

       关闭游标

声明游标完成两个任务:

给游标命名

将一个查询与游标关联
cursor cursor_name is select statement;

打开游标:

    opencursor_name;

取数据:

    fetchcursor_name into record_list;

关闭游标:

    closecursor_name;

显式游标的属性:

%found       执行最后一条fetch语句成功返回行时为true

%notfound    执行最后一条fetch语句未能返回行时为true

%rowcount    返回到目前为止游标提取的行数

%isopen       游标是否打开

 

示例:

declare

users user_tbl%rowtype;

cursor boys_cur is select * from user_tbl where sex='h';

begin

open boys_cur;

loop

fetch boys_cur into users;

exit when boys_cur%notfound;

dbms_output.put_line(users.user_name||' '||users.password);

dbms_output.put_line(boys_cur%rowcount);

end loop;

close boys_cur;

end;

 

带参的显式游标

declare

users user_tbl%rowtype;

cursor boys_cur(sexParam varchar2)

is select * from user_tbl where sex=sexParam;

begin

open boys_cur('&sex');

loop

fetch boys_cur into users;

exit when boys_cur%notfound;

dbms_output.put_line(users.user_name||' '||users.password);

dbms_output.put_line(boys_cur%rowcount);

end loop;

close boys_cur;

end;

 

使用显式游标更新行

declare

cursor user_update_cur is select sex from user_tbl forupdate;

usersex user_tbl.sex%type;

begin

open user_update_cur;

loop

fetch user_update_cur into usersex;

exit when user_update_cur%notfound;

dbms_output.put_line(usersex);

if usersex = 'M' then

    updateuser_tbl set score=score-5 where current of user_update_cur;

else

    updateuser_tbl set score=score+5 where current of user_update_cur;

end if;

end loop;

close user_update_cur;

commit;

end;

 

循环游标

declare

cursor user_cur is select * from user_tbl;

begin

for username in user_cur loop

   dbms_output.put_line(username.user_name||' '||username.sex);

end loop;

end;

 

==========REF游标==========

REF游标和游标变量用于处理运行时动态执行的SQL查询

创建游标变量的步骤:

       声明REF游标类型

       声明REF游标类型的变量

声明类型的语法

Type ref_cursor_name is ref cursor [return return_type];

打开游标变量的语法

Open cursor_name for select_statement;

----声明强类型的游标

declare

type ref_cur is ref cursor return user_tbl%rowtype;

users_cur ref_cur;

----声明弱类型的游标

declare

type ref_cur is ref cursor;

users_cur ref_cur;

示例

----强类型

declare

type ref_cur is ref cursor return user_tbl%rowtype;

users_cur ref_cur;

users user_tbl%rowtype;

begin

open users_cur for select * from user_tbl whereuser_name='ny2t92';

loop

    fetchusers_cur into users;

    exit whenusers_cur%notfound;

   dbms_output.put_line(users.user_Name);

end loop;

close users_cur;

end;

----弱类型

declare

type ref_cur is ref cursor;

my_cur ref_cur;

users user_tbl%rowtype;

stus stu_tbl%rowtype;

begin

open my_cur for select * from user_tbl;

loop

    fetchmy_cur into users;

    exit whenmy_cur%notfound;

   dbms_output.put_line(users.user_Name);

end loop;

close my_cur;

open my_cur for select * from user_tbl whereuser_name='ny2t92';

loop

    fetchmy_cur into users;

    exit whenmy_cur%notfound;

   dbms_output.put_line(users.user_Name);

end loop;

close my_cur;

open my_cur for select * from stu_tbl;

loop

fetch my_cur into stus;

exit when my_cur%notfound;

dbms_output.put_line(stus.stu_Name);

end loop;

close my_cur;

end;

----动态SQL游标

declare

type ref_cur is ref cursor;

my_cur ref_cur;

users user_tbl%rowtype;

username varchar2(20);

sqlstmt varchar2(200);

begin

username:='&username';

sqlstmt := 'select * from user_tbl where user_name= :name';

open my_cur for sqlstmt using username;

loop

    fetchmy_cur into users;

    exit whenmy_cur%notfound;

   dbms_output.put_line(users.user_Name);

end loop;

close my_cur;

end;

 

 

六.子程序

子程序分为:存储过程和函数,它是命名的PL/SQL块,编译并存储在数据库中。

子程序的各个部分:声明部分,可执行部分,异常处理部分。

过程----执行某些操作

函数----执行操作并返回值

 

==========存储过程==========

创建过程的语法:

create or replace procedure

proce_name (parameter_list)

is|as

local variable declaration

begin

executable statements

exception

exception_handlers

end proce_name;

 

过程参数的三种模式:

In----用于接收调用的值,默认的参数模式

Out----用于向调用程序返回值

In out----用于接收调用程序的值,并向调用程序返回更新的值

执行过程的语法:

Execute proce_name(parameter_list);

Declare

Variable var_list;

Begin

Proce_name(var_list);

End;

将过程执行的权限授予其他用户:

Grant execute on proce_name to scott;

Grant execute on proce_name to public;

删除存储过程:

Drop procedure proce_name;

 

==========函数==========

创建函数的语法:

Create or replace function

Fun_name (parameter_list)

Return datatype is|as

Local declarations

Begin

Executable statements;

Return result;

Exception

Exce_handlers;

End;

函数只能接收in参数,不能接受out或in out参数,形参不能是PL/SQL类型

函数的返回类型也必须是数据库类型

访问函数的方式:

       使用PL/SQL块

       使用SQL语句

Select fun_name(parameter_list) from dual;



source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!