oracle-数据库04

本文介绍了Oracle数据库中创建表的CREATETABLE语句,包括不同数据类型如NUMBER、CHAR、VARCHAR2等的使用,以及约束条件如主键、外键、非空、默认值和唯一性的详细说明。文章强调了数据类型的差异和约束在确保数据完整性和一致性方面的作用。
摘要由CSDN通过智能技术生成

来看看更简单的知识点create(以基本表为例)

简单框架:

create table t_name(
col_name type_name constraint,
col_name type_name constraint,
……
);

由框架可以看出create主要分为type数据类型、constraint约束条件(约束条件不是必要)

一、数据类型

1、数值型

number(m,n),定义了由m位有效数字以及n为小数构成的数据(多余部分四舍五入)

范围:m [1,38],n [-84,127]

若设置int型,会转成number

2、字符型

char(m),定义了长度为m字节的字符串(不够补空格,超出报错)

范围:m [1,2000]

varchar2(m),定义了可变长不超过m的字符串(超出可补长)

写法:varchar2(m byte)    varchar2(m char)

编码:UTF-8:一个汉字占用3byte,GBK:一个汉字占用2byte

范围:m [1,4000] byte

这是oracle特有的数据类型,它代替了varchar()类型

为什么不直接用varchar2()代替char()就好?

1、varchar2按字符匹配,char()按字符串匹配,char效率更高

2、发生行迁移现象:简单说如下,两个表作为数据空间,当03号数据过长至原表存不下时,会开辟一个新的空间来存储,新空间的地址存在原来的位置(指针)

01!!!!!!
02@@@@@@
03(0X1234)

0X1234:

#############################################

nchar(m),用于存储unicode字符(不足补空格,超出报错)【与char比较】

范围:m 1~2000 byte(总字节=最大(字符占字节数)*字符数)

nvarchar2(m),定义了不超m的字符串(超出可补长)【与varchar2比较】

范围:m [1,4000] byte

varchar2基础上屏蔽了数据编码,规定一个汉字占用2byte

3、日期型

date,用于存储日期、时间(最小精确到秒)

timestamp(p),用于存储精度到p的精确时间(最小精确到纳秒)

范围:p [0,9],默认为6

4、大数据类型(少见)

long,存储可变长的超长字符串

范围:1~2G

(可用来存备注)

lob:有四种类型

clob,字符lob,用于存储大量文本信息(数据库字符与客户字符需要转换)

nclob,字符lob,存储大量信息,使用数据库的国家字符集

blob,二进制lob,存储二进制信息,如音频、视频、图像等

bfile,二进制文件lob,存储外部维护文件指针

raw,固定长度二进制数据

范围:1~2000 byte

long raw,可变长度的二进制数据

范围:1~2G

rowid,十六进制串表示的行地址,表中的唯一标识

范围:10 byte

nrowid,二进制数据表的行地址,唯一标识

范围:1~4000 byte

二、完整性约束条件

1、实体完整性

primary key 主码,该字段属性为主属性,不能重复,不能为空值,

写法:

primary key                                                                        --此方法只能定义一字段为主键

create table t(
id number primary key,
……
);

primary key(col_name)                                                   --可定义多字段为主键

create table t(
id number,
……
primary key(id)
);

constraint pk_name primary key(col_name)            --可定义别名

create table t(
id number,
……
constraint pk_name primary key(id)
);

(这里隐含了每个基本表只能有一个主键,而主键中可以有多个字段) 

解释:为该表的标识,区别每一行的标识

如学生信息中的学号、医院病人看病的流水号等

2、参照完整性

foreign key 外码,该字段属性的来源为另一表中字段的主属性

写法:

(1)前半部分

references t_name(col_name)                                                                                   --跟在其后

create table t(
id number primary key,
name varchar2(20) references st(name),
……
);

foreign key references t_name(col_name)                                                             

create table t(
id number primary key,
name varchar2(20),
……
foreign key(name) references st(name)
); 

constraint fk_name foreign key(col_name) references t_name(col_name)        --定义别名

create table t(
id number primary key,
name varchar2(20),
……
constraint fk_name foreign key(name) references st(name)
); 

解释:将该表与另一表相关联,形成主-副(该表)关系

注意,两字段并不一定是按序一 一对应,只要table 2字段sno中内容存在于table 1字段sno内即可 

(2)后半部分(级联删除问题)

当主表中被参照部分内容被删除,副表相应部分的操作,默认为禁止删除

on delete cascade

副表内容连同其他数据一起被删除

on delete set null 

副表该字段内容置空

3、用户完整性

not null 非空,不能为(null

写法:not null

create table t(
id number,
name varchar2(20),
age number not null,
……
);

default 默认,当没有值时取给定的默认值

写法:

default ch

default(ch) 

create table t(
id number,
name varchar2(20) default('未命名'),
age number default 0,
……
);

unique 不重,该字段属性值不能重复,有点类似主码(允许存在空值)

写法:(同主键)

unique

unique (col_name1,col_name2)

constraint u_name unique (col_name1,col_name2)

解释:unique约束称为唯一性约束,用来标识每一行数据,作用和主键一样 

check 检查,规定该字段属性取值范围、格式

写法:

check(col_name (比较运算) ……)

create table t(
id number,
telnum number check(length(telnum) >= 13),
……
);

check(col_name like '……')

create table t(
id number,
password char(6) check(password like '[0-9,a-z,A-Z]'),
……
);

check(regexp_like(col_name,'……'))                                                    --正则表达,比like更能表示

create table t(
id number,
password char(6) check(regexp_like(password, '[0-9,a-z,A-Z]')),
……
);

(正则在此不详细说,后续会出) 

4、完整性约束建立、修改、限制、删除

add

alter table t add cons_type(col_name); 

alter table t add constraint cons_name cons_type(col_name);

not null约束不能使用add

modify

alter table t modify constraint cons_name cons_type(col_name);

启用/禁用

alter table t enable constraint cons_name;

alter table t disable constraint cons_name;

drop

alter table t drop constraint cons_name;

not null约束使用modify改为null即为删除


04完 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值