今天学习了创建和管理表以及表的约束。
创建表:
表名
列名, 数据类型, 数据类型的大小
create table demo (name varchar(20) )
使用子查询创建表:
时候用 AS subquery 选项,将创建表和插入数据结合起来
指定的列和子查询中的列要一一对应
通过列名和默认值定义列
SQL>create table demo2
2 as
3 select ename,sal from emp ;
Default值:
执行insert操作时,可以为其指定默认值
值、表达式和SQL语句都可以作为默认值
其他的列名或者是伪列都是非法的
默认值的类型必须和该列的类型一致
CREATE TABLE hire_dates (idNUMBER(8),hire_date DATE DEFAULT SYSDATE);
数据类型:
1、 varchar2(size):可变长字符数据 最大长度为4000 bytes 可做索引的最大长度为749
2、 char(size):固定长字符数据 最大长度为2000bytes
3、 number(p,s):可变字符数据 数字类型 P有效位,S为小数位
4、 date:日期型数据
5、 long:可变长字符数据,最大可达2G
6、 clob:字符数据,最大可达到4G
7、 raw(long,raw):原始的二进制数据
8、 blob:二进制数据,最大可达到4G
9、 bfile:存储外部文件的二进制数据,最大可达到4G
10、 rowid:行地址 是一个伪列
ALTERTABLE 语句
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.
追加一个新列,新列是表中的最后一列
SQL>alter table demo add (
2 sal number
3 );
表已更改。
可以修改列的数据类型, 尺寸, 和默认值。对默认值的修改只影响今后对表的修改
SQL>alter table demo modify (sal varchar2(20));
表已更改。
使用 DROP COLUMN 子句删除不再需要的列.
SQL>alter table demo drop column sal;
表已更改。
删除表:
数据和结构都被删除
所有正在运行的相关事物被提交
所有相关索引被删除
DROPTABLE 语句不能回滚
SQL>drop table qqq;
改变对象的名称:
执行RENAME语句改变表, 视图, 序列, 或同义词的名称
必须是对象的拥有者
SQL>rename demo2 to qqq;
清空表:
TRUNCATETABLE 语句:
删除表中所有的数据
释放表的存储空间
TRUNCATE语句不能回滚
可以使用 DELETE 语句删除数据
SQL>truncate table qqq;
约束:
约束
约束是表一级的限制
如果存在依赖关系,约束可以防止错误的删除数据
约束的类型:
NOTNULL
UNIQUE
PRIMARYKEY
FOREIGNKEY
CHECK
约束规则:
用户可以自定义约束,也可以使用Oracle Server的sys_cn格式命名约束
约束创建的时机:
创建表的时候,同时创建约束
表结构创建完成后
约束可以定义在列一级,或者是表一级
通过数据字典查看约束
非空性约束与唯一性约束:
createtable checkTable(email varchar2(30) not null,constraint chk_emailunique(email));
insertinto checkTable values ('111@111.com');
会插入一条记录,如果再插入一条相同的记录,会报错,因为有唯一性约束,当然如果再增加几个字段,向其它字段中插入信息而不向email中插入任何数据也是会报错的,因为有不为空的约束,如果email有一个默认值就不会出现由于不能为空而出现的问题了
主键约束:
1 create table bookType(
2 bt_id number(9),
3 bt_name varchar2(30),
4 constraint bt_id_pk primary key(bt_id)
5* )
外键约束:
1 create table books(
2 bk_id number(9),
3 bk_name varchar2(30),
4 bt_id number(9),
5 constraint bk_id_pk primary key(bk_id),
6 constraint bt_id_fk foreign key (bt_id) references bookType(bt_id) ondelete cascade
7* )
SQL>/
不能删除有外键约束的记录
外键约束(续)
FOREIGNKEY: 在子表中,定义了一个表级的约束
REFERENCES:指定表和父表中的列
ONDELETE CASCADE: 当删除父表时,级联删除子表记录
ONDELETE SET NULL: 将子表的相关依赖记录的外键值置为null
SQL>delete from bookType where bt_id=1;
check约束
定义每一行记录所必须满足的条件
下面的表达式可以使用在check约束中:
引用CURRVAL, NEXTVAL, LEVEL, 和ROWNUM
调用SYSDATE, UID, USER, 和USERENV 函数
另一个表的查询记录
SQL>create table check01(
2 salnumber(3,2)
3 ,
4 constraint sal_ck check(sal>0.2)
5 );