Oracle------第八章Creating Tables
第八章:创建表
- create table:创建表固定语句
schema:可有可无,指定该表创建在谁的用户下的。不写,放在当前用户下
table:指定表名 - create table s_stu(
字段名 数据类型 [默认值] [列级约束],
…
[表级约束]
);
-
命名规则
a)以字母开头
b)长度1-30字符
c)由字母,数字_$#组成
d)同一个用户下不能出现相同的名字
e)不能使用Oracle保留字 -
数据类型
a) 字符的数据类型
varchar:可变长字符串,是所有数据库可用
varchar2:可变长字符串,是Oracle特有的
1) 节省内存空间
2) 检索效率不高
3) 保存字符串长度不固定,长度相差很大的字符串。
4) 如备注信息
char:不可变长字符串
1) 浪费内存空间
2) 检索效率高
3) 保存字符串长度固定,长度相差不大的字符串。
4) 如电话号码,身份证号
clob:定义大数据的字符串,最大2GBb)数字的数据类型
Number 定义整数
number(5,2) 定义小数
小数位:2位
整数位:5-2位c)日期的数据类型
dated)二进制的数据类型
blobe)默认值----插入数据时
default 默认值
- 创建一个学生表
-
1)、列级约束
drop table s_stu; create table s_stu( id number(7) constraint s_stu_id_pk primary key, name varchar2(10) constraint s_stu_name_nn not null, age number(2) default 0, phone char(11) constraint s_stu_phone_uk unique, gender char(2) constraint s_stu_gender_ck check(gender in('f','m')), c_id number(7) constraint s_stu_c_id_fk references s_dept(id) );
2)、表级约束
create table s_stu( id number(7), name varchar2(10) constraint s_stu_name_nn not null, age number(2) default 0, phone char(11), gender char(2), c_id number(7), constraint s_stu_id_pk primary key(id), constraint s_stu_phone_uk unique(phone), constraint s_stu_gender_ck check(gender in('f','m')), constraint s_stu_c_id_fk foreign key(c_id) references s_dept(id) );
-
列级约束和表级约束
a)约束的类型
primary key ----主键PK
not null-----------空NN
unique-----------唯一键UK
check------------选择性CK
foreign key-----外键FKb)查看约束的名字
select constraint_name from user_constraints where table_name='S_STU';
约束的名字,系统会默认取一个名字,
名字的格式:SYS_Cn n代表的数字自己取约束名字:constraint name
需要放在约束类型的前面。
约束名字建议:表名_列名_约束类型的缩写c)列级约束:约束类型直接放在字段的后面,只能作用于一个字段
表级约束:约束约束和字段之间有,隔开,可以作用于多个字段
规则:非空约束只能用列级约束。
联合主键,联合外键,联合唯一键只能用表级约束。
其他的情况自选
联合主键:由2个或者2个以上的字段作为主键
联合外键:由2个或者2个以上的字段作为外键
联合唯一键:由2个或者2个以上的字段作为唯一键 -
创建表时约束如何写
a)主键约束,primary key
1)列级约束:字段 数据类型 取名字 约束类型,
2)表级约束:字段 数据类型,
取名字 约束类型(字段),
3)联合主键:
字段1 数据类型,
字段2 数据类型,
取名字 约束类型(字段1,字段2),b)唯一键约束:unique
c)非空约束:not null
1)列级约束:字段名 数据类型 取名字
not nulld)选择性约束
1)列级约束:字段名 数据类型 取名字
check(字段名 in(值1,值2)),
2)表级约束:字段名 数据类型,
取名字 check(字段名 in(值1,值2)),e)外键约束
1)列级约束:字段名 数据类型 取名字
references 表(字段),
2)表级约束:字段名 数据类型,
取名字 foreign key(字段)
references 表(字段),
3)联合外键:依赖的表的是联合主键,
就要用联合外键
字段名1 数据类型,
字段名2 数据类型,
取名字 foreign key(字段1,字段2)
references 表(字段1,字段2), -
读ER图哪些数据
ER—实体关系模型图a)有哪些实体,圆角的矩形就是一个实体。
一个实体就是一张表。
大写字母是实体名字----后期可以作为表名b)每个字体中有哪些字段。
用小写字母----字段名
#代表唯一性
*代表非空
o代表没有任何要求,可以为null,c)实体与实体之间的关系.通过外键来维护
创建表的时候需要给某张表增加外键
1)一对一:把外键放在任何的一方,
如果出现了must be,应该把外键放在mustbe一方
2)一对多:把外键放在多的一方
3多对多:创建一张桥表,
通过桥表把多对多的关系转换2个一对多的关系。
4)may be可能依赖和must be必须依赖
must be外键的值不能为空
may be外键的值可以为空d) | 代表联合主键