oracle数据库表的一些基本处理
  cEe6YWJIAuf2 2023年11月13日 90 0


oracle 数据库的简单使用语法

用户的数据实际上是存在数据库的表中,所以当我们要向数据库中存放数据时,必须先创建表。

/*
创建语法 create table [<模式名 >.]<表名>(
<字段1> <类型 > [约束条件],
<字段 2> <类型 > [约束条件],
… )[tablespace <命名空间>];
*/

–创建一个班级信息表用来存放班级信息,班级信息包括班级编号、班级名称、入学年份、学制

create table classinfo01(
cid number (4),–班级编号
cname varchar2(100), --班级编号
cyear number(4),–入学年份
clen number (1)–学制
);

–添加一条数据

insert into classinfo01 values (1001,‘软件本101’,2018,4);
insert into classinfo01 values (1002,‘软件本102’,2018,4);

–查询数据

select *from classinfo01;
select classinfo01.cid from classinfo01;
–查询表classinfo01下学生的学号;

–删除数据的语法:delete from <表名>[where <条件>]
–我们先删除所有的数据

delete from classinfo01;

–开始添加约束

–因为班级编号不能重复且不能为空,用来唯一标识一条数据的,所以我们可以在这个列上添加一个主键约束

–语法:

alter table <表名> add constraint <主键约束名> (这里注意一下要在要约束的名字前加个)primary key <列名1,列名2,…>;

alter table classinfo01 add constraint PK_classinfo01_cid primary key (cid);

–因为班级名称不能为空,且不能重复,此时我们可以在此列上面添加一个非空约束和一个唯一约束

–非空约束语法:alter table <表名> modify <列名> not null;
alter table classinfo01 modify cname not null;

insert into classinfo01 values (102,null,2018,4); --报错 01400

–唯一约束语法:

alter table <表名> add constraint <唯一约束名> unique(列名1,列名2…) [using
index tablespace <表空间>]

alter table classinfo01 add constraint UQ_classinfo01_cname unique (cname);

insert into classinfo01 values (103,‘软件本103’,2018,4);

–创建自增主键表格
–主键:可以唯一标识一个实体(记录)的列称之为主键列
–主键列选择的原则是:
–最少性
–尽量选择单个键作为主键
–稳定性
–尽量选择数值更新少的列作为主键
–先删除表

–删除表的语法:drop table <表名>

drop table classinfo01; --这里不等于delete delete是将表中所有数据删除 ,而drop 则是将表名字都删除了

/*
–这里我举个例子

create table ddd( sno varchar2 (5) primary key , sname char(8) )

insert into ddd values (15555,‘啊还’);

drop table ddd;

delete from ddd; --这里没有条件,说明删除的是整个表数据(不包括表名字)
– 如果有条件那么删除的是表的某一个属性,我的理解为表的某一列
select * from ddd;
*/

–重新创建带行级约束的表

create table classinfo01(
cid number (4) primary key ,–班级编号
cname varchar2 (100) unique not null, --班级编号
cyear number(4),–入学年份
clen number (1)–学制

);

–创建序列CREATE SEQUENCE 序列名[INCREMENT BY n] --每次加几[START WITH n] --序列从几开始

create sequence seq_classinfo01_cid start with 101 increment by 1;

–插入数据

insert into classinfo01 values(seq_classinfo01_cid.nextval,‘软件本101’,2018,4);
insert into classinfo01 values(seq_classinfo01_cid.nextval,‘软件本102’,2018,4);

select *from classinfo01;

–主键与外键

–删除表
drop table classinfo01;

–重建创建带表级约束的classInfo表

–创建一个学生信息表stuInfo,包含以下信息:
–学号(stuNo)、班级编号(cid)、姓名(stuName)、身份证号码(stuCardID)、性别(sex)、年龄(stuAge)、联系方式(stuTel)、家庭住址(stuAddr)
–要求:学号唯一且非空、姓名不能为空、联系方式必须唯一

create table StuInfo(
stuNo number (10) primary key ,
cid number (4),
stuName varchar2 (100) not null,
stucardID varchar2(18) ,
sex varchar2(4),
stuAge number (3),
stuTel varchar2(11),
stuAddr varchar2(100)
)

–再添加如下要求
–1.引用的班级编号必须在班级表中存在
select *from classinfo01;
select *from stuInfo01;

insert into stuinfo values(101,103,‘张三’,‘1325031234578987’,‘男’,21,‘15365487896’,‘湖南刚刚’);

–此时学生数据会出现引用完整性异常,班级1003还不存在,但数据照样能添加成功

–那么我们可以对学生信息表中的cid列添加外键约束来解决

–语法:alter table <表名> add constraint <外键约束名> foreign key(列名) references <被引用的表名>(<列名>)
–[on delete cascade | on delete set null]
delete from stuInfo where stuNo =102;
alter table stuInfo add constraint FK_stuInfo_sex check (sec ='男’or sex =‘女’); insert into stuinfo values(101,101,‘张三’,‘432503198626494356’,‘不详’,21,‘15946586473’,‘湖南省海米’);

–2.性别必须是男或女,默认为男 —— 此时我们需要在性别上添加检查约束和默认约束

–检查语法:alter table <表名> add constraint <检查约束名> check(<检查条件>) alter table StuInfo add constant CK_stuInfo_sex check (sex='男’or sex=‘女’);
alter table StuInfo add constant CK_stuInfo_sex check (sex in (‘男’,‘女’));

insert into stuInfo values
(102,101,‘张三丰’,‘435689167503844305’,‘不详’,21,‘13458798456’,‘毛概夹史蒂夫’);

–默认约束语法:alter table <表名> modify <列名> default <值>

alter table stuInfo modify sex default ‘男’;

insert into stuinfo values(102,101.‘张三丰’,‘435689167503844305’,default,21,‘15576946842’,‘你没写呀’);

–3.年龄必须在12到30岁之间

alter table stuInfo add constrain CK_stuInfo_stuAge check(stuAge >=12
and stuAge <=30 );

alter table stuInfo add constrain CK_stuInfo_stuAge check(stuAge
between 12 and 30 );–闭合区域

insert into stuinfo values
(103,101,‘张无忌’,‘435689167503844305’,default,31,‘15994674564’,‘幻化哈觉得’);
insert into stuinfo values
(103,101,‘张无忌’,‘435689167503844305’,default,30,‘15994674564’,‘幻化哈觉得’);

–4.联系方式和家庭住址中至少有一个不能为空

alter table stuInfo add constraint CK_stuInfo_stuTelAndAddr check
(stuTel is not or stuAddr is not null);

insert into stuinfo
values(103,101.‘张三丰’,‘435689167503844305’,default,21,‘15576946842’,‘你没写呀’);

insert into stuinfo
values(104,101.‘赵敏’,‘435689167503844315’,default,21,‘15576946841’,‘你没写呀1’);

–5.身份证号码必须是18位 length() 获取的字符长度 lengthb() 获取的字节长度
–对于单字节字符,LENGTHB和LENGTH是一样的 length(‘string’)=lengthb(‘string’)判断字符串是否含有中文
–一个汉字在Oracle数据库里占多少字节跟数据库的字符集有关,UTF8时,长度为三

alter table stuinfo add constraint CK_stuinfo_stuCardID check (length
(stuCardID)=18);

insert into stuinfo
values(104,101.‘小昭’,‘435689167503844325’,default,21,‘13576946841’,‘你几艘写呀1’);

–6.查询学生信息表上的所有约束

select *from user_constraints where table_name = ‘stuinfo’;
select * from user_constraints where table_name = ‘STUINFO’;–注意表名 全部字母大小写

–重建表,添加以上约束
drop table stuinfo;

–表级约束创建学生信息表

create table stuInfo{
stuNo number (10) primary key ,
cid number (4)
constraint FK_stuInfo_cid references classinfo01(cid),
stuName varchar2(100)not null,
stuCardID varchar2(18)
constraint CK_stuInfo_stuCardID check (length (stuCardID)=18),
sex varchar2 (4)
constraint CK_stuInfo_sex check (sex ='男’or sex=‘女’ ),
stuAge number (3)
constant Ck_stuInfo_stuAge check (stuAge >=12 and stuAge <=30 ),
stuTel varchar2 (11) unique ,–注意,约束条件 不对null做约束
stuAddr varchar2(100),
constraint CK_stuInfo_stuTelAndAddr check (stuTel is not null or stuAddr is not null) --表级约束 定义列之后 }

–约束操作

–1.删除联系方式上的唯一约束
–语法:alter table <表名> drop constraint <约束名>;

alter table stuinfo drop constraint SYS_c008362;

–2.禁用性别上的检查约束
–语法:alter table <表名> disable constraint <约束名>;

alter table stuinfo disable constraint CK_stuInfo_sex;

insert into stuinfo
values(106,101.‘赵敏1’,‘435689167503845515’,default,21,‘15576946821’,‘你没写呀1’);

–3.启用性别上的检查约束
–语法:alter table <表名> enable constraint <约束名>;

alter table stuinfo enable constraint CK_stuInfo_sex;

insert into stuinfo values(104,101.‘周至柔’,‘435689167503844415’,default,21,‘15576944641’,‘你没写呀1’);

select *from stuinfo;
–修改表结构
–1.查看学生信息表的表结构

select *from user_tab_columns where table_name = ‘STUINFO’;

–2.将学生信息表stuInfo重命名为studentInfo
–语法:alter table <原表名> rename to <新表名>

alter table stuinfo rename to stuinfo01;

–3.将学生信息表中的列sex重命名为stuSex;
–语法:alter table <表名> rename column <原列名> to <新列名>

alter table stuinfo01 rename column sex stuSex;

–4.在学生信息表中添加列stuPwd,类型为number(10)
–语法:alter table <表名> add <列名> <数据类型> [default] [null/not null]

alter table stuinfo01 add stuPwd number (10);

–5.修改学生信息表中的列stuPwd的数据类型为varchar2(20)
–语法:alter table <表名> modify <列名> <数据类型> [default] [null/not null]

alter table stuinfo01 modify stdPwd varchar2(10);

–6.删除列学生信息表中的列stuPwd
–语法:alter table <表名> drop column <列名>

alter table stuinfo01 drop column stuPwd;


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
cEe6YWJIAuf2