oracle数据库创建表时,int型数据为何报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库创建表时,int型数据为何报错相关的知识,希望对你有一定的参考价值。

参考技术A oracle数据库中是有int型的,你在创建表的时候,使用int型报错,
可能的原因是你为int型增加了精度,如int(10),或者是你的oracle
版本过低造成的。
在oracle中int型与integer型都是number类型的子类型,int是integer
的简写,相当于number(38),是为了兼容ANSI/ISO和IBM的数据类型
而定义的。它的存储精度是38位。
在创表时,最好不要用int型,因为我们基本上不会用到38位的整数,
用int会浪费存储空间。int型列可以定义为number(数字)。
参考技术B INT类型是NUMBER类型的子类型。
下面简要说明:
(1)NUMBER(P,S)
该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数。假设定义SAL列为NUMBER(6,2)则整数最大位数为4位(6-2=4),而小数最大位数为2位。
(2)INT类型
当定义整数类型时,可以直接使用NUMBER的子类型INT,顾名思义:INT用于整型数据。

所以你这个sla int not null就行了,不用指定大小追问

改为char类型就好了,为什么int就不行

追答

int是可以的,你别用int(20),就写int就行了

参考技术C 建议直接用number就可以,int不能指定长度。
int只能存取整数,等同于number(38,0)
参考技术D oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。
int类型只能存储整数;
number可以存储浮点数,也可以存储整数;
number(8,1)存储小数位为1位,总长度为8的浮点数,如果小数位数不足,则用0补全;
number(8)存储总长度为8的整数;
int相当于number(22),存储总长度为22的整数。
所以如果使用INT,不要指定长度。要指定长度,请使用NUMBER(P,S)
另外,NUMBER 如果precision和scale没有指定,即相当于 NUMBER (38,7)。
第5个回答  2014-05-05 都是number类型的吧,你的int型,还可以为20个字节- -

DDL数据语言|库表管理(MySQL)

目录


库的管理

∙ \\bullet 创 建 库 c r e a t e \\colorRed创建库create create

语法 c r e a t e   d a t a b a s e   [ i f   n o t   e x i s t s ]   库 名 ; \\colorVioletcreate \\ database \\ [if \\ not \\ exists] \\ 库名; create database [if not exists] ;

其中加上 if not exists 可以有效的避免报错,提高容错性。

∙ \\bullet 修 改 库 a l t e r \\colorRed修改库alter alter

主要就是更改库的字符集操作

语法 a l t e r   d a t a b a s e   库 名   c h a r c t e r   s e t   字 符 集 ; \\colorVioletalter \\ database \\ 库名 \\ charcter \\ set \\ 字符集; alter database  charcter set ;

∙ \\bullet 删 除 库 d r o p \\colorRed删除库drop drop

语法 d r o p   d a t a b a s e   [ i f   e x i s t s ]   库 名 ; \\colorVioletdrop \\ database \\ [if \\ exists ] \\ 库名; drop database [if exists] ;

其中加上 if exists 可以有效的避免报错,提高容错性。


表的管理

∙ \\bullet 创 建 表 c r e a t e \\colorRed创建表create create

语法 c r e a t e   t a b l e   表 名 ( 字 段 名 类 型 [ ( 长 度 ) 约 束 ] , . . . ) ; \\colorVioletcreate \\ table \\ 表名(字段名 类型[(长度) 约束],...); create table ([()],...);

其中文章最后介绍了相关的类型以及约束。表的创建样例如下:

∙ \\bullet 修 改 表 a l t e r t \\colorRed修改表altert altert

核心语法 a l t e r   t a b l e   表 名   a d d ∣ m o d i f y ∣ c h a n g e ∣ d r o p   c o l u m n   列 名 [ 列 类 型   约 束 ] ; \\colorVioletalter \\ table \\ 表名 \\ add|modify|change|drop \\ column \\ 列名[列类型 \\ 约束]; alter table  addmodifychangedrop column [ ];

修改列名:alter table 表名 change column 旧列名 新列名 类型;


修改列的类型或约束:alter table 表名 modify column 列名 新类型;


添加新列:alter table 列名 add column 列名 类型;


删除列:alter table 列名 drop column 列名;


修改表名:alter table 旧表名 rename to 新表名;

示例:增加一列age年龄,并将id列名改为stuID。

∙ \\bullet 删 除 表 d r o p \\colorRed删除表drop drop

语法 d r o p   t a b l e   [ i f   e x i s t s ]   表 名 ; \\colorVioletdrop \\ table \\ [if \\ exists] \\ 表名; drop table [if exists] ;

∙ \\bullet 复 制 表 \\colorRed复制表

仅仅复制表的结构

语法 c r e a t e   t a b l e   复 制 表   l i k e   原 始 表 ; \\colorVioletcreate \\ table \\ 复制表 \\ like \\ 原始表; create table  like ;

复制表的结构+数据

语法 c r e a t e   t a b l e   复 制 表   s e l e c t   ∗   f r o m   旧 表 名 ; \\colorVioletcreate \\ table \\ 复制表 \\ select \\ * \\ from \\ 旧表名; create table  select  from ;


字段类型

我们选择类型的原则为:所选择的类型越简单越好,能保存数值的类型越小越好。

整型

分类:tinyint、smallint、mediumint、int/integer、bigint(分别占1,2,3,4,8字节)

注意事项

∙ \\bullet 我们一般使用 INT,它默认为有符号整型。当需要使用无符号整型时,在INT 后追加 UNSIGNED 关键字。

∙ \\bullet 超出范围后,报out of range异常。

∙ \\bullet 如果不设置长度,会有默认长度,长度代表了显示的最大宽度,使用zerofill关键字可以显示前面补充的0(但是只能对正数使用改关键字)。

示例:

小数型

小数型数据具体还可以再分为浮点型和定点型。

其中浮点型数据类型有float(M,D)(4个字节)、double(M,D)(8个字节)。M表示整数位数+小数位数,D表示小数位数,但是我们一般不去设置参数,我们直接让它自己进行判断。

其中定点型数据类型为decimal(M,D) ,它的范围与double相同,但是更精确。当我们不给它参数时,它会有默认值为(10,0)

示例:

字符型

字符型类型我们主要使用的是char(M)varchar(M),M表示最多的字符数。它们的比较如下:

类型含义是否节省空间是否可以省略M性能
char(M)固定长度字符,每次申请空间都为M个字符可以,默认为1相对较高
varchar(M)可变长度字符,按照情况动态申请空间不可以相对较低

其余还有一些字符型类型比如说:

binaryvarbinary保存较短的二进制字符串


enum用于保存枚举,只能选一个插入


set 用于保存集合,一次可以插入多个

日期型

日期型的类型主要有以下几个:

类型字节含义
data4表示日期
time3表示时间
year1表示年份
datatime8表示时间+日期
timestamp4表示时间+日期

注意:timestamp 比datatime更加精确,它会显示当前时区的时间(随时区的变化而变化)。


约束类型

约束含义:一种限制,用于限制表中的数据,为了保证表中的数据准确可靠性。

分类

约束的分类

NOT NULL 非空约束,保证该字段的值非空,比如:姓名、学号等;


DEFAULT 默认约束,保证该字段有默认值,比如:性别


PRIMARY KEY 主键约束,用于保证该字段的值具有唯一性并且非空,比如学号


UNIQUE 唯一 约束,用于保证该字段的值具有唯一性,可以为空,比如座位号,但是只能有一个空,否则就算重复了


CHECK 检查约束,mysql不支持,用来检查有无不符合的值


FOREIGN KEY 外键约束,用于限制两个表的关系,用于保证该字段的值必须来自主表关联列的值。在从表添加外键约束用于引用主表中某列的值。比如学生表的专业编号。

添加约束的时机:设计表时、修改表时(在数据添加之前)

约束的添加分类

∙ \\bullet 列极约束:直接在字段名和类型后面追加约束类型,六大约束语法上都支持,但是外键约束没有效果

∙ \\bullet 表极约束:在各个字段的最后添加除了非空、默认,其他的都支持,一般表极约束只添加外键约束。

创建表时添加约束

使用列极约束:

使用表极约束:在各个字段的最后添加 [CONSTRAINT] 约束名 约束类型(字段名)

注意:show index from … 查看表中的所有索引,包括主键、外键、唯一

修改表时添加约束

1.添加列级约束modify column,在列名后面接列类型、约束

2.添加表级约束 add,在列名后面接列类型、约束

修改表时删除约束

语法 a l t e r   t a b l e   表 名   d r o p   约 束   约 束 名 \\colorVioletalter \\ table \\ 表名 \\ drop \\ 约束 \\ 约束名 alter table  drop  

注意

主键约束和唯一约束的对比

类型唯一性是否允许为空一个表中可以有几个是否允许组合
主键保证不允许只能有一个允许(不推荐)
唯一保证允许可以有多个允许(不推荐)

外键特点

1.在从表上设置外键关系

2.从表的外键列的类型与主表的外键列类型一致或兼容,名称无要求

3.主表的关联列必须是一个key(一般是主键或唯一键)

4.插入数据时,先插入主表后插入从表;删除数据时,先删除从表,后删除主表

以上是关于oracle数据库创建表时,int型数据为何报错的主要内容,如果未能解决你的问题,请参考以下文章

oracle我建表时的数据类型是int,为啥插值的时候小数照样能插不报错?

oracle 中建表时,属性用int好还是number好 ?

oracle为啥创建实例,为何通过实例来访问数据,这样有啥优点吗

ORACLE SQL - 创建表时数据类型无效

oracle 中的啥数据类型会映射到 Java int?

在oracle中,创建表时,不创建主键,有没有默认索引?如果有,是啥索引?