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;