在本次的笔记中,主要是介绍创建表的过程,首先介绍了关于表的语法,包括,字段的类型,创建表的约束以及表的中文注释等,分为oracle与MySQL的区别,并且利用实例进行巩固训练。
1、Oracle创建表
create table 用户名.表名称( 字段名称 字段类型 [default 默认值] 约束条件PK|UK|NK, 字段名称 字段类型 [default 默认值], 字段名称 字段类型 [default 默认值], 字段名称 字段类型 [default 默认值] )
字段类型,可以有数字型或者是字符串型等
--oracle 常用的数据类型
1、char(n): n=1 to 2000(字节) 保存定长的字符串
2、varchar2(n): n=1 to 4000(字节) 可变长度的数据类型
3、number(m,n): m=1 to 38,n=-84 to 127 n表示小数的位数,m表示有效位数,m-n表示整数的位数
4、date 存放日期数据,不包含毫秒
5、timestemp 存放日期数据,包含毫秒
6、clob: 4G 用于存放海量的文字, 如一本书
7、blob:4G 用于保存二进制文件,例如图片,电影,音乐等;
约束条件,在创建表时可以添加约束条件,或者是在创建表之后添加约束条件
-- 表约束字段------
1、非空约束 not null
2、唯一约束 unique
3、主键约束 primary key
4、检查约束 check
5、外键约束 foreign key (关联的字辈字段名) references 表名(关联的父辈字段名)
*一般在使用约束条件时,会利用constraint去定义一个约束的名称,这样在触犯约束时能够判断出具体的约束条件,进而将错误的数据进行修改
6、复合主键 constraint pk_mid_name primary key (mid,name) 尽量不使用复合主键
*外键约束可以是两张表,一个子表,一个父表,也可以是同一张表
foreign key (外键) references 表名(主键)
** 在外键约束中,删除父表前需要将所有的子表数据进行删除,才能将父表的数据删除--级联操作on delete cascade:删除父表某个数据时,子表的数据也随之删除;--级联操作2 on delete null 当父表数据删除时,子表的数据不会删除
-- 查看约束 --user_constraints 数据字典表存储的约束条件信息
select constraint_name,constraint_type,table_name from user_constraints
-- 修改约束
--1、添加约束 alter table 表名 add constraint 约束名称 约束类型(约束字段)
*注意:非空约束不能使用添加约束的语法进行,需要使用修改约束进行添加
--2、修改约束
alter table 表名 modify (字段名 字段类型 约束条件)
--3、禁用/启用约束
禁用:alter table 表名 disable constraint 约束名称[cascade]
启用:alter table 表名 enable constraint 约束名称
--4、删除约束
alter table 表名 drop constraint 约束名称[cascade]
创建表的过程中可以添加表的注释或者是字段的注释
-- 添加表注释------
comment on table 表名称 is '表注释的内容';
-- 查看表注释的内容--user_tab_comments
select * from user_tab_columns where table_name = '表名'
-- 添加列注释-----user_col_comments
comment on column 列名称 is '列注释的内容';
-- 查看列注释的内容
select *from user_col_comments where table_name = '表名'
注意:
字符串长度和字节长度的区别
字节(byte): 计算机存储的基本单位,一般为8bite,
在ASCALL编码中,一个英文字符是一个字节,
在utf-8中,某些特殊的字符可能是2-4个字节;一个
字符串(string): 由字符序列组成的数据结构,用于表示文本信息,通常由字母,数字,符号或者其 他字符组成
字符串的长度是指包含的字符数,在utf-8中,一个字符长度等于2个字节;
通常可以使用字节数与字符串数进行检索字段是否包含中文,一般,只有字母,数字组成的字段字节长度与字符串长度是一样的
oracle:
length()----字符串长度
lengthb()----字节长度
mysql:
length()----字符串长度
char_length()----字节长度
2、MySQL创建表
create table 用户名.表名称( 字段名称 字段类型 [default 默认值] 约束条件PK|UK|NK comment '列注释, 字段名称 字段类型 [default 默认值], 字段名称 字段类型 [default 默认值], 字段名称 字段类型 [default 默认值] )comment '表注释'
mysql 的字段类型有些差别,字符串类型有char与varchar两种,数值类型为int;
在使用comment进行注释时,直接在列名或者是表名的后面加上comment ‘’即可。
3、oracle 创建的实例
- 创建一个报表,字段名称作为列名,中文名称作为comment包括中文表名,所有数值类保留2位小数;
表名:tb_cst_unit存量单位客户身份信息表 | ||
字段名称 | 类型和字节长度 | 中文名称 |
Cst_no | 字符型,50位 | 客户号 |
Acc_name | 字符型,120位 | 客户名称 |
License | 字符型,50位 | 依法设立或经营的执照号码 |
Rep_name | 字符型,40位 | 法定代表人或负责人姓名 |
Id_no2 | 字符型,50位 | 法定代表人或负责人证件号码 |
Ope_name | 字符型,40位 | 授权办理业务人员姓名 |
Id_no4 | 字符型,50位 | 授权办理业务人员证件号码 |
Reg_amt | 数值型,18位 | 注册资本金 |
本表建立索引字段,创建三个组合索引和一个独立索引。
三个组合索引:rep_name+cst_no;
一个独立索引:cst_no。
CREATE TABLE tb_cst_unit (
cst_no VARCHAR2(50),
acc_name VARCHAR2(120),
license VARCHAR2(50),
rep_name VARCHAR2(40),
id_no2 VARCHAR2(50),
ope_name VARCHAR2(40),
id_no4 VARCHAR2(50),
reg_amt NUMBER(18,2)
);
--给出中文注释
COMMENT ON TABLE tb_cst_unit IS '存量单位客户身份信息表';
COMMENT ON COLUMN tb_cst_unit.cst_no IS '客户号';
COMMENT ON COLUMN tb_cst_unit.acc_name IS '客户名称';
COMMENT ON COLUMN tb_cst_unit.license IS '依法设立或经营的执照号码';
COMMENT ON COLUMN tb_cst_unit.rep_name IS '法定代表人或负责人姓名';
COMMENT ON COLUMN tb_cst_unit.id_no2 IS '法定代表人或负责人证件号码';
COMMENT ON COLUMN tb_cst_unit.ope_name IS '授权办理业务人员姓名';
COMMENT ON COLUMN tb_cst_unit.id_no4 IS '授权办理业务人员证件号码';
COMMENT ON COLUMN tb_cst_unit.reg_amt IS '注册资本金';
--创建唯一索引
CREATE UNIQUE INDEX tb_st_no ON tb_cst_unit(cst_no)
--创建组合的索引
CREATE INDEX tb_no_amt ON tb_cst_unit(cst_no,reg_amt)
4、mysql 创建的实例
同一个实例,在mysql中的代码为:
CREATE TABLE tb_cst_unit (
cst_no VARCHAR(50) COMMENT '客户号',
acc_name VARCHAR(120) COMMENT '客户名称',
license VARCHAR(50) COMMENT '依法设立或经营的执照号码',
rep_name VARCHAR(40) COMMENT '法定代表人或负责人姓名',
id_no2 VARCHAR(50) COMMENT '法定代表人或负责人证件号码',
ope_name VARCHAR(40) COMMENT '授权办理业务人员姓名',
id_no4 VARCHAR(50) COMMENT '授权办理业务人员证件号码',
reg_amt decimal(18, 2) COMMENT '注册资本金'
)COMMENT '存量单位客户身份信息表';