Oracle表的创建、修改、字段约束

第一节课:创建表和字段讲解
					--创建表学习
					1、	创建表的基本语句:create table 表名(字段名 类型,字段名 类型,字段名 类型....)
						创建学生表:学号,姓名,性别,年龄,qq号,邮箱。
						create table student(
						   snum number(10),---指定学号的数字长度为10
						   sname varchar2(100),---指定姓名的存储上限为100个字节
						   sex char(4),
						   age number,
						   qq number,
						   sal number(6,2),--指定工资的整数位为6和小数位为2
						   mail varchar2(50)
						)
					2、字段类型
						number类型:数字类型,用来声明存储数字的字段。 number(指定数字的整数长度,指定数字的小数位长度)
						varchar2类型:字符类型,用来声明存储字符的字段。会根据存储的数据自动增长大小,varchar2(存储上限)
						char类型:字符类型,用来声明存储字符的字符。会开辟指定大小的内存来存储数据。
							区别1:char的存储效率高于varchar2
							区别2:char是开辟指定大小的内存空间,varchar2是根据数据大小来开辟空间的大小
						date类型:存储日期类型
				第二节课:修改表学习:
					修改表
					在命令窗口查看表结构 desc 表名
					添加新字段  alter table 表名 add 字段名 类型
						 alter table student add phone number(11)
					修改字段类型     alter table 表名 modify 字段名 类型
						 alter table  student modify sname varchar2(200)
					删除字段    alter table 表名 drop column 字段名
						 alter table student drop column phone
					修改表名 rename 表名 to 新的表名
						rename student to stu
						rename stu to student 
					删除表   drop table 表名
						drop table student
				第三节课:约束学习(根据情况切分成两节课)
					select * from student for update
					添加数据
					问题1:学号重复了,数据还可以插入成功
						insert into student(snum,sna,sex,age,qq,sal,mail)values('123','张三','男',18,12345678,88.88,'12345678@qq.com')
						insert into student values(123,'李四','男',18,7890122,88.99,'7890122@qq.com')
					问题2:姓名可以为空。
						insert into student values(456,'柳岩','女',18,666999,99.66,'666999@qq.com')
						insert into student (snum,sex,age,qq,sal,mail) values(789,'女',18,888444,99.66,'888444@qq.com')
					问题3:性别不但可以为空,还可以为其他不知道的字符
						insert into student (snum,sna,age,qq,sal,mail) values(108,'景甜',18,000999,99.66,'000999@qq.com')
						insert into student (snum,sna,sex,age,qq,sal,mail) values(102,'景甜','a',18,000999,99.66,'000999@qq.com')
						insert into student (snum,sna,sex,age,qq,sal,mail) values(102,'景甜','女',18,000999,99.66,'000999@qq.com')
					问题4:年龄可以超过200
						insert into student (snum,sna,sex,age,qq,sal,mail) values(103,'唐嫣','女',23,78900,99.66,'78900@qq.com')
						insert into student (snum,sna,sex,age,qq,sal,mail) values(103,'唐嫣','女',230,78900,99.66,'78900@qq.com')
					问题5:qq号一致
						insert into student (snum,sna,sex,age,qq,sal,mail) values(104,'关晓彤','女',19,111000,99.66,'111000@qq.com')
						insert into student (snum,sna,sex,age,qq,sal,mail) values(105,'袁华','男',22,111000,99.66,'111000@qq.com')
					--------------------------------------------------------------------------------------------------------
					约束学习:
					create table student(
					   snum number(10),--primary key,--使用主键约束
					   sna varchar2(100), --not null,
					   sex char(4), --default '男' check(sex='男' or sex='女') not null,
					   age number check(age>0 and age<120),
					   qq number, --unique,
					   sal number(6,2),
					   mail varchar2(50)
						-- constraints pk_student_snum primary key(snum)
					  -- constraints ck_student_sna check(sna is not null)
					 -- constraints ck_student_sex  check(sex ='男' or sex='女')
					 --constraints uk_student_qq unique(qq)
					)
					alter table student add constraints pk_student_snum primary key(snum);--在创建表后添加主键
					alter table student drop constraints pk_student_snum--删除主键

					alter table student modify sna varchar2(100) not null;--添加非空约束
					alter table student modify sna varchar2(100) null;--修改字段为空

					alter table student add constraints ck_student_sex check(sex='男' or sex='女')--添加检查约束
					alter table student drop constraints ck_student_sex --删除检查约束

					alter table student add constraints uk_student_qq unique(qq)
					alter  table student drop constraints uk_student_qq

					drop table student
					问题1:学号重复了,数据还可以插入成功
						使用主键约束:学号是唯一标识一条数据的,所以必须唯一且不能为空
							   ---(1)、在确定为主键的字段后添加 primary key关键字
							   ---(2)、在创建表的后面使用:constraints pk_表名_字段名 primary key(字段名)
							   --(3)、在创建表后使用 alter table 表名 add constraints pk_表名_字段名 primary key(字段名);
							   --删除主键:alter table 表名 drop constraints pk_表名_字段名
					问题2:姓名可以为空。
						使用非空约束
							   ---(1)、创建表的时候在字段后面添加not null
							   ---(2)、在创建表字段后使用 constraints ck_表名_字段名 check(字段名 is not null)  了解
							   --(3)、在创建表后使用alter table 表名 modify 字段名 类型 not null;
							   ---(4)、修改字段可以存储空值:alter table 表名 modify 字段名 类型 null;
					问题3:性别不但可以为空,还可以为其他不知道的字符
						使用检查约束
							  ---(1)、创建表的时候在字段后使用 default 值 check(条件),
							  ---------但是会允许空值的出现,并且默认值只有在字段不声明的情况下生效
							  ---(2)、在创建表所有字段后使用:constraints ck_表名_字段名  check(条件)
							  ---(3)、在创建表后使用:alter table 表名 add constraints ck_表名_字段名 check(条件)
					问题4:年龄可以超过200 
							 --使用检查约束条件
					问题5:qq号一致
							使用唯一约束
							 --(1)、在字段后直接使用unique关键字
							 --(2)、在所有字段后使用:constraints uk_表名_字段名 unique(字段名)
							 --(3)、 alter table 表名 add constraints uk_表名_字段名 unique(字段名)
							 --删除唯一约束:alter table 表名 drop constraints uk_表名_字段名
				第四节课:外键约束学习:
						创建学生表
							create table stu(
								   snum number(10) primary key,
								   sname varchar2(100) not null,
								   sex  char(4) check(sex='男' or sex='女'),
								   cinfo number(10)-- references clazz(cid)--外键 
								  -- constraints fk_stu_cinfo foreign key(cinfo) references clazz(cid)
							)
							alter table stu add constraints fk_stu_cinfo foreign key(cinfo) references clazz(cid) on delete cascade--添加外键
							alter table stu add constraints fk_stu_cinfo foreign key(cinfo) references clazz(cid) on delete set null--添加外键


							alter table stu drop constraints fk_stu_cinfo --删除外键
							drop table stu
						创建班级表
							create table clazz(
								   cid number(10) primary key,
								   cname varchar2(100) not null,
								   cdesc varchar2(500) 

							)
						创建班级表数据
							insert into clazz values(1,'软件01班','最厉害的班级');
							insert into clazz values(2,'软件02班','挂科最多的班级');
							insert into clazz values(3,'508班','大牛和最帅的班级');
							select * from clazz
							delete from clazz where cid=1
						创建学生数据
							insert into stu values(1002,'张三','男',1);
							insert into stu values(1003,'李四','女',2);
							insert into stu values(1004,'王五','男',3);
							insert into stu values(1005,'赵四','男',4);
							select * from stu
						问题1:在插入学生信息的时候,出现了不存在的班级信息?
							   使用外键约束
								   --(1)、在字段后使用 references 参照表表名(参照字段)
								   --(2)、在所有字段后使用 constraints fk_表名_字段名 foreign key(字段名) references 参照表名(参照字段名)
								   --(3)、在创建表后使用alter table 表名 add constraints fk_表名_字段名 foreign key(字段名) references 参照表名(参照字段名)
								   --删除外键 alter table 表名 drop constraints fk_表名_字段名

							select table_name from all_all_tables where owner='SCOTT'

						问题2:在删除父表数据的时候需要先删除子表数据?
								解决方式1:先解除主外键关联,然后删除数据,再然后添加主外键关联
								解决方式2:在创建外键的时候使用级联操作。
										   --在创建外键时 on delete cascade
										   --在创建外键时 on delete set null
								怎么选取外键?
									一般将主表的主键作为子表的外键
								外键的值能为 not null? 不建议在外键后使用非空约束

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值