PLSQL ALTER语法以及相关创表所需约束 (关键)

--伪列
可以像其他列一样被查询但是不能修改
level 
rownum  行号
rowid   行地址

·level
必须从1开始,并且是连续的   
必须和connect by配合使用   --只有connect by 限制了他的
 
 
·level
level的用法★(必须记住这个)
1.树形查询返回节点深度     --之前说过
2.控制显示格式--控制缩进   --之前说过
3.生成多条记录
4.一行变多行
 
--生成多条记录
select level 
from dual
connect by level<=10
 
--查询1-19的所有整数
select level
from dual
connect by level<=19
 
  --这里就是说level是从1到2到3一直到之后,而且必须是连续的
   --只有connect by 限制了他,才能实现他的功能,
   --否则就会无限增长,永远也跑不出结果
​​​​​​   --这里不能用=号,因为他是从1往上连续增长,
--如果我们使用等于他是无法满足的条件,所以只会输出一个1
select level
from dual
connect by level=20
--查询100以内所有的奇数
select level
from dual
where mod(level,2)=1
connect by level<100

--查询本月所有周末
select trunc(sysdate,'mm')+level-1
from dual
where to_char(trunc(sysdate,'mm')+level-1,'day')
      in('星期六','星期日')
connect by level<=to_char(last_day(sysdate),'dd')


--查询今年所有的星期五
select trunc(sysdate,'yyyy')+level-1
from dual
where  to_char(trunc(sysdate,'yyyy')+level-1,'day')
      in('星期五')
connect by level<=add_months(trunc(sysdate,'yyyy'),12)-
                  trunc(sysdate,'yyyy')

--查询2005-2018年所有的年月,月初,月末
select to_char(add_months(date'2005-1-1',level-1),
       'yyyy"年"mm"月"') 年月,
       add_months(date'2005-1-1',level-1) 月初,
       last_day(add_months(date'2005-1-1',level-1)) 月末
from dual
connect by level<=months_between(date'2019-1-1',
               date'2005-1-1')

--查询2008年所有的周一到周五
select date'2008-1-1'+level-1 日期,
       to_char(date'2008-1-1'+level-1,'day') 星期
from dual
where to_char(date'2008-1-1'+level-1,'day') not in ('星期六','星期日')
connect by level<=to_char(date'2008-12-31','ddd')

4.一行转多行
创表:
create table abc(a varchar2(20));
insert into abc values('aaa,bbb,ccc,ddd,eee');
commit;
select * from abc;
select substr(a,4*level-3,3)           --4*level-3是由4*(level-1)-1推导过来的
from abc
connect by level<=(length(a)+1)/4
 
 
总结规律,如果每个部分有n位
select substr(str,(n+1)*level-n,n)
from dual
connect by level<=length(replace(str,','))/n
 
如果没有分隔符,每n位换一行
select substr(str,n*level-(n-1),n)
from dual
connect by level<=ceil(length(str)/n)
 
--把'abcdefghijklmn'每3位换一行显示
select substr('abcdefghijklmn',3*level-2,3)
from dual
connect by level<=ceil(length('abcdefghijklmn')/3)
 
---------------------------------------------------------------------------------------------------------------------
·rownum
select *
from emp
where rownum=1
 
select *
from emp
where rownum=2
 
--推导出:必须从1开始并且是连续的
 
--拓展:查询emp表第二行的数据
select *                   
from (select e.*,rownum r
​​​from emp e)
where r=2

--查询emp表的前五行
select *
from emp
where rownum<6
--查询emp表6-10行
select *
from (select e.*,rownum a from emp e)
where a between 6 and 10

--查询工资最高的前5人
select *
from (select * from emp order by sal desc)
where rownum<=5
--查询工资最高的6-10名
select *
from (select e.*,rownum c from (select * from emp  order by sal desc) e)
where c between 6 and 10

查emp表第一条到第十条数据
select *
from (select e.*,rownum a
from emp e)
where a between 1 and 10
 
--假设我们将这第一条到第十条当做第一页,
--第二页是第十一条到第二十条为第二页以此类推,
--我们要怎么做,肯定不能每次都改代码(引出宏代换的理论)
 
--ROWNUM主要用在分页查询
--宏代换:&a
select &a
from dual
--宏代换可以显示手动输入的内容
 
--所以像刚才那题我们可以:
select *    --(板书)
from (select e.*,rownum r      
​​from emp e)
where r between &a*10-9 and &a*10    --这里是伪列转真列
 
--结论:这里的宏代换我们是手动输入的,
--第一页我们就输入1,所以我们想要一页显示多少行,
--我们就用between 宏代换*要显示的行数-(要显示的行数-1) 
--and 宏代换&要显示的行数.像这里是十行就为between &a*10-9 
--and &a*10,如果三行就为between &a*3-2 and &a*3,
--归纳为:&a*n-(n-1) and &a&n(n为要显示的行数)

--按照工资由多到少排序,每页4人

select *
from (select rownum h,e.* from (select * from emp order by sal desc) e
)
where h between &a*4-3 and &a*4

伪列┌LEVEL┌树形查询返回节点深度
   │     ├控制显示格式
   │     ├生成多条记录
   │     └一行转多行
   ├ROWNUM 分页查询
   └ROWID 去除重复数据

数据库语言
DQL 数据查询语言 :简单查询、限定查询、树形查询、子查询、表连接、集合、、、、
DCL 数据控制语言┌GRANT  赋权
                └REVOKE 回收权限
DDL 数据定义语言 创建create、删除drop、修改alter、、、、
DML 数据操作语言┌插入数据 INSERT
                ├更新数据 UPDATE
                ├删除数据 DELETE
                └合并数据 MERGE
TPL/TCL 事务处理/控制语言┌提交 COMMIT
                         └回滚 ROLLBACK
​​​​​​
-----------------------------------------------------------------------------------------------------------------------------------------------------
DCL 数据控制语言       用处一般是给用户赋权和回收权利
                      dba权限是数据库最高权限
dba:  dba权限或最高权限,只有数据库管理员(dba)可以赋权和回收权限
授权:    GRANT 权限 TO 用户;
回收权限:REVOKE 权限 FROM 用户;

 
从命令窗口连接数据库的语法 :  Cmd打开命令窗口
sqlplus / as sysdba  --sysdba是个用户(有dba权限的用户) --我们现在是以sysdba的身份登录oracle
给scott用户赋dba权限,在scott用户下查询hr用户的表 --我们油桶现在是用scott连接数据库
收回scott用户赋dba权限,在scott用户下查询hr用户的表
观察区别
--注在连接数据库的情况下,更改权限是不会立即生效的,需要退出数据库重新登陆(切换用户再切回来)

 
-----------------------------------------------------------------------------------------------------------------------------------------------------
ddl的概念:可以创建表、修改表(不是修改数据、是修改属性,比如表的名字、表的列数、表的列的格式;对表数据进行修改的是其他的语言)
DDL 数据定义语言(创建 create,修改 alter,删除 drop)    
┌表   TABLE
├视图 VIEW
└序列 SEQUENCE
可以对表和视图、序列进行操作,是一种大层次的定义方面的语言。
而对数据层面进行修改的就不是ddl。(对数据修改是dml)
--表
·表┌创建表
   ├表的重命名
   ├清空表
   ├修改表
   └删除表

一:创建表
1.复制表(可以只复制表格式也可以复制表)语法:
create table 表名 as select语句;

create table emp3 as select * from emp where 1=2;

--创建emp3数据同emp工作为CLERK的员工信息
create table emp3 as select * from emp where job='CLERK';

select * from emp3

--创建emp10、emp20、emp30三张表,
--表数据分别为10部门20部门30部门的数据
create table emp10 as select * from emp where deptno=10;
create table emp20 as select * from emp where deptno=20;
create table emp30 as select * from emp where deptno=30;

命名规则
驼峰式     HuaXiaJinLing
下划线式   hua_xia_jin_ling

2.手动创建表
 
字段类型:┌数值型  number,int
​​         ├字符型  char,varchar/varchar2
​​         └日期型  date
​​         └ 大数据类型(暂时用不到)
语法结构:create table 表名 (列1 类型长度 [约束],列2 类型长度 [约束]...)
数据类型      
·数值型
number[(数1[,数2])]
数1是长度,数2是小数位数,数2不写默认没有小数,
number类型会四舍五入。
数1最大38,就是说number的精度最大是38位
数1不写,最多可以存126位,但是精度仍然是38

除了number之外还有int↓ 放整数的。
int
只能存整数,相当于number(22)
 
 
 
 
·字符型 
char[(数)] 定长字符
最多存储2000个字节的定长字符,数不写,默认1
位数不足用空格补齐.
比如char(10)存了一个9位的字符,最后一位用空格补齐
--读取快,可能会浪费空间
varchar/varchar2(数) 可变长字符
varchar是定长字符,最多存储2000个字节,varchar2是可变长字符,
最多存储4000个字节的可变长字符,数不能不写
位数不足,直接存储
--读取比char略慢,不浪费空间
--当列中值存在大量空的时候varchar2比char读取要快
 
·日期型
date    我们用lengthb(日期)看emp表中日期的字节长度
!由一个(9)个字节组成的定宽日期、时间类型。
包含7个属性:
世纪、年、月、日、时、分、秒   
不会浪费空间。

2018-8-1 10:00:00
这就是21世纪 、18年、8月、1日、10时、0分、0秒
timestamp 时间戳  --stamp:邮票,邮戳
比date存储更精确的时间,还存储了时区,书写格式基本上和date一直
 
select systimestamp from dual
 
select to_timestamp('2020-1-1 2:10:30.200','YYYY_MM_DD hh24:mi:ss.ff')
from dual
 
select timestamp'2020-1-1 2:10:30.200'
from dual
 
 
还有一个是大数据类型,分两种 CLOB和BLOB。
·大对象的类型(大数据类型)
BLOB 储存二进制大对象  用二进制存储 如:保存位图--(图片)
    4GB*数据块大小比如说装一个大的图片、一部电影,
    这些都能装到数据库当中
因为数据库不止除了小的数据,
有时候也会处理大型数据
 
CLOB 储存字符大对象   用char来存储  如:保存xml文件 --(XML是可延伸标记语言的缩写形式,很多网页都是.xml文件)        4GB*数据块大小    
 
 
--创建学生表      
create table student(
stu_id    number(4)
,stu_name  varchar2(4000)
,stu_sex   varchar2(6)
,stu_class varchar2(20)
,stu_bith  date
,stu_pic   blob
);
 
select * from student

--删除表
drop table 表名 [purge];               
加上 purge 是物理删除
不加 purge 是逻辑删除,就是把表放进回收站(recyclebin)
 
--查看回收站
select * from user_recyclebin;
 
drop table stu_1 purge; --物理删除stu_1
drop table stu_2; --逻辑删除stu_2
 
--从回收站闪回删除的表
flashback table emp10 to before drop;
flashback table stu_2 to before drop;
select * from emp10;
 
--闪回表的时候也可以用对象名     
---用对象名闪回的时候记得加双引号
flashback table  “ 对象名”  to before drop;
 
 
select * from stu_2;
 
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
--清空表数据     ddl的清空表之后数据无法找回!!!!!!!!!!!!只有dml操作时才能找回
 
truncate table 表名;
truncate table emp10;
 
 
 
--修改表:
1. 修改表名的语法:
rename 旧表名 to 新表名;----
 
rename emp10 to emp40;
select * from emp40;
 
2. 增加列的语法:
alter table 表名 add (列1 类型长度,列2 类型长度...);
 
alter table emp40 add(a varchar2(20),b number); 
select * from emp40;
 
3. 修改列的类型的语法:
alter table 表名 modify 列名 (修改后的)类型长度
create table emp101 as select * from emp   ---!
select * from emp101
alter table emp101 modify ename number(20)   ---!
注意事项:
同类型修改变长,直接修改
同类型修改变短,不能短于已有数据最长长度。
不同类型的修改,则此列必须为空
 
4.删除列的语法:
alter table 表名 drop (列1,列2);--删除多列

alter table 表名 drop column 列名;--删除一个列
 
alter table student drop(aa,b);        ----!说明做了什么操作
alter table student drop column stu_pic;   ---!
 
5.修改列名的语法:
alter table 表名 rename column 旧列名 to 新列名;
 
alter table student rename column a to aa;         ------!
 
小结:
dcl ┌ grant 赋权
     └ revoke 回收权利
 
ddl┌创建表┌ 复制表/复制表格式
  │      └ 手动创建表
  └删除表┌ 逻辑删除
  │      └ 物理删除
  └清空表     --无法撤回
  └ 修改表┌  表重命名
           └ 增加列
           └ 删除列
           └ 修改列类型
           └ 修改列名
 
约束部分
·约束 constraint
约束的作用
!!用来确保数据满足业务规则的手段,
约束是保障数据合理性的最后一道防线
 
约束可以限制插入的数据,就是可以防止有不符合规则的
数据插入进来,如果不满足的话约束会阻止你的操作,
也就是报错,会说插入数据不符合约束,也就是不符合规则
                                           
约束的分类  
1主键约束  primary key  唯一且非空  --一张表只能有一个主键
2非空约束  not null     非空
3唯一约束  unique       唯一(可以有空)
4检查约束  check()      给它一个条件 --后面会有括号,里面写一个条件
5外键约束  foreign key  
6默认值    default      当列中值为空时,变成default的值
 
默认值可以算做一个约束,因为语法和创建约束差不多。--可说可不说
默认值约束并不会限制什么,当没有给他值的时候,他会默认给你一个值。
 
1. 主键约束用于定义基本表的主键,起唯一标识作用,
其值不能为NULL,也不能重复,以此来保证实体的完整性。
PRIMARY KEY与UNIQUE约束类似,通过建立唯一索引来保证基本表
在主键列取值的唯一性,但它们之间存在着很大的区别:
①在一个基本表中只能定义一个PRIMARY KEY约束,
  但可定义多个UNIQUE约束;
②对于指定为PRIMARY KEY的一个列或多个列的组合,
  其中任何一个列都不能出现空值,
  而对于UNIQUE所约束的唯一键,则允许为空。
注意:不能为同一个列或一组列既定义UNIQUE约束,
又定义PRIMARY KEY约束。
2. 唯一性(UNIQUE)约束用于指明基本表在某一列或多个列的
   组合上的取值必须唯一。
定义了UNIQUE约束的那些列称为唯一键,
系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。
唯一键允许为空,但系统为保证其唯一性,
最多只可以出现一个NULL值。
UNIQUE既可用于列约束,也可用于表约束。
UNIQUE用于定义列约束时,其语法格式如下:
[CONSTRAINT <约束名>] UNIQUE
唯一性约束用于指定一个或者多个列的组合的值具有唯一性,
以防止在列中输入重复的值。当使用唯一性约束时,
需要考虑以下几个因素:
①使用唯一性约束的字段允许为空值。
②一个表中可以允许有多个唯一性约束。
③可以把唯一性约束定义在多个字段上。
④唯一性约束用于强制在指定字段上创建一个唯一性索引。
unique约束是用来确保不受主键约束列上的数据的唯一性.
unique与primary key的区别在于:
(1)unique约束主要用于非主键的一列或多列上要求数据唯一.
(2) unique约束允许该列上存在NULL值,而主键决不允许出现.
(3)可以在一个表创建多个unique约束,而在一个表上只能够设
     置一个主键
3. 检查约束
CHECK约束用来检查字段值所允许的范围,如,一个字段只能输入
整数,而且限定在0-100的整数,以此来保证域的完整性。
当执行INSERT语句或者UPDATE语句时,检查约束将验证数据。
5. 外部键约束
外部键约束用于强制参照完整性,提供单个字段或者多个字段的
参照完整性。 FOREIGN KEY约束指定某一个列或一组列作为外部键,
其中,包含外部键的表称为从表(参照表),包含外部键所引用的
主键或唯一键的表称主表(被参照表)。
系统保证从表在外部键上的取值要么是主表中某一个主键值或
唯一键值,要么取空值。以此保证两个表之间的连接,
确保了实体的参照完整性。
6. NULL 约束
(1)NULL/NOT NULL
是否允许该字段的值为NULL。
NULL值不是0也不是空白,更不是填入字符串“NULL”,
而是表示“不知道”、“不确定”或“没有数据”的意思。
当某一字段的值一定要输入才有意义的时候,
则可以设置为NOT NULL。
如主键列就不允许出现空值,
否则就失去了唯一标识一条记录的作用
 
 
---------------------------------------------------------------------------------------------------------------------------------------------------

 
--创建约束的语法:
--非列模式,不带约束名
语法:
create table 表名(字段名1 字段类型 约束,
​​​​  字段名2 字段类型 约束,
​​​​  字段名3 字段类型 约束,
​​​​  ...
​​​​ )
 
实例:                       约束后面写
create table stu_1(
stu_id     number(4)      primary key
,stu_name   varchar2(4000) not null
,stu_sex    varchar2(6)    check(stu_sex in('男','女','其他'))   --或者check(substr(c,1,1)='A')
,stu_idcard char(18)       unique not null  --一个列可以加多个约束,not null写在最后
,stu_bith   date           default date'2000-1-1'
);
建好之后我们可以刷新左边对象,找到表右键查看
如果创建约束时没有给名字,系统会默认取名sys_开头!!
--注意:
--检查约束检查的列是他约束的列,
--他约束的列的字段类型要和条件的字段类型一致,
--比如被约束的字段类型为varchar2,
--那他的条件就不能为between 1 and 100
--一个列可以添加多个约束,not null写在最后
 
--创建一张表 表名叫test4至少有五个列
--包含主键 非空 唯一 检查约束 还有默认值
 
 
 
 
 
 
 
-----------------------------------------------------------------------------------------------------------------------------------------------------
--非列模式,带约束名  
语法:                             约束↓
create table 表名(字段名1 字段类型 constraint 约束名 约束,
​​​​  字段名2 字段类型 constraint 约束名 约束,
​​​​  字段名3 字段类型 constraint 约束名 约束,
​​​​  ...
​​​​ )

create table stu_2(
stu_id     number(4)      constraint  pk_nana  primary key
,stu_name   varchar2(4000) constraint  nn_lala  not null
,stu_sex    varchar2(6)    constraint  ck_lulu  check(stu_sex in('男','女','其他'))
,stu_idcard char(18)       constraint  un_lili  unique constraint nn_kiki not null  --一个列可以加多个约束,not null写在最后
,stu_bith   date           default date'2000-1-1' --默认值不能取名字
);
 
--创建一张表 表名叫test5 至少有五个列
--包含主键 非空 唯一 检查约束 还有默认值
--要求有约束名
 
-----------------------------------------------------------------------------------------------------------------------------------------------------
--列模式,不带约束名
语法:
create table 表名(字段名1 字段类型,
​​​​  字段名2 字段类型,
​​​​  字段名3 字段类型,
​​​​  ...
​​​​  约束(字段1),
​​​​  约束(字段2),
​​​​  约束(字段3),
​​​​  ...
​​​​ )
 
实例:--(板书)
create table stu_3(
stu_id     number(4)      
,stu_name   varchar2(4000)
,stu_sex    varchar2(6)    
,stu_idcard char(18)      
,stu_bith   date           default date'2000-1-1'
,primary key(stu_id)
,check(stu_name is not null)    
,check(stu_sex in('男','女'))
,unique(stu_idcard)
,check(stu_idcard is not null)
);
--默认值不能用于列模式、非空列模式要转成检查

--列模式,带约束名
 
语法:  区别是在表创好了后在最后的地方增加约束
create table 表名(字段名1 字段类型,
​​​​  字段名2 字段类型,
​​​​  字段名3 字段类型,
​​​​  ...
​​​​  constraint 约束名 约束(字段1),
​​​​  constraint 约束名 约束(字段2),
​​​​  constraint 约束名 约束(字段3),
​​​​  ...
​​​​ )
 
实例:--(板书)
create table stu_4(
stu_id     number(4)      
,stu_name   varchar2(4000)
,stu_sex    varchar2(6)    
,stu_idcard char(18)      
,stu_bith   date           default date'2000-1-1'
,constraint pk_1 primary key(stu_id)
,constraint nn_1 check(stu_name is not null)
,constraint ck_1 check(stu_sex in('男','女'))
,constraint un_1 unique(stu_idcard)
,constraint nn_2 check(stu_idcard is not null)
);
--外键约束和复合主键只能用列模式创建
复合主键(组合主键),多个列合在一起充当主键,
 起到唯一且非空的限制作用
比如 PRIMARY KEY(员工姓名,部门编号)
 

复合主键(组合主键) --(板书)
多个列合在一起充当主键,起到非空且唯一的作用
create table test7(
a number,
b number,
c number,
d date,
e char,
primary key(a,b,c),     --a字段和b字段和c字段合在一起后的结果非空且唯一
unique(b),
check(c is not null),
check(d=date'2020-1-1'))


外键约束        --只能用列模式创建      
外键约束需要两张表.创建外键约束的表是子表,参考表是父表   
创建外键约束的列叫外键列,参考表的参考列必须是父表的主键列
 
外键约束的作用是:外键列中的值必须是父表的主键列
中存在的 在emp的deptno列建立了外键约束连接到了
 dept的主键列(deptno列)
子表emp的deptno列的值必须在父表dept表的主键列
(deptno列)中存在。
否则报错,插不进去


语法:                  必须是主键列
[constraint 外键约束名] foreign key(外键列) references 父表(主键列)
[on delete cascade|on delete set null]    --foreign 外部的,references 参照
 
alter table 表名 add constraint fk1 foreign key(deptno) refereces dept(deptno) --增加一个外键约束
 
--创建emp1 包含三个列,empno,ename,deptno(参照emp表),它的deptno上创建外键约束,参考dept的deptno(问题)
CREATE TABLE emp1(
empno number
,ename VARCHAR2(20)
,deptno NUMBER(2)
,CONSTRAINT fk_1 FOREIGN KEY(deptno) REFERENCES dept(deptno) ON DELETE SET NULL);
 
┌级联删除 ​​on delete CASCADE
├级联删除为空 ​on delete SET NULL
└不指定级联删除 on delete NO action --默认
 
注意事项
·外键列可以为空,也可以不唯一                                              
·删除父表的数据时,
  如果不指定级联删除,必须先删除子表的相关项,
  再删除父表的对应行
  如果指定了级联删除,子表的相关项和父表的对应行一起被删除
  如果指定了级联删除为空,父表的对应行被删除,
  子表的相关项还在,外键列的值变成空   deptno列变成空
·插入/更新到子表的外键列的数据必须是父表主键列里存在的
·插入到父表主键列的数据没有限制(只需要符合主键约束)
--创建emp2 包含三个列,empno,ename,deptno(参照emp表),
--它的deptno上创建外键约束,参考dept1的deptno
--这种情况执行会报错,因为dept1是直接从dept复制过来的,
--deptno并不是他的主键,所以会报错,
--需要执行添加主键约束的语句
create table emp2(                                                                                    
empno number
,ename varchar2(20)
,deptno number(2)
,constraint fk_1 foreign key(deptno) 
references dept1(deptno) on delete set null);

--增加约束    --也是ddl
alter table 表名 add [constraint 约束名] 约束类型(列);
alter table student add constraint pk_2 primary key(stu_id);
 
--约束重命名
alter table 表名 rename constraint 旧名字 to 新名字;
alter table student rename constraint pk_2 to pk_3;
 
--约束的启用和禁用     --当我要插入大量的数据时,
--约束都会去检查是否符合,消耗资源浪费时间。
alter table 表名 disable|enable [validate|novalidate] constraint 约束名;               禁用    启用
alter table student disable constraint pk_3;

·约束的四种状态
enable validate : 正常地启用约束 --新数据和旧数据都要符合约束   --validate:正确的,有效的
enable novalidate : 不正常地启用约束 --表中可以有不合约束的状态,新数据必须符合约束,只对检查约束可以用
disable novalidate : 正常地禁用约束 --约束失效,可以输入不符合约束的值
disable validate : 锁表 --不能对全表进行插入、更新、删除
 
--修改非空、默认值、列的类型长度   ​​--modify  修改
语法:
alter table 表名 modify 列名 类型长度 [[default 值] [not null| null]];
 
实例1:alter table stu_1 modify stu_bith number default 666 not null;  --改为非空默认值
实例2:alter table stu_1 modify stu_bith varchar2(10) default null;​   --改为非空列长度
·要修改列的类型,该列必须为空
·要把列修改成可为空,该列必须现在是非空,反之亦然
·varchar2的长度可以改长,如果要改短,必须不短于该列已有数据的最长长度
·number要修改长度,必须此列为空
 
--删除约束
alter table 表名 drop constraint 约束名;
alter table stu_1 drop constraint sys_c0011970;
 
--练习
--1.给emp100的empno列增加一个主键约束
--2.给emp100的ename列增加一个唯一约束
--并起名为un100
--3.删除第二问增加的唯一约束
--4.将hiredate列修改为不可为空
--5.给deptno列设置默认值为10
 
小结:
dcl┌赋权     grant 权限 to 用户;
  └回收权限 revoke 权限 from 用户;
ddl┌表┌创建表┌复制表  create table 表名 as select语句;
  │  │      └手动创建┌create table 表名 (列 类型长度 [约束],列 类型长度 [约束]..)
  │  │                ├数据类型 数值型 number int 字符型 char varchar/varchar2 日期型 date timestamp 大对象 clob blob
  │  │                └约束 主键 pk 外键 fk 唯一 un 非空 nn 检查 ck 默认值 default
  │  ├表重命名 rename 旧表名 to 新表名
  │  ├清空表 truncate table 表名
  │  ├修改表┌增加列 alter table 表名 add (列 类型长度,列 类型长度 )
  │  │      ├列重命名 alter table 表名 rename column 旧列名 to 新列名
  │  │      ├修改列的类型长度/默认值/是否可为空
  │  │      │    alter table 表名 modify 列名 类型长度 default 值 not null|null
  │  │      ├删除列 alter table 表名 drop (列1,列2..)
  │  │      │     或 alter table 表名 drop column 列
  │  │      ├增加约束 alter table 表名 add constraint 约束名 约束类型(列)
  │  │      ├约束重命名 alter table 表名 rename constraint 旧约束名 to 新约束名
  │  │      ├启用和禁用 alter table 表名 disable|enable [validate|novalidate] 约束名
  │  │      └删除约束 alter table 表名 drop constraint 约束名
  │  └删除表┌drop table 表名 [purge]
  │          ├查看回收站 select * from user_recyclebin
  │          ├回收站闪回表 flashback table 表名 to before drop
  │          └清空回收站 purge recyclebin
  ├视图
  └序列
dml┌插入数据 insert into
  ├更新数据 update set
  ├删除数据 delete from
  └合并数据 merge into
tpl┌提交 commit
  └回滚 rollback


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值