| 
| 
| 实战 J2EE 开发购物网站 创建数据表 |  
| 时间:2014-05-04 10:04:06  来源:不详  作者:佚名 |  
| 
 | 在上一贴中,我们掌握 OEM(Oracle Enterprise Ma
 但是事实上,用SQL语言书
 ,如果大家喜欢窗口的开发
 
 | 了些基本的oracle操作,如创建 nager)可视化的窗口环境中,虽
 写在开发上更有效率!!oracle
 环境,用SQLPlus Worksheet也
 
 | 、授权用户,创建数据库等。在 然我们也可以很方便地做这些事,
 提供的SQL*Plus就是个不错的工具
 行!下面说点基本的西西!
 
 | 
 
 | SQL(Structure Query 集合的描述性非过程化语言
 
 | Language)语言是结构化查询语 。
 
 | 言,是数据库的核心语言,是面向 
 
 | 
 | SQL语言共分为四大类 控制语言DCL。
 
 | :数据查询语言DQL,数据操纵语 
 
 | 言DML,数据定义语言DDL,数据库 
 
 | 
 
 | 1.数据查询语言DQL的基本结构是由s 
 | elect子句,from子句,where子句组成的查询块: 
 | 
 | select <字段名表> from <表或视图名> where <查询条件> | 
 
 
 | 2.数据操纵语言DML完成在数据库中 部分常用DML语句):
 
 | 确定、修改、添加、删除某一数据值的任务(以下是 
 
 | 
 
 | 3.数据定义语言DDL完 据库元素(以下是部分常用D
 
 | 成定义数据库的结构,包括数据 DL语句)
 
 | 库本身、数据表、目录、视图等数 
 
 | 
 | alter table  增加表列,重定义表列,更改存储分配 | 
 
 | 4.数据库控制语言DCL用来授予或回 生的时间及效果,对数据库实行监视等。
 
 | 收访问数据库的某种特权,并控制数据库操纵事务发 如:
 
 | 
 | roll    回滚,是 此更改时,oracle所采取的
 前最后提交的状态。
 
 | 当某个对话更改了数据库中的数 保护操作。这是一个把信息恢复
 
 
 | 据后,由于某种原因用户不想提交 到用户使update、insert、delete
 
 
 | 
 | commit    提交。 库才算完成,有提交前只有
 。
 
 | 在完成数据库的插入,删除和修 操作数据库的本人才能看到,别
 
 
 | 改操作时,只有当事务提交到数据 人只有在最后提交完成才可以看到
 
 
 | 
 
 | 接下来,我们在SQL*Plus中实战一下,为我们下面将要做的打好基础。 | 
 | 用system登陆到SQL*Pl 
 | us后,我们做如下操作(这次没 
 | 有截图,有详细的说明) 
 | 
 | SQL>create user maxuan identified by max; #创建口令为max的用户maxuan | 
 
 | SQL>grant connect,resource to maxuan; #为用户maxuan授权 | 
 
 | SQL>conn maxuan/max; #以用户maxuan进行连接 | 
 
 | L>create table test(a number); #建立一个名为test的表,只有字段名为A的一列,数据类型为数字 | 
 
 | SQL>insert into test values(1); #插入一条记录 | 
 
 | SQL>select * from test; #查询记录,此时A列的第一行为1 | 
 
 | SQL>update test set a=2; #更改记录,此时A列的第一行已改为2 | 
 
 
 | SQL>delete from test; #删除test表中所有的记录,此时test表中没有记录 | 
 
 | SQL>roll; #回滚到提交前,此时再查询test表,A列第一行值又回复到2 | 
 
 
 
 | 在数据库中创建数据表的时候,我们 character,numberic,date,lob和raw等,
 定义数据类型!
 
 | 需要定义表中所有字段的类型,数据类型大致分为: 这些是最基本的数据类型。当然在oracle中也允许自
 
 
 | 
 
 | 在oracle中提供的character数据类型: | 
 | char():固定长度字符串,最大长度为2000字节,如果不指定长充,缺省为1个字节长。 | 
 
 | varchar2():可变长度的字符串,最大长度为4000字节,具体定义时指明最大长度,这咱类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。如果数据长度没有达到最大值,oracle会根据数据大小自动调节字段长度。是 | 
 
 
 | nchar():根据字符集而定的固定长度字符串,最大长度2000字节。 | 
 
 | nvarchar2():根据字符集而定的可变长度字符串,最大长度4000字节。 | 
 
 | long:可变长字符列,最大长度限制 型是一个遗留下来的而且将来不会被支持
 类型所取代。
 
 | 为2GB,用于不需要作字符串搜索的长串数据。此类 的数据类型,逐渐被BLOB,CLOB,NCLOB等大的数据
 
 
 | 
 
 | numberic数据类型用来 numberic数据类型:
 
 | 存储负的和正的整数,分数和浮 
 
 | 点型数据,在oracle中提供的 
 
 | 
 | number(,):可变长的数值列,允许0、正值及负值,m是所有的有效数字的位数,n是小数点以后的位数。 | 
 
 
 | date:缺省格式是dd-mon-yy(日-月-年) | 
 
 | blob、clob、nclob: 件,如word文档,以及音频
 部保存。
 
 | 三种大型对象(lob),用来保存 、视频等非文本文件,最大长充
 
 
 | 较大的图形文件或带格式的文本文 是4GB。晕些数据存储在数据库内
 
 
 | 
 | bfile:在数据库外部保存的大型二进 通过数据库记录变化情况,但是数据的具
 
 | 制对象文件,最大长度是4GB,这种外部的LOB类型, 体保存是在数据库外部进行的。
 
 | 
 
 | raw():可变长二进制数据,具体定义字段时必须指明最大长度,这种格式用来保存较小的图形文件或带格式的文本文件,它也是一种较老的数据类型,将被lob数据类型所取代。 | 
 
 | long raw:可变长二进 本文件,以及音频、视频等
 代。
 
 | 制数据,最大长度是2GB,可以 非文本文件,这也是一种较老的
 
 
 | 用来保存较大的图形或带格式的文 数据类型,将被lob数据类型所取
 
 
 | 
 
 | rowid:这是oracle数据 
 | 表中的一个伪例,它是数据表中 
 | 每行数据内在的唯一标识 
 | 
 
 
 | 现在我们回到用J2EE体系开发购物网站的主题,开始实战建购物网站的后台数据库。 | 
 | 为了实现购物网站的基本的功能,我 表(item)、订单列表(orders)和管理员列
 
 | 们需要建立四个表:商品列表(products)、商品类型 表(admin)。表结构如下所示:
 
 | 
 
 | type_id  INTEGER(自动编号)  否  主键  商品类别ID标记 | 
 | type  varchar2(30)  否    商品类别名称 | 
 
 | product_id  INTEGE 
 | R(自动编号)  否  主键 
 | 商品ID标记 
 | 
 | title  varchar2(30)  否    商品名称 | 
 | type_id  INTEGER    否  外键  商品类别标记 | 
 | price  number(16,2)  否    商品价格 | 
 
 | order_id  INTEGER(自动编号)  否  主键  订单ID标记 | 
 | address  varchar2(100)  是    发货地址 | 
 | email  varchar2(30)  否    联系email | 
 | product_id  INTEGER    否  外键  商品标记 | 
 | uword  varchar2(100)  是    顾客留言 | 
 
 | admin_id  INTEGER(自动编号)  否  主键  管理员ID标记 | 
 | adminname  varchar2(20)  否    管理员名称 | 
 | password  varchar2(20)  否    管理员密码 | 
 
 | 创建表我想已经不是什么难事了,那 之间的关联,还有自动编号。
 
 | 么我们要注意的是product、item、orders这三个表 
 
 | 
 
 | 下面是完整的SQL语句 也可以将它存为SQL脚本文
 直接拷贝到SQL*Plus里执行
 
 | ,在后面我会给出详细的说明, 件,在SQL*Plus或SQLPlus Work
 !
 
 | 你可以在SQL*Plus里对照着输入, sheet里执行。当然也可以把代码
 
 
 | 
 
 | type_id integer not null, | 
 | constraint item_pk primary key(type_id) | 
 
 | product_id integer not null, | 
 | title varchar2(30) not null, | 
 | type_id integer not null, | 
 | price number(16,2) not null, | 
 | constraint product_p 
 | k primary key (product_id), 
 | 
 | constraint product_fk foreign ke 
 | y(type_id) references item(type_id) 
 | 
 
 | order_id integer not null, | 
 | name varchar2(20) not null, | 
 | email varchar2(30) not null, | 
 | product_id integer not null, | 
 | constraint orders_pk 
 | primary key(order_id), 
 | 
 | constraint orders_fk foreign key 
 | (product_id) references product(product_id) 
 | 
 
 | admin_id integer not null, | 
 | adminname varchar2(20) not null, | 
 | password varchar2(20) not null, | 
 | constraint admin_pk primary key( 
 | admin_id) 
 | 
 
 | create sequence type 
 | _id increment by 1 start wit 
 | h 1; 
 | 
 | create sequence prod 
 | uct_id increment by 1 start 
 | with 1; 
 | 
 | create sequence order_id increme 
 | nt by 1 start with 1; 
 | 
 | create sequence admin_id increme 
 | nt by 1 start with 1; 
 | 
 
 
 | product、item、o 存在两种类型的键:主键(P
 一,在表product中,produ
 product_id就是外部键。一
 了吧!
 
 | rders三个表通过公共域,通常 rimary key)和外部键(Foreign
 ct_id为主键,表orders中也包
 个表的外部键从其它表中获取信
 
 
 | 称为键域(Key Field)进行关联, key)。主键使表中的数据行保持唯
 含有product_id,此时的
 息。看看上面的SQL语句,应该会
 
 
 | 
 
 | 在access中有自动 记录时不用操作此字段,会
 立一个自动增长的序列号,
 此功能,我们可以把数据从
 
 | 编号的数据类型,MSSQL和MYSQL 自动获得数据值,而oracle没有
 插入记录时要把序列号的下一个
 ACCESS、MSSQL或MYSQL迁移到or
 
 | 也都有自动增长的数据类型,插入 自动增长的数据类型,我们需要建
 值赋于此字段,可以预见的是,有
 acle了!
 
 | 
 | create sequence type 
 | _id increment by 1 start wit 
 | h 1; 
 | 
 | 这句中,type_id为序列号的名称,每次增长为1,起始序号为1。 | 
 |  |  |  |