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;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/198038.html