Oracle 数据库表和约束条件的增删改查

简介: Oracle 数据库表和约束条件的增删改查

7、默认约束 DEFAULT CONSTRAINT

7.1 概念

指定字段为空值的时候,系统自动为该字段赋值


7.2 语法如下

字段名 数据类型 DEFAULT 默认值

示例15

CREATE TABLE TB_EMP10 (

   ID NUMBER(11),

   NAME VARCHAR2(25),

   GENDER VARCHAR2(2) DEFAULT '男',

   AGE NUMBER(2),

   PRIMARY KEY(ID)

 );

INSERT INTO TB_EMP10 (ID,NAME,AGE) VALUES(1,'1',1);

INSERT INTO TB_EMP10 VALUES(2,'1',NULL,1);--NULL也属于赋值

SELECT * FROM TB_EMP10;

ALTER TABLE TB_EMP10 MODIFY  GENDER DEFAULT '女';

7.3 在修改表数据时添加和删除默认约束,语法如下

ALTER TABLE <表名> MODIFY <字段名> DEFAULT 默认值

ALTER TABLE <表名> MODIFY <字段名> DEFAULT NULL*/

示例16

--删除默认约束

ALTER TABLE TB_EMP10 MODIFY GENDER DEFAULT NULL;

INSERT INTO TB_EMP10 (ID,NAME,AGE) VALUES(3,'1',1);

SELECT * FROM TB_EMP10;

--添加修改默认约束

ALTER TABLE TB_EMP10 MODIFY  GENDER DEFAULT '男';

INSERT INTO TB_EMP10 (ID,NAME,AGE) VALUES(4,'1',1);

SELECT * FROM TB_EMP10;


8、主键自增约束 GENERATED BY DEFAULT AS IDENTITY

8.1 概念

默认为1,每次插入数据+1


一个数据表中只能有一个字段使用主键自增约束,


8.2 语法如下

备注


cycle 循环 循环的次数必须大于缓存次数

order 排序

字段名 数据类型 <GENERATED BY DEFAULT AS IDENTITY |  GENERATED ALWAYS AS IDENTITY >

   [(

   [START WITH 开始值] [increment by 每次增加] [maxvalue 最大值] [minvalue 最小值] [cycle] [cache 缓存值] [order]

   )]

GENERATED ALWAYS AS IDENTITY  尝试插入或更新 GENERATED ALWAYS AS IDENTITY 列,操作会报错。

GENERATED BY DEFAULT AS IDENTITY  允许你对标识列插入或更新

示例16

CREATE TABLE TB_EMP11 (

   ID NUMBER(11) NOT NULL,

   NAME VARCHAR2(25),

   GENDER VARCHAR2(2) DEFAULT '男',

   id2 NUMBER(2) generated by default as identity (Start with 1 increment by 1 maxvalue 3 minvalue 1 cycle cache 10 order)

 );--ORA-04013:CACSE 值必须少于CYCLE值,此条创建语句明显可以判断出循环3次,缓存10次

CREATE TABLE TB_EMP11 (

   ID NUMBER(11) NOT NULL,

   NAME VARCHAR2(25),

   GENDER VARCHAR2(2) DEFAULT '男',

   id2 NUMBER(2) generated by default as identity (Start with 1 increment by 1 maxvalue 3 minvalue 1 cycle cache 2 order)

 );

INSERT INTO TB_EMP11(id)values('1');--执行9次后查询结果

select * from TB_EMP11;

INSERT INTO TB_EMP11(id,id2)values(4,1);

select * from TB_EMP11;

INSERT INTO TB_EMP11(id)values('1');

select * from TB_EMP11; --明确可以看出id2进行循环并且排序

8.2 修改主键自增约束

语法如下


ALTER TABLE <表名> modify <字段名> <generated as identity | GENERATED ALWAYS AS IDENTITY >

[(

   [START WITH 开始值] [increment by 每次增加] [maxvalue 最大值] [minvalue 最小值] [cycle] [cache 缓存值] [order]

)]

示例17

ALTER TABLE TB_EMP11 MODIFY ID2 GENERATED AS IDENTITY (Start with 1 increment by 1 maxvalue 3 minvalue 1 cycle cache 2 );

ALTER TABLE TB_EMP11 MODIFY ID2 GENERATED ALWAYS AS IDENTITY (Start with 1 increment by 1 maxvalue 3 minvalue 1 cycle cache 2 );

INSERT INTO TB_EMP11(id,id2)values(4,1);--ORA-32795:无法插入到 '始终生成' 身份列,可以更改主键自增的类型

总结:

GENERATED ALWAYS AS IDENTITY 可以不指定该列进行插入


GENERATED ALWAYS AS IDENTITY 不能在该列中插入NULL值


GENERATED ALWAYS AS IDENTITY 不能指定具体值插入


GENERATED ALWAYS AS IDENTITY 不能使用update更新该列


GENERATED BY DEFAULT AS IDENTITY 可以不指定该列进行插入


GENERATED BY DEFAULT AS IDENTITY 可以指定具体值插入


GENERATED BY DEFAULT AS IDENTITY 不能在该列中插入null值


GENERATED BY DEFAULT AS IDENTITY 可以使用update更新该列,但不能更新为NUL


8.3 在修改表数据时添加和删除自增约束

语法如下(不能在创建好的字段上进行修改,oracle不允许)


ALTER TABLE <表名> ADD <字段名> (数据类型) <generated as identity | GENERATED ALWAYS AS IDENTITY >

[(

   [START WITH 开始值] [increment by 每次增加] [maxvalue 最大值] [minvalue 最小值] [cycle] [cache 缓存值] [order]

)]

ALTER TABLE <表名> MODIFY <字段名> DROP identity

示例18

alter table TB_EMP11 add id3 NUMBER(2)

       generated by default as identity

       (start with 11 increment by 2 maxvalue 100000 minvalue 10);--ORA-30669:表名只有一个身份列

--删除

alter table TB_EMP11 modify id2 drop identity;

--增加

alter table TB_EMP11 add id3 NUMBER(2)

       generated by default as identity

       (start with 11 increment by 2 maxvalue 100000 minvalue 10);

--数据迁移

update TB_EMP11 set id3=id2;

--删除原有字段

alter table TB_EMP11 drop column id2;

--修改字段名称

alter table TB_EMP11 rename column id3 to ID2


掌握知识

7种约束 主键 外键 唯一 检查 非空 默认 自增 熟练掌握增删改查的操作 DDL数据定义语言


9、查询数据表结构,

9.1 语法如下

DESCRIBE <表名> 或者简写 DESC <表名>

示例19

DESCRIBE TB_EMP11;

DESC TB_EMP11;


10、修改表名,

10. 1 语法如下

ALTER TABLE <旧表名> RENAME TO <新表明>

示例20

ALTER TABLE TB_DEPT3 RENAME TO TB_DEPTMENT3;


11、修改字段类型

11.1 语法如下

ALTER TABLE <表名> MODIFY <字段名> <数据类型>

示例21

ALTER TABLE TB_DEPT MODIFY NAME VARCHAR2(255);

ALTER TABLE TB_DEPT MODIFY NAME VARCHAR2(25);


12、修改字段名称

12.1 语法如下

ALTER TABLE <表名> rename column <旧字段名> TO <新字段名>

示例22

ALTER TABLE TB_DEPT RENAME column LOCATION TO LOC;


13、添加字段

13.1 语法如下

ALTER TABLE <表名> ADD <字段名> <数据类型> [列级别约束条件]

示例23

ALTER TABLE TB_DEPT ADD ID3 NUMBER generated by default as identity (start with 11 increment by 2 maxvalue 100000 minvalue 10);


14、删除字段

14.1 语法如下

ALTER TABLE <表名> DROP column  <字段> cascade cibstraints: 将该字段相关的约束一并删除*/

示例24

ALTER TABLE TB_DEPT DROP COLUMN ID3 ;


15、删除数据表

15.1 删除没有被关联的数据表,语法如下

DROP TABLE <表名>

示例25

DROP TABLE TB_DEPT;

15.2 删除被其他表关联的主表

示例26

CREATE TABLE TB_DEPT(

      ID NUMBER(11) PRIMARY KEY,

      NAME VARCHAR2(55),

      loc varchar2(255)

);

CREATE TABLE TB_EMP (

      ID NUMBER(11),

      NAME VARCHAR2(55),

      DEPTID NUMBER(11),

      salary NUMBER(10,2),

      constraint fk_emp_dept FOREIGN KEY (DEPTID) REFERENCES TB_DEPT(ID)

);

DROP TABLE TB_DEPT;--ORA-02449:标准的唯一/主键被外键使用

--移除从表的外键约束

ALTER table TB_EMP DROP constraints fk_emp_dept;


目录
相关文章
|
2月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
4月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
486 77
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
|
4月前
|
XML 数据库 Android开发
Android数据库的使用(增删改查)
本文介绍了一个简单的数据库操作Demo,包含创建数据库、增删改查功能。通过5个按钮分别实现创建数据库、插入数据、删除数据、更新数据和查询数据的操作。代码结构清晰,适合初学者学习Android SQLite数据库基础操作。
122 5
|
4月前
|
数据库 Android开发 开发者
Android常用的room增删改查语句(外部数据库)
本文分享了将一个原生数据库驱动的单词APP重构为使用Room库的过程及遇到的问题,重点解决了Room中增删改查的常用语句实现。文章通过具体示例(以“forget”表为例),详细展示了如何定义实体类、Dao接口、Database类以及Repository和ViewModel的设计与实现。同时,提供了插入、删除、更新和查询数据的代码示例,包括模糊查询、分页加载等功能。此外,针对外部数据库导入问题,作者建议可通过公众号“计蒙不吃鱼”获取更多支持。此内容适合有一定Room基础的开发者深入学习。
158 0
Android常用的room增删改查语句(外部数据库)
|
5月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1126 28
|
3月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。
|
5月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的闪回数据库
Oracle闪回数据库功能类似于“倒带按钮”,可快速将数据库恢复至 earlier 状态,无需还原备份。本文介绍了闪回数据库的使用方法及实战案例:包括设置归档模式、开启闪回功能、记录SCN号、执行误操作后的恢复步骤等。通过具体 SQL 操作演示了如何利用闪回数据库恢复被误删的用户数据。注意,使用此功能前需确保数据库为归档模式。
159 9
|
6月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle数据库的闪回表
本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。
229 10

热门文章

最新文章

推荐镜像

更多