Oracle学习笔记(JavaWeb)
表和约束
文章目录
表和约束
1.什么是表?
数据库中存储数据的元素称之为表。
2.创建表
2.1 基本语法
create table 表名(
列名 类型,
列名 类型
)
2.2 数据类型
类型 | 参数 | 描述 |
---|---|---|
char(n) | n取值范围1到2000 | 定长字符串,n代表字节长度。如果不指定长度,缺省为1个字节 |
varchar2(n) | n的取值范围1到4000字节 | 可变长的字符串,这种数据类型可以存储数字,字母,ASCII码字符集。 如果数据长度没有达到最大值n,oracle可以根据存储数据的大小自动调节字段的长度,如果数据前后存在空格,oracle会自动将其删除。 |
number(m,n) | m的取值范围1到38。 n的取值范围 -84到127 | 可变长的数值列,允许为0,正数,负数。m是所有有效数字的位数,n是小数点后的位数。如果数值超出了位数有效限制就会截取多余的位数。 |
date | 没有参数 | 从公元前4712年1月1日到公元4712年12月31日的所有合法日期。缺省的格式DD-MON-YY:26-04-21 |
long | 没有参数 | 可变长字符列。最大长度限制为2GB。一般用于不需要做检索的长串数据。 |
raw(n) | n的取值范围1到2000 | 可变长二进制数据。用于存储较小的文件和图形。 |
long raw | 没有参数 | 可变成的二进制数据。最大长度为2GB。用于存储较大的文件和图形。 |
blob | 没有参数 | 存储特大数据。最大长度为4GB。 |
2.3 创建表实例
CREATE TABLE STUDENT(
stuid varchar2(50),
sname char(50),
phone number(11),
classes varchar2(50),
sex char(2)
)
3. 操作表结构
3.1添加列
//添加一列
ALTER TABLE STUDENT ADD (JAVASCORE NUMBER(3,1));
//添加多列
ALTER TABLE STUDENT ADD (JAVASCORE NUMBER(3,1),PYTHONSCORE NUMBER(3,1));
3.2 删除列
//删除一列
ALTER TABLE STUDENT DROP (JAVASCORE);
//删除多列
ALTER TABLE STUDENT DROP (JAVASCORE,PYTHONSCORE);
3.3 表重命名
RENAME STUDENT TO STU;
//RENAME 旧表名 TO 新表名;
4.约束
4.1 主键约束
ALTER TABLE STU ADD CONSTRAINT PK_STUID PRIMARY KEY(STUID);
4.2 唯一约束
ALTER TABLE STU ADD CONSTRAINT UQ_PHONE UNIQUE(PHONE);
4.3 默认约束
ALTER TABLE STU modify ADDRESS default '地址不详';
4.4 检查约束
ALTER TABLE STU ADD CONSTRAINT CK_AGE CHECK(AGE BETWEEN 17 AND 22);
4.5 非空约束
CREATE TABLE CARDID (
CID VARCHAR2(20) PRIMARY KEY,
--非空约束
NATIVEPLACE VARCHAR2(30) not null,
STUID VARCHAR2(20)
)
4.6 外键约束
//一个表中可以存在多个外键约束
//主表中的外键指向是从表中的主键
//语法:ALTER TABLE 主表 ADD CONSTRAINT 外键名 FOREIGN KEY (主表的外键字段) REFERENCES 从表名(从表主键);
ALTER TABLE STU ADD CONSTRAINT FK_TID FOREIGN KEY (TID) REFERENCES CARDIDSS(TID);
5.数据库设计三范式
5.1第一范式(确保每列保持原子性)
第一范式是最基本的范式,如果数据库表中的所有字段都是不可分解的原子值那么就说明该数据库
第一范式。
错误实例:
编号 | 姓名 | 性别 | 家庭地址 |
---|---|---|---|
1001 | xx | 男 | 四川省南充市小毛村 |
1002 | xx | 男 | 辽宁省锦州市小曹村 |
1003 | xx | 女 | 安徽省淮南市小吴村 |
正确实例:
编号 | 姓名 | 性别 | 省份 | 城市 | 详细地址 |
---|---|---|---|---|---|
1001 | xx | 男 | 四川省 | 南充 | 小毛村 |
1002 | xx | 男 | 辽宁省 | 锦州 | 小曹村 |
1003 | xx | 女 | 安徽省 | 淮南 | 小吴村 |
5.2第二范式(确保表中的每列都和主键有关)
第二范式是建立在第一范式基础上,第二范式需要确保数据库表中的每一列都和主键有关,而不是只与
主键的某一部分相关(主要针对于联合主键)。也就是说一个数据库表中只能存储一种数据,不能把多种数据
保存在同一个表中。
错误实例
订单编号 | 商品编号 | 商品名称 | 商品价格 | 客户姓名 | 所属单位 | 联系方式 |
---|---|---|---|---|---|---|
1001 | 8001 | 兰蔻小黑瓶 | 1399 | 冯超 | shenxxxx | 123456 |
1002 | 8002 | 海蓝之谜面霜 | 1099 | 冯超 | xxxx | 123456 |
1003 | 8001 | 兰蔻小黑瓶 | 1399 | 王舒卉 | xxxx | 456789 |
正确实例:
客户信息表
客户编号 | 客户名称 | 所属单位 | 联系方式 |
---|---|---|---|
4001 | 冯超 | xxxx | 123456 |
4002 | 王舒卉 | xxxx | 456789 |
商品信息表
商品编号 | 商品名称 | 商品价格 |
---|---|---|
8001 | 兰蔻小黑瓶 | 1399 |
8002 | 海蓝之谜面霜 | 1099 |
订单表
订单编号 | 客户编号 | 商品编号 |
---|---|---|
1001 | 4001 | 8001 |
1002 | 4001 | 8002 |
1003 | 4002 | 8001 |
5.3 第三范式(确保每列都和主键列直接相关)
第三范式需要确保数据表中每一列都和主键直接相关而不是间接相关
错误实例:
订单编号 | 订单项目 | 负责人 | 客户编号 | 客户名称 | 客户所属单位 |
---|---|---|---|---|---|
1001 | 挖掘机 | xx | 8001 | 老毛 | 大连毛氏 |
1002 | 塔吊 | xxx | 8002 | 老曹 | 锦州曹氏 |
正确实例:
订单信息表
订单编号 | 订单项目 | 负责人 | 客户编号 |
---|---|---|---|
1001 | 挖掘机 | xx | 8001 |
1002 | 塔吊 | xxx | 8002 |
客户信息表
客户编号 | 客户名称 | 客户所属单位 |
---|---|---|
8001 | 老毛 | 大连毛氏 |
8002 | 老曹 | 锦州曹氏 |