Oracle 学习第二天

直接见笔记

/*
数据表的创建

create table 数据表的名字
(
	列名 数据类型 ···,
	列名 数据类型 ···,
	列名 数据类型 ···,
	-- 添加约束
	-- 添加主键
	constraint 约束名 primary key(列名),
	-- 添加外键约束
	constraint 约束名 foreign key(列名) references 数据表名(数据表中的列名),
	-- 添加唯一约束
	constraint 约束名 unique(列名),
	-- 添加条件约束
	constraint 约束名 check(条件)
	-- 最后一条语句千万不要加','号
);
在···处这些约束都可以添加,除此以外还可以添加not null,default()等约束
但是只推荐在哪些地方创建not null,default()的约束,对于其他约束建议不要在定义列的时候添加
在下面或者外面添加的好处在以后添加数据报错的时候可以知道是违背的什么约束,可以定位到列
在外面定义约束见下:
alter table 表名 add constraint constraint 约束名 primary key(列名);
alter table 表名 add constraint constraint 约束名 foreign key(列名) references 数据表名(数据表中的列名);
alter table 表名 add constraint constraint 约束名 unique(列名);
alter table 表名 add constraint constraint 约束名 check(条件);
-- 不为为空,这是与其他的不同
alter table 表名 modify 列名 not null;
-- 在 oracle 中数据若没有输入 则认为是 null 
*/

create table TestContent
(
	TID int,-- primary key 不推荐这种方式,
	TITLE varchar2(100) not null,
	CONTENTS clob not null,
	PUBTIME date not null,
	CONTYPE nvarchar2(100) default('杂谈'),
	USERID int not null,
	-- 添加主键
	constraint PK_TESTCONTENT_TID primary key(TID),
)
-- 添加外键
alter table TestContent add constraint FK_TESTCONTENT_USERID 
foreign key(USERID) references TESTUSERS(USERID);

create table TestUsers
(
	USERID int,
	USERNAME char(6) not null,
	USERSEX int default(1), -- 1 代表男 0代表女
	USERPOINT number(9,2) default(20),
	-- 添加约束
	constraint PK_TESTUSERS_USERID primary key(USERID),
	constraint UQ_TESTUSES_USERNAME unique(USERNAME)
	constraint CK_TESTUSERS_USERSEX check(USERSEX in(0,1))
	--等价于
	--constraint CK_TESTUSERS_USERSEX check(USERSEX = 0 or USERSEX = 1)
)

/*
几点说明:
	约束名并不强制你取什么名字,只要符合规范,不是关键字即可
	但是我们一般都会有统一的风格
	例如我这里是 约束名简写_表名_被约束的列名

	约束名简写 	约束名
	PK 			primary key
	FK 			foreign key
	UQ 			unique
	CK 			check

	另外要强调的是外键
	外键的含义是指本表中的这一列一定存在于另外一个表中的某一固定列中
	外键引发了几个概念
	主表 外键含义中的另一表
	子表 外间含义中的本表
	最后要说的是子表中的被借鉴的那一列的列名和子表中的外键的那一列的列名不强制要相等

	数据类型
	int				整数
	float			浮点数
	number			整数+浮点数
	
	char(n)			定长 最大长度为n 长度不为n的也占n个字节 查询比下面一个要快
	nchar(n)		变长 最大长度为n	
	varchar2(n)		定长 支持unicode编码,在这种情况下一个中文和字母占的字节数相同,
					此时的n指最大个数 查询比下面一个要快
	nvarchar2(n)	变长 支持unicode编码,在这种情况下一个中文和字母占的字节数相同,
					此时的n指最大个数
	long			淘汰 可占用4GB的内容

	date			固定 占7个字节

	lob				8-12TB 可分层处理
	clob			字符大对象 一般用来存文章之类的内容
	blob			用于存储二进制文件
*/
-- 删除主键
-- alter table 数据表名 drop primary key
-- 例子
alter table TestUsers drop primary key
-- 其余我也不太清楚 希望有时间去补充

/*
最后讲一点概念行的内容
优秀的数据库的设计有哪些好处
	1· 减少数据的冗余 节省空间
	2· 保证数据的完整性 保存完整的数据信息
	3· 方便应用程序的开发
如何设计?
	1· 看经验
	2· 满足一些范式(6 种范式)
我们一般设计数据库要达到三范式,范式是向上兼容的(我是这样理解的)
即 如满足二范式就一定满足一范式
范式是一把双刃剑,为什么这样说???待补充吧(数据库原理没好好学,见谅)
一范式
	列的原子性 即一个列的信息不可能在拆成两个列更小的信息
二范式
	行的唯一性 即每一行数据都是不同的 都是可区分的
三范式
	一个表若含有其他表中的数据 那么这个数据只可能是那张表的主键
一般只要满足这三点即可

数据的完整性
	域的完整性		保证列级数据的正确性
		数据类型
		默认约束	制定默认值
		非空约束	必填 不为 null
		条件约束	满足一定的条件
		外键约束
	实体完整性		保证行级数据的完整性
		主键约束	这一列的数据不可以重复 即唯一标识一行数据 一张表只用一个
		唯一键约束	保证列的数据不重复 一张表可有多个
	引用完整性		保证标语标准间数据的完整性
		外键约束
	自定义完整性	保证数据满足自定义的完整性
		触发器
*/

-- 删除表
drop table 数据表名
-- 若这个表中的某个列是其他表的外键(姑且这么说) 那么这个表会删除失败

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值