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;


目录
相关文章
|
22天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
29 7
|
22天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
24 6
|
19天前
|
存储 SQL Oracle
[Oracle]面试官:你简单说说常用的4种约束
本文介绍了数据库表中的几种常见约束,包括主键、唯一键、外键、检查和非空约束。详细说明了每种约束的创建、删除及启用/禁用方法,特别强调了外键约束的级联操作和检查约束的正则表达式应用。建议多练习手写SQL命令以加深理解。
30 2
|
22天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
20 5
|
29天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
1月前
|
监控 Oracle 关系型数据库
Oracle数据库性能优化
【10月更文挑战第16天】Oracle数据库性能优化是
29 1
|
29天前
|
JavaScript 前端开发 测试技术
[新手入门]todolist增删改查:vue3+ts版本!
【10月更文挑战第15天】[新手入门]todolist增删改查:vue3+ts版本!
|
Oracle 关系型数据库 数据库
为Oracle数据库表创建自动增长序列及Oracle的常见操作
在SQL Server中,建立表字段自动增长,可以使用 identity(1,1)实现,但是在Oracle没有这样的函数,我们必须得为其创建序列(Sequence),方法如下:   --创建t...
924 0
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
161 64
|
2月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例

推荐镜像

更多
下一篇
无影云桌面