db2数据库create database on语句是什么意思

db2数据库create database on语句是什么意思,第1张

C:\Documents and Settings\tstbd>db2 create database

CREATE DATABASE database-name

[AT DBPARTITIONNUM | [AUTOMATIC STORAGE {NO | YES}]

[ON drive[{,drive}][DBPATH ON drive]]

[ALIAS database-alias] [USING CODESET codeset TERRITORY territory]

[COLLATE USING {SYSTEM | IDENTITY | IDENTITY_16BIT | COMPATIBILITY | NLSCHAR | U

[PAGESIZE integer [K]]

[NUMSEGS numsegs] [DFT_EXTENT_SZ dft_extentsize] [RESTRICTIVE]

[CATALOG TABLESPACE tblspace-defn] [USER TABLESPACE tblspace-defn]

[TEMPORARY TABLESPACE tblspace-defn] [WITH "comment-string"] ]

[AUTOCONFIGURE [USING config-keyword value [{,config-keyword value}]]

[APPLY {DB ONLY | DB AND DBM | NONE}]]

on 代表数据创建在哪个目录下面。

参数详解

1 DATABASE database-name

数据库指定名称,在本地和系统库中,都必须唯一的,不能包含空格。

2 AT DBPARTITIONNUM

指定数据库将要被创建在发出命令的分区。当创建一个新库,不要指定这个参数。可以用它重建一个因为损坏而删除的数

据库分区。当用这个参数创建库,数据库将处于restore pending状态。不切断应用可能导致不一致,用时谨慎。

3 AUTOMATIC STORAGE NO | YES

指定自动存储打开或关闭。默认是打开的。

4 ON path or drive

这个子句和AUTOMATIC STORAGE的值有关,它指定了DB表空间的容器位置。详细的目录结构如下

/Path or Drive ----------> 数据库目录

|

|------ InstanceName ----------> 实例名

|

|------ NODEnnnn ----------> 节点名

|

|------ DataBaseName ----------> 数据库名

|

|------Tnnnnnnn ----------> 表空间容器

对于AUTOMATIC STORAGE NO:只有一个path可以包含在ON后,它指定了DB的位置。如果没有指定这个参数,DB创建到默认路径中,该默认路径为dbm cfg的dftdbpath指定。

对于AUTOMATIC STORAGE YES:可以列出多个路径,有逗号分隔,这些路径作为存储路径和保存自动存储表空间的容器。对于多分区DB,相同的存储路径被用在所有分区中。

创建数据库后将创建三个缺省表空间:

T0000000子目录中包含带有系统目录表的目录表空间。

T0000001子目录中包含缺省临时表空间。

T0000002子目录中包含缺省用户数据表空间。

每个子目录或容器中都会创建一个名为 SQLTAGNAM 的文件。这个文件可以标记正在使用中的子目录,因此在以后创建其他表空间时,不会尝试使用这些子目录。

此外,名为 SQLDAT 的文件中还存储有关子目录或容器包含的每个表的信息。星号()将被唯一的一组数字取代,用来识别每个表。对于每个 SQLDAT 文件,可能有一个或多个下列文件,这取决于表类型、表的重组状态或者表是否存在索引、LOB 或 LONG 字段:

SQLBKM(如果它是一个 MDC 表,那么它包含块分配信息)

SQLLF(包含 LONG VARCHAR 或 LONG VARGRAPHIC 数据)

SQLLB(包含 BLOB、CLOB 或 DBCLOB 数据)

SQLXDA(包含 XML 数据)

SQLLBA(包含有关 SQLLB 文件的分配和可用空间信息)

SQLINX(包含索引表数据)

SQLIN1(包含索引表数据)

SQLDTR(包含用于重组 SQLDAT 文件的临时数据)

SQLLFR(包含用于重组 SQLLF 文件的临时数据)

SQLRLB(包含用于重组 SQLLB 文件的临时数据)

SQLRBA(包含用于重组 SQLLBA 文件的临时数据)

5、DBPATH ON指定了数据库基础文件(控制文件,日志文件等)的创建位置。如果没有指定,则数据库在ON后面第一

个路径指定。如果没有指定路径,则在默认位置创建,该默认路径为dbm cfg的dftdbpath指定。数据库路径里面创建了

分层目录结构。这个结构保存了数据库 *** 作需要的文件,目录结构具体如下

/Path or Drive ----------> 数据库目录

|

|------ InstanceName ----------> 实例名

|

|------ NODEnnnn ----------> 节点名

|

|------ SQLxxxxx ----------> 数据库编号

| |

| |------SQLOGDIR ----------> 数据库日志目录

|

|------sqldbdir ----------> 本地数据库编目

其中SQLOGDIR目录用来存放数据库日志文件,建库后可以更改日志文件位置

SQLxxxxx目录下包含如下文件

SQLBP1 和 SQLBP2 文件中都包含缓冲池信息。这两个文件中具有相同的副本,从而提供备份。

SQLSPCS1 和 SQLSPCS2 文件中都包含表空间信息。这两个文件中具有相同的副本,从而提供备份。

SQLSGF1 和 SQLSGF2 文件中都包含与数据库的自动存储器相关的存储路径信息。这两个文件中具有相同的副本,从而提供备份。

SQLDBCON 文件中包含数据库配置信息。切勿编辑此文件。要更改配置参数,请使用控制中心或者使用 UPDATE DATABASE CONFIGURATION 和 RESET DATABASE CONFIGURATION 命令。

db2rhistasc 历史记录文件及其备份 db2rhistbak 中包含关于备份、复原、表装入、表重组、表空间改变和其他数据库更改的历史记录信息。

DB2TSCHNGHIS文件中包含日志文件级别的表空间更改的历史记录。对于每个日志文件,DB2TSCHGHIS中包含有助于确定日志文件影响哪些表空间的信息。表空间恢复使用此文件中的信息来确定在进行表空间恢复期间要处理哪些日志文件。可以在文本编辑器中检查这两个历史记录文件中的内容。

日志控制文件 SQLOGCTLLFH 和 SQLOGMIRLFH 中包含有关活动日志的信息。

恢复处理过程使用这些文件中的信息来确定要在日志中后退多远来开始恢复。SQLOGDIR子目录中包含实际的日志文件。

注:您应确保不要将日志子目录映射到用于存储数据的磁盘。这样,在磁盘发生问题时,只会影响到数据或日志,而不会同时影响这两者。由于日志文件与数据库容器不会争用同一磁盘磁头的移动,因此这可提供很多性能方面的好处。要更改日志子目录的位置,请更改 newlogpath数据库配置参数。

SQLINSLK文件用于确保一个数据库只能由数据库管理器的一个实例使用。

在创建数据库的同时,还在db2event目录下创建了详细死锁事件监视器。详细死锁事件监视器文件存储在目录节点的数据库目录中。当事件监视器达到它要输出的最大文件数 时,它将取消激活,并且将把一条消息写入通知日志中。这样可防止事件监视器消耗过多的磁盘空间。除去不再需要的输出文件将允许在下一次数据库激活时再次激 活事件监视器。

DBPATH ON选项可以被用来把以上文件和信息,放在一个与数据库数据存储路径分开的路径中。当使用automatic storage时,建议将数据库的information和数据库的data分开。

对于MPP系统,数据库不能建在NFS文件夹中,不能是相对路径。每个给出的路径必须在每个数据库分区中存在并可访问。

database path最长215字符,storage path最长175字符。

5 ALIAS database-alias

在database directory中,数据库的别名。如果没指定,就用数据库名称。

6 USING CODESET codeset

指定数据进入数据库所使用的编码集。创建数据库后,不能修改。

7 TERRITORY territory

指定数据库进入数据库所使用的区域标示符或本地标示符。创建数据库后,不能修改。code set和territory的组合,必须是有效的。

Character 数据类型

Character 数据类型用来存储字母数字型数据。当你在oracle 中定义一个character 数据时,通常需要制定字段的长度,它是该字段的最大长度。ORACLE提供以下几种character 数据类型:

CHAR() CHAR数据类型是一种有固定长度和最大长度的字符串。存储在数据类型为CHAR字段中的数据将以空格的形式补到最大长度。长度定义在1——2000字节之间。

当你创建一个CHAR型字段,数据库将保证在这个字段中的所有数据是定义长度,如果某个数据比定义长度短,那么将用空格在数据的右边补到定义长度。如果长度大于定义长度将会触发错误信息。

VARCHAR() varchar型数据是varchar2型数据的快照。

VARCHAR2() varchar2数据类型是一种可变长度的、有最大长度的字母数字型数据。Varchar2类型的字段长度可以达到4000字节,Varchar2类型的变量长度可以达到32676字节。

一个空的varchar2(2000)字段和一个空的varchar2(2)字段所占用的空间是一样的。

NCHAR() 和 NVARCHAR2() NCHAR() 和 NVARCHAR2()数据类型分别与CHAR() 和 VARCHAR2()类型是相同的,只不过它们用来存储NLS(National Language Support)数据。

LONG LONG 数据类型是一个遗留下来的而且在将来不会被支持的数据类型。它将被LOB(Large Object)数据类型所代替。

比较规则 Varchar2和char数据类型根据尾部的空格有不同的比较规则。对Char型数据,尾部的空格将被忽略掉,对于Varchar2型数据尾部带空格的数据排序比没有空格的要大些。比如:

Char 型数据: ‘YO’=‘YO ’

Varchar2型数据: ‘YO’<’YO ’

Numberic 数据类型

Numberic 数据类型用来存储负的和正的整数、分数和浮点型数据,范围在-110-103 和9999…9910125之间,有38位的精确度。标识一个数据超出这个范围时就会出错。

Number(

,) Number数据类型存储一个有p位精确度的s位等级的数据。

DATE 数据类型

DATE 数据类型用来存储日期和时间格式的数据。这种格式可以转换为其他格式的数据去浏览,而且它有专门的函数和属性用来控制和计算。以下的几种信息都包含在DATE数据类型中:

Century

Year

Month

Day

Hour

Minute

Second

LOB 数据类型

LOB(Large Object) 数据类型存储非结构化数据,比如二进制文件,图形文件,或其他外部文件。LOB 可以存储到4G字节大小。数据可以存储到数据库中也可以存储到外部数据文件中。LOB数据的控制通过DBMS_LOB 包实现。BLOB, NCLOB, 和CLOB 数据可以存储到不同的表空间中,BFILE存储在服务器上的外部文件中。LOB数据类型有以下几种:

BLOB: 二进制数据

CLOB: 字符型数据

BFILE: 二进制文件

其他数据类型

ROWID ROWID 数据类型是ORACLE数据表中的一个伪列,它是数据表中每行数据内在的唯一的标识。

nid

是int类型

也就是说数据库里面存的是int类型

你的变量是long

那么你就需要进行转换

丢失小数点部分

建议修改数据库字段属性为decimal型

因为强制转换会导致数据不准确

Oracle 中LONG 是 可变长度的字符数据,其长度可达2G个字节,而非JAVA中的long类型,所有才会出现数字转成字符的错误,必须得用TO_CHAR方法才可以,反之是没问题的。

你用number类型存就可以了,包含java中的long的

一、数字类型。

数字类型按照我的分类方法分为三类:整数类、小数类和数字类。我所谓的“数字类”,就是指DECIMAL和NUMERIC,它们是同一种类型。它严格的说不是一种数字类型,因为他们实际上是将数字以字符串形式保存的;他的值的每一位(包括小数点)占一个字节的存储空间,因此这种类型耗费空间比较大。但是它的一个突出的优点是小数的位数固定,在运算中不会“失真”,所以比较适合用于“价格”、“金额”这样对精度要求不高但准确度要求非常高的字段。

小数类,即浮点数类型,根据精度的不同,有FLOAT(单精度)和DOUBLE(双精度)两种。它们的优势是精确度,FLOAT可以表示绝对值非常小、小到约 117E-38 (00000117, 小数点后面有37个零)的小数,而DOUBLE更是可以表示绝对值小到约 222E-308 (00000222, 小数点后面有307个零)的小数。FLOAT类型和DOUBLE类型占用存储空间分别是4字节和8字节。如果需要用到小数的字段,精度要求不高的,当然用FLOAT了!可是说句实在话,我们“民用”的数据,哪有要求精度那么高的呢?这两种类型至今我没有用过——我还没有遇到适合于使用它们的事例。

用的最多的,最值得精打细算的,是整数类型。从只占一个字节存储空间的TINYINT到占8个字节的BIGINT,挑选一个“够用”并且占用存储空间最小的类型是设计数据库时应该考虑的。TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT占用存储空间分别为1字节、2字节、3字节、4字节和8字节,就无符号的整数而言,这些类型能表示的最大整数分别为255、65535、16777215、4294967295和18446744073709551615。如果用来保存用户的年龄(举例来说,数据库中保存年龄是不可取的),用TINYINT就够了;九城的《纵横》里,各项技能值,用SMALLINT也够了;如果要用作一个肯定不会超过16000000行的表的AUTO_INCREMENT的IDENTIFY字段,当然用 MEDIUMINT 不用 INT ,试想,每行节约一个字节,16000000行可以节约10兆多呢!

二、日期时间类型

日期和时间类型比较简单,无非是 DATE、TIME、DATETIME、TIMESTAMP和YEAR等几个类型。只对日期敏感,而对时间没有要求的字段,就用DATE而不用DATETIME是不用说的了;单独使用时间的情况也时有发生——使用TIME;但最多用到的还是用DATETIME。在日期时间类型上没有什么文章可做,这里就不再详述。

三、字符(串)类型

不要以为字符类型就是 CHAR !CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要占去10个字节的空间;而VARVHAR则是可变长度的,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的,VARCHAR 类型的实际长度是它的值的(实际长度+1)。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度呀!从这个“+1”中也应该看到,如果一个字段,它的可能值最长是10个字符,而多数情况下也就是用到了10个字符时,用VARCHAR就不合算了:因为在多数情况下,实际占用空间是11个字节,比用CHAR(10)还多占用一个字节!

举个例子,就是一个存储股票名称和代码的表,股票名称绝大部分是四个字的,即8个字节;股票代码,上海的是六位数字,深圳的是四位数字。这些都是固定长度的,股票名称当然要用 CHAR(8) ;股票代码虽然是不固定长度,但如果使用VARVHAR(6),一个深圳的股票代码实际占用空间是5个字节,而一个上海的股票代码要占用7个字节!考虑到上海的股票数目比深圳的多,那么用VARCHAR(6)就不如CHAR(6)合算了。

虽然一个CHAR或VARVHAR的最大长度可以到255,我认为大于20的CHAR是几乎用不到的——很少有大于20个字节长度的固定长度吧?不是固定长度的就用VARCHAR!大于100的VARCHAR也是几乎用不到的——比这更大的用TEXT就好了。TINYTEXT,最大长度为255,占用空间也是(实际长度+1);TEXT,最大长度65535,占用空间是(实际长度+2);MEDIUMTEXT,最大长度16777215,占用空间是(实际长度+3);LONGTEXT,最大长度4294967295,占用空间是(实际长度+4)。为什么“+1”?“+2”?“+3”?“+4”?你要是还不知道就不应该了。这些可以用在论坛啊、新闻啊,什么的,用来保存文章的正文。根据实际情况的不同,选择从小到大的不同类型。

四、枚举和集合类型

枚举(ENUM)类型,最多可以定义65535种不同的字符串从中做出选择,只能并且必须选择其中一种,占用存储空间是一个或两个字节,由枚举值的数目决定;集合(SET)类型,最多可以有64个成员,可以选择其中的零个到不限定的多个,占用存储空间是一个到八个字节,由集合可能的成员数目决定。

javaDB其实就是Derby,它并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK60里面带的这个Derby的版本是 10217,支持存储过程和触发器;有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,前者的数据库服务器和客户端都在同一个 JVM里面运行,后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 40规范(JSR 221),现在我们如果要练习JDBC的用法,没有必要单独装一个数据库产品了,直接用Derby就行

1、本身没有 *** 作界面,可以用第三方工具来管理(也就是你说的 *** 作界面),Aqua Data Studio 具备管理功能的用于 Apache Derby 关系数据库的管理工具和数据库查询工具。直观管理功能让用户能够浏览和修改数据库结构,包括架构对象和数据库存储,以及维护数据库安全。集成查询工具让您能够迅速创建、编辑和执行 SQL 查询与脚本。Aqua Data Studio 进一步提供导入与导出工具,从而轻松地将数据移入和移出不同的数据格式及 Apache Derby 数据库。集成在这些工具内的是库浏览器 (Repository Browser),拥有 CVS 和 Subversion (SVN) 的完整来源控制客户端。

2、两者的区别,简单的说,就是javaDB是一个简化轻量级数据库,适合小型系统的小规模测试用,完全可以跑在内存里的数据库,它只有3M大小,而MySQL则是可以应用部署大型系统的数据库,功能更多更全,也更稳定,是用范围更广。

3、下面是个使用derby的简单例子:

首先导入JAR包:derbyjar,如果你装的是JDK6,在C:\Program Files\Sun\JavaDB\lib目录下就可以找到

然后就要创建数据库了:

代码

private Connection getConnection() throws SQLException {

Connection connection = DriverManager

getConnection("jdbc:derby:userDB;create=true;user=test;password=test");

connectionsetAutoCommit(false);

return connection;

}

其中userDB是要连接数据库的名字,create=true表示如果该数据库不存在,则创建该数据库,如果数据库存在,则用用户user=test;密码password=test连接数据库

有了数据库,接下来该建表了:

代码

private void createTable(Connection connection) throws SQLException {

Statement statement = connectioncreateStatement();

String sql = "create table USERS("

+ " ID BIGINT not null generated by default as identity,"

+ " USER_NAME VARCHAR(20) not null,"

+ " PASSWORD VARCHAR(20),"

+ " constraint P_KEY_1 primary key (ID))";

statementexecute(sql);

sql = "create unique index USER_NAME_INDEX on USERS ("

+ " USER_NAME ASC)";

statementexecute(sql);

statementclose();

}

创建了 USERS表,包括ID,USER_NAME,PASSWORD三个列,其中ID是主键,其中generated by default as identity 的作用类似sequence,identity是定义自动加一的列,

GENERATED BY ALWAYS AS IDENTITY

GENERATED BY DEFAULT AS IDENTITY

By always和by default是说明生成这个IDENTITY的方式。

By always是完全由系统自动生成。

by default是可以由用户来指定一个值。

编写与USERS表对应的javabean(这个就不多说了),:

代码

public class User implements Serializable {

/

/

private static final long serialVersionUID = 1L;

private Long id;

private String userName;

private String password;

public Long getId() {

return id;

}

public void setId(Long id) {

thisid = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

thisuserName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

thispassword = password;

}

}

接下来就可以就数据库进行增删改查的 *** 作了:

插入数据:

代码

private void create(User user) {

Connection connection = null;

try {

connection = thisgetConnection();

PreparedStatement statement = connection

prepareStatement("insert into users (user_name,password) values(,)");

int index = 1;

statementsetString(index++, usergetUserName());

statementsetString(index++, usergetPassword());

statementexecute();

usersetId(thisgetId(connection));

connectioncommit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

代码

private Long getId(Connection connection) throws SQLException {

CallableStatement callableStatement = connection

prepareCall("values identity_val_local()");

ResultSet resultSet = callableStatementexecuteQuery();

resultSetnext();

Long id = resultSetgetLong(1);

resultSetclose();

callableStatementclose();

return id;

}

getId方法是获得系统默认的id值,是通过 identity_val_local()获得的,而函数IDENTITY_VAL_LOCAL()则可以在INSERT语句执行之后,为我们返回刚才系统为id所产生的值感觉还是有点想sequence的curr_val

修改数据:

代码

private void update(User user) {

Connection connection = null;

try {

connection = thisgetConnection();

PreparedStatement statement = connection

prepareStatement("update users set user_name=,password= where id=");

int index = 1;

statementsetString(index++, usergetUserName());

statementsetString(index++, usergetPassword());

statementsetLong(index++, usergetId());

statementexecute();

connectioncommit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

删除数据:

代码

public void delete(Long id) {

Connection connection = null;

try {

connection = thisgetConnection();

PreparedStatement statement = connection

prepareStatement("delete from users where id=");

statementsetLong(1, id);

statementexecute();

connectioncommit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

查询数据:

代码

public User findById(Long id) {

Connection connection = null;

try {

connection = thisgetConnection();

PreparedStatement statement = connection

prepareStatement("select user_name,password from users where id=");

statementsetLong(1, id);

ResultSet resultSet = statementexecuteQuery();

User user = null;

if (resultSetnext()) {

user = new User();

usersetId(id);

usersetUserName(resultSetgetString("user_name"));

usersetPassword(resultSetgetString("password"));

}

resultSetclose();

statementclose();

connectioncommit();

return user;

} catch (SQLException e) {

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

这要看你的需要了,就性能而言,还是整形值的效率会高些(很有限),如果记录多就用long,否则用int,如果有特殊需要用varchar也没什么,在性能上的表现是不明显的。整形值比字符形的另一个优点就是可以通过数据库实现自增加列,减少编程的复杂性。

以上就是关于db2数据库create database on语句是什么意思全部的内容,包括:db2数据库create database on语句是什么意思、数据库中数据类型有哪些、系统的数据库用mysql,字段nid为int类型,怎么将long型插入数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9328534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存