首页 > 数据库 >oracle数据库表的一些基本处理

oracle数据库表的一些基本处理

时间:2023-10-31 19:06:15浏览次数:34  
标签:classinfo01 constraint 处理 数据库 stuInfo oracle table alter stuinfo


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;


标签:classinfo01,constraint,处理,数据库,stuInfo,oracle,table,alter,stuinfo
From: https://blog.51cto.com/u_16330533/8112755

相关文章

  • oracle数据库快捷键使用失败的处理
    当oracle里边发现你的ctrl+字母快捷键不能使用了我在装oracle的时候碰到许多奇奇怪怪的问题,于是我也研究了一段时间的oracle数据库,我目前面临的一个问题是windows里边系统带的快捷键在oracle中不能使用,这就带给我很麻烦,有时候复制几行数据全要靠鼠标右键来操作,大大提高了我们的编......
  • 第20课 管理事务处理
    20.1事务处理使用事务处理,确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。事务处理是一种机制,用来管理必须成批执行的SQL操作,保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们要么完全执行,要么完全不执行(除非明确指示):......
  • 采购仪器预约管理系统思路详解,QPQ盐浴氮化处理
    成都工具研究所有限公司的前身是成都工具研究所,于1956年创建于北京,是原机械工业部的直属研究所,是我国机械工业的综合性工具科研机构。公司官网:http://www.ctri.com.cn/公司主要从事精密切削工具、精密测量仪器以及表面改性处理技术的技术研究、产品开发和应用服务。一、主机(仪器预......
  • 从数据预处理到模型部署
    近年来,人工智能技术的高速发展备受瞩目,而其中的一个关键领域就是机器学习模型的开发和部署。越来越多的企业和组织开始投入巨资进行模型开发和部署,以提升自身业务的智能化水平。为了帮助大家更好地理解和掌握模型开发与部署的相关知识,我们特地整理了本次直播的关键内容,带大家深入探......
  • [个人记录] datax同步Oracle数据到MSSQL - 报错提示插入重复主键
    之前试着把Oracle的数据同步到MSSQL,表到表的操作,结果提示插入重复主键,在Oracle使用的是rowid插入到MSSQL表的id主键中去,该id设置了主键约束。一开始很纳闷,怎么会重复插入主键呢?rowid不是唯一的吗?因为搞了很久没搞定,换了其他生成主键的方法也没成功,sys_guid()之类的。......
  • 数据库系列:MySQL引擎MyISAM和InnoDB的比较
    1、数据库核心知识点数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍......
  • 国产芯片 —— 2023年龙芯最新的 3A6000 确实已经追上 2020年发布的 10代 i3酷睿
    看新闻:https://news.cnblogs.com/n/752564/         =============================================  性能测试对比图:(截取自:https://www.bilibili.com/video/BV14P41187M9/?vd_source=f1d0f27367a99104c397918f0cf362b7)     ......
  • java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
    今天在出来多表删除的时候在mapper.xml用了下面的多个delete语句<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespa......
  • Oracle 参数 STANDBY_FILE_MANAGEMENT 官方解释,作用,如何配置最优化建议
    本站中文解释STANDBY_FILE_MANAGEMENT:用于控制应用日志文件的处理,如果设置为AUTO时,此参数将用于控制应用日志文件是被自动删除、备份或迁移,以满足物理备份恢复要求。设置正确的方法:1.在Oracle实例中,使用ALTERSYSTEM命令将STANDBY_FILE_MANAGEMENT参数的值设置为AUTO:ALTERSYS......
  • sqlserver查询数据库状态SQL
    --连接数SELECTcount(0)asConnectCountfromsys.dm_exec_connections--死锁数量selectcntr_valuefromsys.dm_os_performance_counterswherecounter_name='NumberofDeadlocks/sec'andinstance_name='_Total'--缓存命中率selectcntr......