数据库的基本操作2-管理表结构
管理表结构(DDL)
1.创建自己的用户
/*
创建自己的普通用户
a.拥有管理员权限管理员,以管理员身份登录
b.创建自己的用户(设置用户名、密码)
c.赋予普通用户权限
管理员登录选择’sysdba‘
普通用户登录选择’normal‘
*/
--以管理员身份登录,创建新用户,并赋予用户权限
create user hzgg identified by "hzgg"
grant connect,resource to hzgg
--回收权限
revoke connect,resource from hzgg
--删除用户
drop user hzgg cascade
2.表结构和数据类型
选中指定的表,右键选择查看,能够查阅到有关表格的详细信息
数据类型
描述
3.新建表(Create Table)
建表规则
表名和列名
- 必须以字母开头
- 必须是1-30个字符
- 只能包含A-Z a-z _$ 和#
- 不能和用户定义的其他对象重名
- 不能是oracle 的关键字
- Oracle默认存储都是大写的
CREATE TABLE 语句语法
- 必须指定:
- 表名
- 列名, 数据类型, 数据类型的大小
- 要求必须具备以个资源才可以建表:
- CREATE TABLE权限
- 存储空间
create table student(
sid number(10), --学生id
sname varchar2(20), --学生姓名
address varchar2(30), --学生地址
note1 varchar2(200), --冗余字段1
note2 varchar2(200) --冗余字段2
);
select * from student;
使用子查询创建表
- 使用 AS subquery 选项,将创建表和插入数据结合起来
- 指定的列和子查询中的列要一一对应
- 通过列名和默认值定义列
- 使用子查询创建表举例
--利用现有的表创建新的表(用于屏蔽原有表的部分信息,亦可用视图实现)
create table mytable
as
select s.sid,s.sname,s.address
from student s;
select * from mytable;
4.修改表结构(Alter Table)
4.1语法说明
4.2示例
追加一个新列
--1.增加新的列
alter table student add(password varchar2(20));
修改一个列
--2.修改一个已有的列(此处的修改仅仅只是修改列的数据类型)
alter table student add(descr varchar2(20));
alter table student modify(descr varchar2(100));
--修改列的名称(涉及重命名)
alter table student rename column note1 to email;
删除一个列
--3.删除一个列
alter table student drop column note2;
5.清空表(Truncate)
Truncate关键字删除表中所有的数据,释放表空间,但表依然存在的
--4.清空表的数据(只是清空数据,而不删除表的结构)
--insert into mytable values(1,'小李','杭州');
--形式1:truncate table 表名
truncate table mytable;
select * from mytable;
--形式2:delete 表名
delete mytable;
6.删除表(Drop Table)
drop关键字实现的是将数据和表结构都删除掉,且所有的涉及到的索引全部被删除
truncate清空表仅仅是清空数据 表结构依然存在。清空表的时候,所有运行的相关事务都会被自动提交
--5.删除表(删除表的数据、表的结构、表的索引)
drop table mytable;
7.改变对象的名称
- 执行RENAME语句改变表, 视图, 序列, 或同义词的名称
- 必须是对象的拥有者
--重命名表、序列、视图、或是同义词
rename student to stu;
8.约束
约束说明
- 约束是表一级的限制
- 如果存在依赖关系 约束可防止错误数据的删除
- 约束的类型
- Primary key 主键约束
- Unique key 唯一约束
- Not null 非空约束
- Foreign key 外键约束
- Check 检查约束
- 约束的规则:
- 用户可以自定义约束,使用 oracle server的sys_cn格式命名
- 约束创建的时机
- 创建表的时候,同时创建约束
- 表结构创建完成后, 再去添加约束
- 约束可以定义在列一级,或者是表一级
- 通过数据字典查询约束
- 约束按照定义位置划分
- 表级约束: 可以将定义完成表之后再去定义约束,同时可以在多个字段上定义
- 列级约束: 在定义表的时候就必须定义,这个约束只能定义在一个字段上
- 约束定义名称格式
非空约束 NN_表名_列名
唯一约束 UK_表名_列名
主键约束 PK_表名
外键约束 FK_表名_列名
条件约束 CK_表名_列名
默认约束 DF_表名_列名
约束案例分析
- 主键约束Primary key:
- 主键约束在表中定义一个主键来唯一确定表中每一行数据的标识符
- (主键约束要求对应列满足非空、唯一两个条件)
- 主键约束可以是列级约束,也可以是表级约束
- 唯一约束Unique key:
- 唯一性约束唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的
- 唯一性约束可以是表级约束,也可以是列级约束 ,可以在定义表的时候定义约束,也可以定义完成后再定义约束,并且可以同时在多个字段上定义
- 非空约束Not null:
- 非空约束只能是列级约束,只能在定义表的时候去定义 并且不能同时定义在多个字段上
- 外键约束Foreign key:
- 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的
- 外键约束可以是列级约束,也可以是表级约束
- 检查约束Check:
- 检查约束是列级约束,也是表级约束 定义每一行必须满足check 的条件
案例分析1
创建表格
/*
创建teacher表:
tid 教师id -- 主键
tname 教师姓名 --not null
t_birthday 教师生日
要求定义t_birthday不为空,约束名称为t_birthday_nn
*/
create table teacher(
tid number(10) primary key, --主键
tname varchar2(20) not null, --非空
t_birthday date constraint t_birthday_nn not null
--为列t_birthday创建非空约束,约束名称为t_birthday_nn
);
select * from teacher;
查看当前创建的约束,可以通过指令查看,也可直接查看创建的表的相关信息
方式1:通过查询数据字典进行查阅-->“user_constranits”
--查阅数据字典,查看相应的索引
--1.查询当前用户定义的所有约束:user_constrains
select *
from user_constraints
where table_name = 'TEACHER';
--p:主键约束
--R