表的创建和修改
表的创建
表的概念:
表是数据库中最重要的对象,是数据库的基础,是基本存储单元,用来存储数据,由行(记录)和列(字段)组成。
一个数据库表,可以有多达1000个字段,表名和字段名必须符合命名规则。表在创建时没有数据,只是一个表结构,之后可以通过INSERT语句单行或多行添加数据 。
Oracle数据库的表和字段的命名规则:
如同Java语言变量有命名规则一样,
- 必须以字母开始
- 必须是1到30 个字符长度
- 只能包含字母、数字、下划线“_”、美元符“$”和井号“#”
- 不能使用Oracle的关键字
- 同一个用户所拥有的对象之间不能重名
创建表的语法形式:
CREATE TABLE [schema.]table
(col1 type1 [DEFAULT1], col2 type1 [DEFAULT2]…coln typen [DEFAULTn])
schema(方案)是对象的集合,在Oracle中,一个用户一般对应一个方案,该用户的方案名等于用户名,并作为该用户缺省的方案。如果一个表不属于本用户,那么则必须通过方案名.表名访问这个表,也就是通过用户名.表名访问这个表
–其他用户访问scott用户的表,本用户访问自己的表可以省略
select * from scott.emp
创建表实例
–需求:新建一个部门表depts,该部门表有四个字段,分别是部门编号dept_id、部门名称dept_name、部门经理名字manager_fname和所在地dept_loc
create table depts(
dept_id number(3),
dept_name varchar2(32),
manager_fname varchar(32),
dept_loc varchar2(32) default '北京' )
–需求:新建一个员工表,表中只包含雇员编号、雇员姓名、雇员的入职日期,数据来源于emp表
create table emp_temp(t_empno,t_ename,t_hiredate) as
select empno,ename,hiredate from emp
–**注意:**新建表后面的字段列表,如果有的话,字段的数目必须等于子查询所选字段的数目,
如果没有,则新建表的字段名使用子查询的字段名
另外,定义新表的字段属性,只能定义字段名和默认值,字段的类型引用子查询的列
create table emp_temp as
select empno,ename,hiredate from emp
–**注意:**若select语句中,包含组函数,需要指定列名或命名,否则报错。
组函数命名
create table emp_temp2 as
select deptno,avg(sal) sal_avg from emp group by deptno
指定新表的列名,可以指定新表某列的默认值,但不可以指定字段的类型。
create table emp_temp2(deptno default 10,sal_avg default 3000) as
select deptno,avg(sal) from emp group by deptno
–**注意:**只想复制表结构,不想要数据
create table emp_temp as
select empno,ename,hiredate from emp where 1!=1
数据库数据类型
mysql oracle
int(4) number(4)
float number(4,2) --最多4位,2位小数
varchar(32) varchar2(32)--可变长度
char(2) varchar(2) --定长
date date
修改表结构:ALTER TABLE语句
改变表的结构,需要添加或删除一个字段或修改某个字段的定义。
语法形式:
用ALTER TABLE语句添加字段、修改字段和删除字段的语法形式:其中,ADD、MODIFY和DROP是修改的类型。
ALTER TABLE table
ADD(col1 type1 [DEFAULT1], col2 type2 [DEFAULT2]…)
ALTER TABLE table
MODIFY(col1 type1 [DEFAULT1], col2 type2 [DEFAULT2]…)
ALTER TABLE table
DROP(col)
实例:
–需求:给之前创建的depts表中增加一个字段,部门编制人数num_limit,数据类型为数字型,默认值为10人。
ALTER TABLE depts
ADD(num_limit NUMBER(2) DEFAULT 10)
注意:添加的新字段在该表的最后一列,不能指定字段位置。同时如果被添加的表中已包含有行,则所有行的新字段被初始化为空或默认值。
–需求:depts表中部门所在地字段dept_loc的字符长度原先设定的30不够使用,需要调整为50。
ALTER TABLE depts
MODIFY(dept_loc VARCHAR(50))
注意:在ALTER TABLE语句后,可以用MODIFY子句修改一个字段,
字段的修改包括修改字段的数据类型(仅在列中只有空值时才可以修改),大小和默认值,
不过对默认值的修改只会影响后来插入表的数据,对之前的数据不会产生影响。
–需求:要删除刚刚创建的部门职数字段num_limit
ALTER TABLE depts
DROP(num_limit)
注意:在ALTER TABLE语句后,可以用DROP子句删除一个字段。删除一个字段时,不论表中已有行的这个字段是否有数据。
和添加字段、修改字段不同的是,删除字段一次只能有一个字段被删除
oracle中 null 不等于 null