MySql Oracle SqlServer三大数据库的数据类型列表汇编(doc 7页)
oraclemysqlsqlserver三种数据库查询表获取表数据的前100条数据与排序时。。。
oraclemysqlsqlserver三种数据库查询表获取表数据的前100条数据与排序时。
1.oracle获取表的前100条数据.select * from t_stu_copy where rownum<=100;(从1⾏开始取100⾏数据,第⼀⾏到第100⾏数据)补充:先降序排序再获取第101条到第200条之间的所有记录select * from t_stu_copy order by stuid desc where rownum between 100 and 200 ;---错误select * from t_stu_copy where rownum between 100 and 200 order by stuid desc ;---错误SELECT * FROM(SELECT ROWNUM AS rowno,t.* FROM t_stu_copy t WHERE ROWNUM <= 200 ORDER BY t.stuid ) a WHEREa.rowno > 100;正确或者:select * from t_stu_copy where stuid between 101 and 200;2.mysql获取表的前100条数据.select * from t_stu_copy limit 0,100;(从1⾏开始取100⾏数据,第⼀⾏到第100⾏数据)补充:先降序排序再获取第101条到第200条之间的所有记录select * from t_stu_copy order by stuid limit 100,100;(从101⾏开始取100⾏数据,第101⾏到第200⾏数据)或者:select * from t_stu_copy where stuid between 101 and 200;3.sqlserver获取表的前100条数据.select top 100 * from t_stu_copy ;补充:先降序排序再获取第101条到第200条之间的所有记录(三种⽅法,不过⽅法a与b得到的结果是将第101条到第200条倒过来显⽰罢了)a. select top 100 * from (select top 200 * from t_stu order by stuid) a order by stuid desc;b. select top m * into 临时表(或表变量) from tablename order by columnname set rowcount n select * from 表变量 order by columnname desc.select top 200 * into xxx from t_stu order by stuid set ROWCOUNT 100 select * from xxx order by stuid desc; xxx表⽰临时表变量.c. select * from t_stu where stuid between 101 and 200.。
数据库管理系统比较MySQLvsOraclevsSQLServer
数据库管理系统比较MySQLvsOraclevsSQLServer 数据库管理系统比较:MySQL vs Oracle vs SQL Server引言:数据库管理系统是现代信息技术领域中不可或缺的一环。
随着数据量的急剧增加和数据库应用的广泛应用,选择适合自己需求的数据库管理系统变得至关重要。
在本文中,我们将比较三种常见的数据库管理系统:MySQL、Oracle和SQL Server。
通过对比它们的性能、功能、可扩展性和使用成本,为读者提供一个更好地了解和选择的依据。
一、性能比较在数据库管理系统中,性能是一个至关重要的因素。
下面将对MySQL、Oracle和SQL Server的性能进行比较。
1.1 MySQL性能MySQL是一个轻量级的开源数据库管理系统,以其高性能而闻名。
它采用多线程处理机制和高效的索引算法,能够处理大规模的数据访问和高并发请求。
此外,MySQL还支持垂直和水平扩展,可根据实际需求进行灵活配置和调整。
因此,在对于大多数中小型应用来说,MySQL提供了相对较好的性能。
1.2 Oracle性能Oracle是一个功能强大且成熟的商业数据库管理系统。
它具有出色的性能,并且能够处理大规模的复杂数据模型。
Oracle采用了先进的事务处理机制和高效的查询优化算法,使其在处理高并发访问和复杂查询时具有出色的性能表现。
然而,Oracle的性能和功能也伴随着更高的硬件要求和许可成本。
1.3 SQL Server性能SQL Server是由微软公司开发的关系型数据库管理系统。
它在处理大规模数据时表现出色,并且支持高并发访问和复杂查询。
SQL Server 采用了先进的内存管理和缓存技术,以提高查询速度和响应时间。
此外,SQL Server还具有良好的稳定性和可靠性,适用于中小型企业的应用场景。
综合比较,MySQL适用于中小型应用,对性能要求较高且成本敏感的场景;Oracle适用于大规模企业级应用,对功能和可靠性要求较高的场景;SQL Server适用于中小型企业应用,对性能和稳定性要求较高的场景。
常用数据库类型3篇
常用数据库类型第一篇:关系型数据库介绍关系型数据库是指采用了关系模型的数据库管理系统,它以数据表为基本对象,数据表是由行和列组成的。
表结构中,每一列代表一种属性,每一行代表一个记录。
在关系型数据库中,每一个表都有一个唯一的名称,每个列都有一个唯一的名称,每个表都有一个主键,它能唯一标识表中的每一行数据。
常用的关系型数据库有MySQL、Oracle、SQL Server、PostgreSQL等。
- MySQL数据库介绍MySQL是一款开源的关系型数据库管理系统,广泛应用于Web应用程序中。
它支持多种操作系统的使用,是最受欢迎的关系型数据库之一。
MySQL支持SQL语言结构,同时还提供了非常好的性能、可靠性和可用性。
- Oracle数据库介绍Oracle是一款商业化的关系型数据库管理系统,广泛应用于大型企业级应用领域。
它支持各种操作系统,包括Windows、Linux、Unix等,同时还提供了相应的数据库管理和开发工具。
Oracle的性能、可靠性、可用性是业界公认的最好的。
- SQL Server数据库介绍SQL Server是微软公司开发的一款关系型数据库管理系统,适合于Windows平台。
它支持T-SQL语言,提供了强大的存储处理能力,包括数据存储、处理和管理等各个方面。
SQLServer广泛应用于各种Web应用和企业级应用领域。
- PostgreSQL数据库介绍PostgreSQL是一款开源的关系型数据库管理系统,提供了许多高级特性,包括用户自定义类型、复杂类型、触发器、事务支持等等。
它支持多种操作系统平台,包括Windows、Linux、Unix等。
PostgreSQL广泛应用于各种商业和学术领域,它的性能和可靠性都是业界公认的最好的。
综上所述,关系型数据库是一种非常常见的数据库类型,在企业级应用中广泛应用,它具有稳定性、易用性和可靠性等多种优点,是企业级应用的首选。
第二篇:非关系型数据库介绍非关系型数据库也称为NoSQL(Not Only SQL),它不采用传统的关系型的表格模型,而是采用键值对存储、文档型存储、图形数据库、列存储等模型。
主流数据库复制表结构(SqlServerMysqlOracleSybase)[语法差异分析]
主流数据库复制表结构(SqlServerMysqlOracleSybase)[语法差异分析]因为数据库SQL语句在各⼤产品中带有“⽅⾔性”,即SQLSERVER SYBASE都是⽤了T-SQL,Mysql是⽤的标准SQL,Oracle有有⾃⼰的PL/SQL。
由于这种“⽅⾔性”的差异导致很多SQL语句在移植的时候产⽣困难,在异构数据库的时候显得很尴尬。
当然对于DBA来说,⽆⾮是查查语法⽽已的事。
但是终究是不⽅便。
这⾥就跟⼤家分享下我⾃⼰实验整理的,复制表结构即数据的各数据库中的语法分析。
先来说说SQLSERVER⼤家最熟悉的。
--当数据库中没有新表的情况,⽐如有了A,没有B表。
select * into B from A --复制表及数据select * into B from A where 1>1 --只复制表结构--当数据中已经有了B表的情况,上⾯就不适⽤了。
insert into B select * from A --复制表数据,为了避免。
B表理论上应该没有数据,如果有,可能会造成违反主键。
insert into B select * from A where id>10 --加上where条件可以指定复制数据,上⾯没有表的情况也可以这样做。
这⾥要说的是,sybase和SQLSERVER是⼀样的。
因为从某种⾓度来说,SYBASE就是SQL的原型。
接下来是Mysql。
稍微语法有不同。
--数据库中没有B表的情况create table B select * from Acreate table B select * from A where 1<>1 --只复制表结构--有B表的情况和sqlserver基本相同insert into B select * from Aoracle 基本上合MYSQL是⼀样的,不过语法要求更严谨。
当然Mysql也可以这样写。
--数据库中没有B表的情况create table B as select * from Acreate table B as select * from A where 1<>1 --只复制表结构create table B like A--复制表结构--有B表的情况基本相同insert into B select * from A这些都是较为初级的SQL语句,但是也⽐较适⽤,以后会分析⼀些其他的常⽤SQL语句。
sql数据库常用类型
sql数据库常用类型SQL数据库中有几种常用的数据类型,这些数据类型允许您在表中存储不同种类的数据。
这里列举了一些常见的SQL数据类型:1. 整数类型(Integer Types):- `INT`:用于存储整数值。
- `SMALLINT`:用于存储较小范围的整数值。
- `BIGINT`:用于存储较大范围的整数值。
2. 小数/浮点类型(Decimal/Floating-Point Types):- `DECIMAL(precision, scale)` 或`NUMERIC(precision, scale)`:用于存储精确的小数值,`precision` 表示总位数,`scale` 表示小数位数。
- `FLOAT` 或`REAL`:用于存储浮点数值,通常用于需要近似值的情况。
3. 字符类型(Character Types):- `CHAR(n)`:用于存储固定长度的字符串,最多可以存储`n` 个字符。
- `V ARCHAR(n)` 或`V ARCHAR2(n)`:用于存储可变长度的字符串,最多可以存储`n` 个字符。
- `TEXT`:用于存储大文本对象((长字符串),适合存储大段文本。
4. 日期和时间类型(Date and Time Types):- `DATE`:用于存储日期。
- `TIME`:用于存储时间。
- `DATETIME` 或`TIMESTAMP`:用于存储日期和时间。
- `INTERV AL`:用于存储时间间隔。
5. 二进制类型(Binary Types):- `BLOB`:用于存储二进制大对象,如图像、音频或视频文件等。
- `BYTEA`(PostgreSQL中):用于存储二进制数据。
6. 布尔类型(Boolean Type):- `BOOLEAN`:用于存储逻辑值(true或false)。
7. 枚举类型(Enum Types):- `ENUM`:允许您在有限的可能值列表中选择一个值。
oracle和mysql的数据类型
oracle和mysql的数据类型Oracle和MySQL是两种常用的关系型数据库管理系统。
虽然它们具有相似的功能和用途,但在数据类型方面存在一些差异。
本文将深入探讨Oracle和MySQL的数据类型,并逐步回答有关这两个数据库的常见问题。
第一部分:Oracle数据类型Oracle提供了广泛的数据类型,用于存储不同类型的数据。
以下是一些常见的Oracle数据类型:1. 字符串类型:- CHAR(n):固定长度的字符串,n表示最大长度。
- VARCHAR2(n):可变长度的字符串,n表示最大长度。
- CLOB:用于存储大量文本数据。
2. 数值类型:- NUMBER(p, s):表示固定精度和范围的数值,p表示总位数,s表示小数位数。
- INTEGER:整数类型。
- FLOAT(p):浮点数类型,p表示精度。
3. 日期和时间类型:- DATE:存储日期和时间。
- TIMESTAMP:带有时区的日期和时间。
4. 二进制类型:- BLOB:用于存储大量二进制数据。
- RAW(n):存储固定长度的原始二进制数据,n表示字节数。
第二部分:MySQL数据类型MySQL也提供了各种数据类型,用于存储不同类型的数据。
以下是一些常见的MySQL数据类型:1. 字符串类型:- CHAR(n):固定长度的字符串,n表示最大长度。
- VARCHAR(n):可变长度的字符串,n表示最大长度。
- TEXT:用于存储大量文本数据。
2. 数值类型:- INT(m):整数类型,m表示显示宽度。
- FLOAT(p, s):浮点数类型,p表示总位数,s表示小数位数。
- DECIMAL(p, s):高精度数值类型,p表示总位数,s表示小数位数。
3. 日期和时间类型:- DATE:存储日期。
- DATETIME:存储日期和时间。
4. 二进制类型:- BLOB:用于存储大量二进制数据。
- VARBINARY(n):可变长度的二进制数据,n表示最大长度。
SQLServer,MySQL,Oracle三者的区别
SQLServer,MySQL,Oracle三者的区别目录1 Oracle、Sql Server、MySql简介1.1 Oracle1.2 SQL Server1.3 MySQL2 Oracle和MySQL的主要区别2.1 客户端和命令窗口2.2 市场占有率及其他2.3 Oracle也与MySQL操作上的一些区别2.3.1 组函数用法规则2.3.2 自动增长的数据类型处理2.3.3 主键2.3.4 单引号的处理2.3.5 翻页的SQL语句的处理2.3.6 长字符串的处理2.3.7 日期字段的处理2.3.8 空字符的处理2.3.9 字符串的模糊比较1 Oracle、Sql Server、MySql简介返回1.1 OracleOracle 能在所有主流平台上运行(包括Windows)。
完全支持所有的工业标准。
采用完全开放策略。
可以使客户选择最适合的解决方案。
对开发商全力支持,Oracle并行服务器通过使一组结点共享同一簇中的工作来扩展Windows NT的能力,提供高可用性和高伸缩性的簇的解决方案。
如果Windows NT不能满足需要,用户可以把数据库移到UNIX中。
Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。
Oracle获得最高认证级别的ISO标准认证.Oracle性能最高,保持开放平台下的TPC-D和TPC-C的世界记录Oracle多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。
Oracle 在兼容性、可移植性、可联结性、高生产率上、开放性也存在优点。
Oracle产品采用标准SQL,并经过美国国家标准技术所(NIST)测试。
与 IBM SQL/DS,DB2,INGRES,IDMS/R等兼容。
Oracle的产品可运行于很宽范围的硬件与操作系统平台上。
可以安装在70种以上不同的大、中、小型机上;可在VMS、DOS、UNIX、WINDOWS等多种操作系统下工作。
(word完整版)Oracle-SQLServer-MySQL-MongoDB数据库比较
主流数据库比较目录前言 (3)1. 数据库安装对硬件的要求 (3)1。
1. Oracle (3)1.2. SQL Server (4)1。
3. MySQL (5)2. 数据类型对比 (6)2。
1。
Oracle数据类型 (6)2.2。
SQL Server 数据类型 (7)2。
3。
MySQL 数据类型 (11)3. 三大关系型数据库比较 (14)4。
应用场景 (18)4。
1. Oracle的一般应用 (18)4。
2. MySQL的应用场景 (18)4.3. SQL Server的应用 (19)5. MongoDB-非关系型数据库 (19)5。
1。
MongoDB的应用场景 (19)5.2. MongoDB与MySQL性能比较 (19)5.2。
1. 测试目的 (19)5。
2.2。
测试环境 (19)5。
2.3. 测试结果1:插入速率 (20)5。
2.4. 测试结果2:插入稳定性 (21)5。
2。
5. 测试结果3:读取性能测试 (23)5.2.6。
测试结论 (24)5。
3. MongoDB的优势和缺陷 (25)5。
3。
1。
MongoDB的优势 (25)5。
3。
2. MongoDB的缺陷 (25)前言数据库流行度排行榜来自于美国数据库知识网站DB-engines,在本月(2014—10)的榜单中,前三甲依然是Oracle、MySQL和Microsoft SQL Server.前十名中文档型数据库MongoDB和列式数据库Cassandra作为仅有的两个NoSQl数据库分别位列第五和第十名。
下面就对排名前三甲的关系型数据库(Oracle、MySQL、SqlServer)进行一下对比、以及最受欢迎的非关系型MongoDB.1. 数据库安装对硬件的要求1.1. Oracle以Oracle 11g为例,系统是Windows:硬件要求配置组件最低配置——-—-——--—-—---—-———--————-—-—------—---—-———-----—————-—--— Physical memory (RAM) 1 GB minimumVirtual memory Double the amount of RAMDisk space Total: 4。
SQLServerMySqlOracle语法对比及区别
SQLServerMySqlOracle语法对⽐及区别操作SQLServer Oracle Mysql查看表结构exec sp_help 表名desc 表名在command window看desc 表名或 describe 表名或show columns from 表名;修改数据库名称exec sp_renamedb ‘旧数据库名’,’新数据库名’不详修改表名exec sp_rename ‘旧表明’,’新表明’rename 旧表名 to 新表名alter table 表名 rename to 新表名修改列名exec sp_rename ‘表.旧列名’,’新列名’alter table 表名 rename column 旧列名 to 新列名alter table test change column address address1 varchar(30)--修改表列名删除数据库drop database 数据库名不详Drop database添加表中⼀列alter table 表名 Add 列名数据库类型alter table 表明 add(列名数据类型) 或alter table 表名 Add 列名数据库类型alter table test add column name varchar(10); --添加表列删除表中⼀列alter table 表名 drop column 列名alter table 表名 drop column 列名alter table test drop column name;修改表现有列alter table 表名 alter column 列名新数据库类型⼤⼩alter table 表明 modify(列名数据类型)alter table test modify address char(10) --修改表列类型||alter table test change address address char(40)删除约束alter table 表名 drop constraint约束名完全⼀样添加主键约束alter table 表名add constraint 主键约束名primary key (列名)完全⼀样alter table 表明add primary key (列名)删除主键约束alter table 表名 drop primary key添加唯⼀约束alter table 表名add constraint 唯⼀约束名unique (列名)完全⼀样alter table 表名 add unique (列名)添加默认约束alter table 表名add constraint default (值) for 列名完全⼀样添加检查约束alter table 表名add constraint check (列名 > 10)完全⼀样添加外键约束alter table ⼦表add constraint 外键约束名foreign key(⼦表的列名) references 主表 (列名)on update cascade / on updateaction注意:默认和加 on update action 表⽰更新受限加on update cascade 表⽰更新不受限,多项操作时⽤逗号隔开完全⼀样添加索引约束alter table 表名 add index 索引名 (列名)添加普通索引:create index 索引名 ON 表名 (列名)添加唯⼀索引:create unique索引名 ON 表名 (列名)删除索引drop index 索引名 on 表名alter table 表名 drop index 索引名⾝份: exec sp_grantlog域名\密码’⾝份: exec sp_addlogin ‘登陆’,’密码’SET PASSWORD FOR'username'@'host'= PASSWORD('newpassword');数据库名⾝份: Exec域名密码’,’数据库⽤户名’⾝份: Exec sp_grantdbaccess登陆帐户’,’数据库⽤户名’create user HDEAM_TYMBidentified by ""default tablespace HDEAM_TYMBtemporary tablespace TEMPprofile DEFAULT;mysql>insert intoer(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values("localhost","pppadmin",password("passwd"),'','','');CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY'123456';CREATE USER 'pig'@'%' IDENTIFIED BY '123456';CREATE USER 'pig'@'%' IDENTIFIED BY '';CREATE USER 'pig'@'%';权限 [on 表明] to 数据库grant dba to HDEAM_TYMB with admin option;-- Grant/Revoke system privilegesgrant unlimited tablespace to HDEAM_TYMBwith admin option;“abc”;grant all privileges on phplampDB.* to phplamp@localhostidentified by '1234';mysql>flush privileges;权限 [on 表名] from 数据REVOKE SELECT ON*.* FROM'pig'@'%';数据库’drop user HDEAM_SBFF cascade;mysql>Delete FROM user Where User="phplamp" andHost="localhost";mysql>flush privileges;⾝份: exec sp_droplogin⾝份: exec sp_revokelogin 登分离数据库:数据库名附加数据库:数据库名,主数据⽂件路径’,⽇志⽂件路径’exp hdeam_product/d3B68Apk29v34Dj@orclfile=E:/tymb.dmp log=E:/tymb.logimp HDEAM_LHSH/HDEAM_LHSH@orcldevfile=E:\TYMBHDEAM_BAK_2013-03-25.dmpfull=Y;mysqldump -h localhost -u root -pmysql oa >d:\oa.sqlmysql -h localhost -u root -p jira<d:\jira.sql:Select *select * from表)Exec Sp_helpExecExec数据库名exec表名exec sp_helpindex注意: 下⾯都是通过( select * from 对象 ) 来查看信息触发器 user_triggers过程 user_procedures查看源代码 user_source查看数据库对象 user_objects查看错误信息 show errors查看索引信息 user_indexes查看分区索引 user_ind_partitions查看有关基于列创建的索引 user_ind_columns查看表空间 -- user_tablespaces查看所有数据库 show databases;查看库所有表 show tables;查看表结构和属性use information_schema;select * from columns where table_name=’表名’查看表源代码show create table 表名;查看存储过程源代show create procedure 过程名查看视图源代码show create procedure 过程名查看视图资代码show create VIEW 视图名查看表的索引show index from 表名查看表的索引show keys from 表明表储蓄过/空过程,函数,视图,表的源代码:对象名::查看序列 -- user_sequences查看同义词 -- user_ind_columns查看⽤户表信息 -- user_tables查看⽤户所有的表信息 user_all_tables查看表的索引show keys from 表明sysdate NOW()varchar2(20)不⼀定要指定具体列名必须指定具体列名标识的开始值, 标识种右)create sequence 序列名1.序列名.nextval 获取下⼀个序列的值2.序列名.currval 获取当前的序列的值: *.mdf =1 :*.ndf >=0 : *.log >=1数据⽂件: *.dbf >=1⽇志⽂件: *.log >=11位置开始查找t字符串(默认从1开始)从pos位置len获取字符串的长度把字符串全部转换成把字符串全部转换成清除左边的空格清楚右边的空格从左边返回指定长度的从右边返回指定长度将s t替换成字符串我的⾳乐我’)A我的⾳乐我的世界EFG2位置开3的字符串,并在该位置索引从1开始substr(char, pos, len) 截取字符串length(char) 返回字符串的长度lower(char) 转换为⼩写upper(char) 转换为⼤写trim() 截取左右空格initcap(char) ⾸字母⼤写ltrim(char,set) 左剪裁rtrim(char,set) 右剪裁replace(char oldchar, newchar) 字符串替换concat(char1, char2) 连接字符串cha(67) 根据ASCII码返回对应的字符lpad()和rpad() 在字符串的左边或右边添加东西需要3个参数第⼀个是字符串第⼆个是返回值的总长度, 第三个是⽤来填充的字符值 as varchar) 不需指定长度to_char(d|n, fmt)将数字或⽇期转换为指定格式的值 as varchar) 不需指定长度值) 必须指to_char(d|n, fmt)将数字或⽇期转换为指定格式的字符串to_date(char,frm)将char 或varchar 转换为⽇期数据类型to_number() 将包含数字的字符转换为number数据类型取绝对值取上界最⼩整取下界最⼤整数取幂四舍五⼊,正数返回1 ,负数返-1求平⽅根获取计算机名称nvl(ex1,ex2)如果ex1为null则返回ex2;如果ex1不为null则返回ex1;nvl2(ex1,ex2,ex3)如果ex1不为null则返回ex2如果ex1为null则返回ex3nullif(ex1,ex2)如果ex1=ex2则返回null 否则返回ex1;聚合)列名) 求这列的平均值列名) 求这列的最⼩值列名) 求这列的最⼤值统计所有的⾏包括重复列名) 统计指定列中⾮空值列名) 统计不是重复右句⽤于将信息表划分,按组进⾏聚合运算avg(列名) 求这列的平均值min(列名) 求这列的最⼩值max(列名) 求这列的最⼤值count(*) 统计所有的⾏包括重复值和空值count(列名) 统计指定列中⾮空值的个数count(distinct 列名) 统计不是重复值的个数group by右句⽤于将信息表划分为组,按组进⾏聚合运算返回当前系统时间返回指+指定部分后的⽇期返回返回指a. add_months(d,n) 返回给指定的⽇期加上指定的⽉数后的⽇期值 selectadd_months(sysdate,2) from dual;b. months_between(d,d) 返回2个⽇期之间的⽉数select months_between (date '2005-05-06',date '2005-9-01') from dual;c. last_day(d) 返回指定⽇期当⽉的最后⼀天的⽇期select last_day(sysdate) from dual;d. round(d, [fmt]) 返回⽇期值⽇期四舍五⼊为格式模型指定的单位 select round(date'2005-09-08','year') from dual; 返回 2005-01-01 selectround(date'2005-09-08','month') from dual; 返回2005-09-01 select round(date'2005-09-08','day')from dual; 返回最靠近的⼀个星期⽇e. next_day(d, day) 返回指定的下⼀个星期⼏的⽇期 select next_day(sysdate,'星期⼆') fromdualf.trunc 语法与round 相同区别:trunc 是只舍不⼊g.extract 提取⽇期时间类型中的特定部分|| 连接字符串⽤于将2个或多个字符串合并成⼀个字符串两个)重复的⾏select orderno from order_master union select orderno from order_detail;b.union all 合并2个查询选定的所有⾏包括重复的⾏c.intersect 返回2个查询都有的⾏d.minus 第1个查询在第2个查询中不存在的数据)个,⾄n-个条)::对1 :)左别名.列名,右别名.列from 左表 as 左别名 inner右表 as 右别名on 左别名.列= 右别名.列名左表名.列名,右表名.列from 左表 ,右表 where 左表.列名 = 右表名.列名左外连接:(返回左表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由左表决定)左别名.列名,右别名.列名左表 as 左别名 left join 右as 右别名on 左别名.列名 = 右.列名右外连接:(返回右表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由右表决定)左别名.列名,右别名.列名左表 as 左别名 right join右表 as 右别名on 左别名.列名 =完全⼀样连接分类:1内连接:条件2外连接1)左外连接: left join 或 left outer join2)右外连接:right join 或 right outer join3)完整外连接: Full join 或 Full outer join3交叉连接: from …4. 交叉连接:(返回左右表的所有⾏,如果左表没有与右表匹配的⾏则全部⽤null代替,如果右表没有与左表匹配的⾏则全部⽤null代替,存在则显⽰具体数据,显⽰出来的总⾏数=左表和右表⾏数和决定)Select 左别名.列名,右别名.列名 from 左表 as左别名 right join 右表 as 右别名on 左别名.列名= 右别名.列名完全拷贝: insert into ⽬标表源表部分拷贝: insert into ⽬标表 (列) select 列名 from 源表表不存完全拷贝: select * into 新表源表部分拷贝: select 列名 into 新from 源表拷贝表结构: select * into 新表源表 Where 1=2emp;b.拷贝⼀部分create table temp as select 列1,列2 from 表c.只拷贝⼀个空表(根据⼀个假条件)create table temp as select * from 表 where 1=2d.使⽤列别名: select stu_id, stu_name as "学⽣姓名" from student;A表,B1:⽬标表 set 列 = a.列 froma where a.关联列 = ⽬标表.2:列 = a.列 from 源a , ⽬标表b where a.关联列 =关联列3:⽬标表 set 列 = a.列 froma , ⽬标表b where a.关联列关联列4:⽬标表 set ⽬标表.列 = a.from 源表 a , ⽬标表 b where关联列 = b.关联列5:⽬标表 set⽬标表.列 = a.from 源表 a where a.关联列 =update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列from 源表 a where a.关联列 = .关联列6:update语创建⼀个新表修改表中的列表名 alter column 列新数据库类型⼤⼩添加表中的列表名 Add 列名数据库删除表中的列表名 drop column 列删除表中的记录⽽不删除表的truncate table student只是查看表的结构删除表中的数据及表的结构a.创建⼀个新表create table student(stu_id int, stu_name varchar2(20)) tablespace lijiaob.修改表中的列alter table student modify(stu_name varchar2(40))c.添加表中的列alter table student add(stu_age int)d.删除表中的列alter table student drop column stu_agee.删除表中的记录⽽不删除表的结构truncate table studentf.只是查看表的结构desc studentg.删除表中的数据及表的结构drop table student;:.必须)a. commit 命令(⽤于提交并结束事务处理)commitb.savepoint 保存点类似于标记它将很长的事务处理划分为较⼩的部分他们⽤来标记事务中可以应⽤回滚的点save point savepoint_idc.rollbace work ,rollbackd.回滚到某个保存点rollback to savepoint伪列,但a.rowid(可以唯⼀的标识数据库中的⼀⾏)b.rownum (代表⾏的序号)rownum 不跟> , = , >= 操作使⽤储在,)变量名 = 值变量名 = 列名 from 表明列名 =⽤户)最后⼀个T-SQL错误号最后⼀次插⼊的标识本地服务器的名值’ 只出现在查询分析器中值’,16,1) 能在前台⽤条件) begin … end条件) begin …end else begin表名 where= 值)表名列名 = 值) begin …. enda) if condition then exp_bodyend if;b) if condition then exp_bodyelse exp_body end if;c) if condition then exp_bodyelsif condition then exp_bodyelse exp_body end if;1) loop condition end loop2) while condition Loop exp_body end loop3)for varable in [REVERSE] value1...value2 (varable 变量不需声明 , ... 是范围连接符 )loop exp_body end loop别名=case条件 then 值条件 then 值值表列名值 then 值值 then 值值表a) select case 列名when 值 then 值when 值 then 值else 值end case from 表明b) select casewhen 列名=值 then 值when 列名=值 then 值else 值end case from 表:1.列类型: %TYPEvarable tableName.columnName%TYPE;varable tableName.columnName%TYPE;2.⾏类型: %ROWTYPEvarable tableName%ROWTYPE;3.使⽤⾏类型:varable.列名;异常信息’,16,1) 能在 1)⾃定义异常:a)定义异常:(位 declare和 begin之间)DECLARE varable EXCEPTION;b)显⽰引发异常(为 begin 和 end 之间):RAISE varable;2)处理预定义异常:(位 begin 和 end 之间)EXCEPTIONwhen Too_Many_ROWS thenDBMS_OUTPUT.PUT_LINE('返回多⾏');when others thenDBMS_OUTPUT.PUT_LINE('全部处理');3) 引发应⽤程序错误:RAISE_APPLICATION_ERROR(error_number,error_message);原理: ):(重复⼦查询,不能单)(只执⾏⼀次,能单独执, 查询原理: 从外(外sql⼀次查出sql)到⾥把外不查出来的值传):查询到结果可以作为表来使⼀样切套⼦查询:Select * from AuthorBook a where CopyRight =(select Max(CopyRight) from AuthorBookwhere BookName = a.BopokName)(效率低)>连接查询(效), ⽽连. 右查询有连接查完全⼀样返回多⾏⼀列完全⼀样完全⼀样:只能出现在Group by分组,不能单独使⽤group by 就没有Having完全⼀样完全⼀样相对于mssql oracle显著的书写特点:1.代码⽚段必须放到begin end .. 中2.虚拟表 dual 的使⽤3.每⾏代码强制分号";"结束,包括end4.赋值符号 :=;(select xx into xx from daul;也可以⽤于赋值)5.省略了 as...补充:⼏种关系数据库中字符编码和存储长度需要注意的⼏个问题1.mysql中char(n) varchar(n) 中再utf8编码存储⽅式下数字表⽰的是字符数,但是在其他⽅式下就根据情况定,需要再相应环境下探索⼀下。
MySQL与Oracle数据类型对应关系(表格形式)
MySQL与Oracle数据类型对应关系(表格形式)
MySQL与Oracle两种数据库在工作中,都是用的比较多的数据库,由于MySQL与Oracle 在数据类型上有部分差异,在我们迁移数据库时,会遇上一定的麻烦,下面介绍MySQL与Oracle数据库数据类型的对应关系
MySQL与Oracle两种数据库在工作中,都是用的比较多的数据库,由于MySQL与Oracle 在数据类型上有部分差异,在我们迁移数据库时,会遇上一定的麻烦,下面介绍MySQL与Oracle数据库数据类型的对应关系。
一、常见数据类型在MySQL与Oracle 数据库中的表现形式
二、MySQL与Oracle数据库常见数据类型对应关系
MySQL与Oracle 差异比较之基本语法
以上就是MySQL与Oracle数据类型对应关系的全部内容了。
c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
c#⼏种数据库的⼤数据批量插⼊(SqlServer、Oracle、SQLite和MySql)这篇⽂章主要介绍了c#⼏种数据库的⼤数据批量插⼊(SqlServer、Oracle、SQLite和MySql),需要的朋友可以了解⼀下。
在之前只知道SqlServer⽀持数据批量插⼊,殊不知道Oracle、SQLite和MySql也是⽀持的,不过Oracle需要使⽤Orace.DataAccess驱动,今天就贴出⼏种数据库的批量插⼊解决⽅法。
⾸先说⼀下,IProvider⾥有⼀个⽤于实现批量插⼊的插件服务接⼝IBatcherProvider,此接⼝在前⼀篇⽂章中已经提到过了。
///<summary>///提供数据批量处理的⽅法。
///</summary>public interface IBatcherProvider : IProviderService{///<summary>///将<see cref="DataTable"/>的数据批量插⼊到数据库中。
///</summary>///<param name="dataTable">要批量插⼊的<see cref="DataTable"/>。
</param>///<param name="batchSize">每批次写⼊的数据量。
</param>void Insert(DataTable dataTable, int batchSize = 10000);}⼀、SqlServer数据批量插⼊SqlServer的批量插⼊很简单,使⽤SqlBulkCopy就可以,以下是该类的实现:///<summary>///为 System.Data.SqlClient 提供的⽤于批量操作的⽅法。
mysqloraclesqlserver三大数据库的数据类型列表
MySql Oracle SqIServer三大数据库的数据类型列表MySql数据类型Oracle数据类型、概述在ORACLE8中定义了:标量(SCALAR、复合(COMPOSITE、引用(REFERENCE和LOB四种数据类型,下面详细介绍它们的特性。
二、标量(SCALAR合法的标量类型与数据库的列所使用的类型相同,此外它还有一些扩展。
它又分为七个组:数字、字符、行、日期、行标识、布尔和可信。
数字,它有三种基本类型--NUMBER、PLS_INTEGEF和BINARY_INTENER NUMBER可以描述整数或实数,而PLS_INTEGEf和BINARY_INTENER^能描述整数。
NUMBER,是以十进制格式进行存储的,它便于存储,但是在计算上,系统会自动的将它转换成为二进制进行运算的。
它的定义方式是NUMBER( P, S),P是精度,最大38位,S是刻度范围,可在-84...127间取值。
例如:NUMBER( 5, 2)可以用来存储表示-999.99...999.99间的数值。
P、S可以在定义是省略,例如:NUMBER( 5)、NUMBER 等;BINARY_INTENER|来描述不存储在数据库中,但是需要用来计算的带符号的整数值。
它以2的补码二进制形式表述。
循环计数器经常使用这种类型。
PLS_INTEGEf和口BINARY_INTENER隹一区别是在计算当中发生溢出时,BINARY_INTENERS的变量会被自动指派给一个NUMBER型而不会出错,PLS_INTEGE型的变量将会发生错误。
字符,包括CHAR VARCHAR2 (VARCHAR、LONG NCHAR和NVARCHAR2几种类型。
CHAR描述定长的字符串,如果实际值不够定义的长度,系统将以空格填充。
它的声明方式如下CHAR( L) , L 为字符串长度,缺省为1,作为变量最大32767个字符,作为数据存储在ORACLE8中最大为2000。
MySQL+SQLSERVER+ORACLE获取数据库表名及字段名总结
MySQL,SQLSERVER,ORACLE获取数据库表名及字段名等总结2009年10月21日星期三 17:373、ORACLE获取表名:USER_TAB_COLS中记录了用户表的列信息。
下面是别人写的:SELECT USER_TAB_COLS.TABLE_NAME as 表名,USER_TAB_COLS.COLUMN_NAME as 列名,USER_TAB_COLS.DATA_TYPE as 数据类型,USER_TAB_COLS.DATA_LENGTH as 长度,USER_TAB_COLS.NULLABLE as 是否为空,USER_TAB_COLS.COLUMN_ID as 列序号,user_col_ments as 备注FROM USER_TAB_COLSinner join user_col_comments on user_col_comments.TABLE_NAME =USER_TAB_COLS.TABLE_NAMEand user_col_comments.COLUMN_NAME = USER_TAB_COLS.COLUMN_NAMEandUSER_TAB_COLS.TABLE_NAME='T_COMPANY_DETAIL'--------------(2).selectA.column_name 字段名,A.data_type 数据类型,A.data_length 长度,A.data_precision 整数位,A.Data_Scale 小数位,A.nullable 允许空值,A.Data_default 缺省值,ments 备注fromuser_tab_columns A,user_col_comments BwhereA.Table_Name =B.Table_Nameand A.Column_Name = B.Column_Nameand A.Table_Name = 'T_COMPANY_DETAIL'1、MySQL获取表名:用“show tables”命令。
使用SQL语句查询MySQL,SQLServer,Oracle所有数据库名和表名,字段名
使⽤SQL语句查询MySQL,SQLServer,Oracle所有数据库名和表名,字段名MySQL中查询所有数据库名和表名查询所有数据库show databases;查询指定数据库中所有表名select table_name from information_schema.tables where table_schema='database_name' and table_type='base table';查询指定表中的所有字段名select column_name from information_schema.columns where table_schema='database_name' and table_name='table_name';查询指定表中的所有字段名和字段类型select column_name,data_type from information_schema.columns where table_schema='database_name' and table_name='table_name';SQLServer中查询所有数据库名和表名查询所有数据库select * from sysdatabases;查询当前数据库中所有表名select * from sysobjects where xtype='U';xtype='U':表⽰所有⽤户表,xtype='S':表⽰所有系统表。
查询指定表中的所有字段名select name from syscolumns where id=Object_Id('table_name');查询指定表中的所有字段名和字段类型select , from syscolumns sc,systypes st where sc.xtype=st.xtype and sc.id in(select id from sysobjects where xtype='U' and name='table_name');Oracle中查询所有数据库名和表名查询所有数据库由于Oralce没有库名,只有表空间,所以Oracle没有提供数据库名称查询⽀持,只提供了表空间名称查询。
数据库迁移及区别比较(Oracle,Sql Server,MySql)
数据库迁移及及区别(Oracle,MySQL,SQLServer)/brightmart徐亮,2011-4-1导言:最近的数据超市项目需要从SQLServer迁移到MySql。
在之前并没有很多数据库迁移方面的经验,所以也不知道迁移需要花费多久,都要做什么工作。
通过几天的工作,项目已经顺利迁移到MySql上。
该文档总结了迁移的经验,同时也方便以后数据库迁移。
1、数据库迁移需要做的工作1.1 建表脚本修改1.2 数据导入(编码、数据类型设置)1.3 项目中的SQL修改1.4 数据库连接(驱动)1.5 连接项目中的程序,测试并修改程序2、常用数据库中在开发方面的不同2.1 数据类型2.2 自增2.3 分页2.4 内置函数2.5 模糊查询3、ORM工具与迁移使用hibernate、ibatis,在数据库迁移中的不同效率4、各数据库的不同数据类型比较及参考资料4.1、MySQL中的建表SQL4.2、Java到SQL数据类型影射表4.3、MySql与Oracle数据类型的相互转化4.4、ORACLE与SQLSERVER、MYSQL的数据类型对照表1、数据库迁移需要做的工作1、1 数据库建表脚本的修改1.1.1 由于各种数据库的数据类型并不相同,需要更改部分数据类型。
1.1.2 在MySQL脚本里暂不能给日期数据设置当前时间,字段如:registertime(注册时间);需在程序中设置当前日期,再保存进数据库或将registertime设置为时间戳(timestamp)1.1.3 在MySQL里的表和字段的注释,见【5】中的建表语句。
1、2 将数据导入到目标数据库的中(其中可以需要修改数据类型)1.2.1设置数据库的编码,防止中文乱码1)、最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,如:default-character-set = utf8(character_set_server = utf8)修改完后,重启mysql的服务,service mysql restart2)、还有一种修改字符集的方法,就是使用mysql的命令,如:mysql> SET character_set_client = utf8 ;mysql> SET character_set_connection = utf8 ;mysql> SET character_set_database = utf8 ;mysql> SET character_set_results = utf8 ;mysql> SET character_set_server = utf8 ;mysql> SET collation_connection = utf8 ;mysql> SET collation_database = utf8 ; mysql> SET collation_server = utf8 ;如果:没有设置前两条,可以通过以下方式实现编码:a 建数据库时设置数据库支持的编码:create database datmart charset=utf8;b 使用数据库datmart use datmart;c 插入中文数据时,需要先设置:set names utf8;d 将数据导入sourced:\datmart.sql(每个见表语句后加:ENGINE=MyISAM DEFAULT CHARSET=utf8;)1.2.2 数据类型即使MySQL中有bit,但SQLServer中的bit类型(取0或1,分别对应了bool的true和false)的变量在MySQL中,不能顺利导入。
各数据库的数据类型的区别
Oracle、MySQL、SQL Server数据库的数据类型的差异1.Oracle数据库的各种数据类型CHAR 定长的字符型数据,长度<=2000字节VARCHAR2 变长的字符型数据,长度<=4000字节N CHAR 用来存储Unicode字符集的定长字符型数据,长度<=1000字节注意:N字打头的是存储Unicode字符集NVARCHAR2 Unicode字符集的变长字符型数据,长度<=1000字节NUMBER 整型或者浮点型数值DATE 日期数据LONG 2GB的变长字符数据RAW 用来存储非结构化数据的变长字符数据,长度<=2000字节LONG RAW 用来存储非结构化数据的变长字符数据,长度<=2GBROWID 用来存储表中列的物理地址的二进制数据,占用固定的10个字节BLOB 4GB的非结构化的二进制数据CLOB 4GB的字符数据NCLOB 4GB的Unicode字符数据BFILE 把非结构化的二进制数据存储在数据库以外的操作系统文件中UROWID 表示任何类型列地址的二进制数据FLOAT 浮点数2.MySQL数据库的各种数据类型CHAR (M) CHAR数据类型用于表示M长度的字符串。
VARCHAR (M) VARCHAR可以保存可变长度的字符串, VARCHAR数据类型所支持的最大长度也是255个字符。
INT (M) [Unsigned] INT数据类型用于保存从- 2147483647 到2147483648范围之内的任意整数数据。
如果用户使用Unsigned选项,则有效数据范围调整为0-4294967295。
FLOAT [(M,D)] FLOAT数据类型用于表示数值较小的浮点数据,可以提供更加准确的数据精度。
其中,M代表浮点数据的长度(即小数点左右数据长度的总和),D表示浮点数据位于小数点右边的数值位数。
DATE DATE数据类型用于保存日期数据,默认格式为YYYY-MM-DD。
sqlserver数据类型汇总
Sql server数据类型汇总2.1数据类型2.2.1整形整形按其存储区间又分为int、tinyint、smallint、bigint四种类型,其中int是最常用的类型。
1intint类型存储从-2^31~2^31-1之间的所有正负整数。
每个int类型占4个字节空间。
2tinyinttinyint存储从0~255之间所有正整数。
每个tinyint类型占1个字节空间3smallintsmallint存储从-2^15~2^15-1之间的所有正负整数。
每个smallInt类型占2个字节的空间。
4bigintbigint存储从-2^63~2^63-1之间的所有正负整数。
每个bigint类型占8个字节的空间。
2.2.2浮点型1real可以精确到小数点后7位小数,每个real类型占4个字节。
2float可以精确到小数点后15位小数,每个float类型占8个字节。
3decimaldecimal可以指定小数点后的位数,具体声明方法为decimal(w,d),其中i代表变量全部的位数,d代表小数的位数。
如这样声明一个变量v(15,5),就代表这个变量整体长度15位,小数点后有5位,很明显,整数部分应该是10位。
4numeric这个类型和decimal一模一样。
2.2.3字符型字符型变量是用来存储字母、数字符号、特殊符号等,在T-SQL中,字符型数据要用一对英文单引号(‘’)引起,如’sql server 2005’。
字符型数据声明的时候就需要给它指定长度,如char(5),char是类型,5是数据长度。
1charChar类型存储的均为ANSI字符,其中每个字符占一个字节,n的最大长度为8000。
Char 定义的数据固定长度,若实际数据长度不够定义长度,会在数据后面自动补齐空格。
若超出定义长度,则截断超出的部分。
如定义一个char型变量PhoneNumber(11),若有个电话号码是123456六位,那么PhoneNumber=’123456’,依然是11位。
SQLServer数据类型一览表
SQLServer数据类型一览表SQL Server数据类型一览表Binary [(n)]·Varbinary [(n)]·Char [(n)]·Varchar[(n)]·Nchar[(n)] 存储unicode编码的固定长度字符·Nvarchar[(n)]·Datetime·Smalldatetime·Decimal[(p[,s])]·Numeric[(p[,s])]·Float[(n)]·Real·Int·Smallint·Tinyint·Money·Smallmoney·Bit·Cursor·Sysname·Timestamp·Uniqueidentifier·Text·Image·Ntext1、二进制数据类型二进制数据由十六进制数表示,可以使用binary、varbinary和image 数据类型存储。
·binary 固定长度(最多为8K)的二进制数据类型。
binary [ ( n ) ]固定长度的n 个字节二进制数据。
N 必须从 1 到8,000。
存储空间大小为n+4 字节。
·varbinary可变长度(最多为8K)的二进制数据类型。
varbinary [ ( n ) ]n 个字节变长二进制数据。
n 必须从1 到8,000。
存储空间大小为实际输入数据长度+4个字节,而不是n 个字节。
输入的数据长度可能为0 字节。
在SQL-92 中varbinary的同义词为binary varying。
·image 用来存储长度超过8 KB 的可变长度的二进制数据。
除非数据长度超过8KB,否则一般宜用varbinary类型来存储二进制数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySql Oracle SqlServer三大数据库的数据类型列表汇编(doc 7页)MySql Oracle SqlServer三大数据库的数据类型列表MySql数据类型数据类型描述字节推荐使用SMALLINT整数,从-32000到+32000范围2 INT整数,从-2000000000到+2000000000 范围4BIGINT不能用SMALLINT 或INT描述的超大整数。
8FLOAT 单精度浮点型数据4 DOUBLE双精度浮点型数据8DECIMAL用户自定义精度的浮点型数据变量;取决于精度与长度以特别高的精度存储小数数据。
例如:货币数额,科学数据CHAR 固定长度的字符串特定字符串长度(高达255字符) 存储通常包含预定义字符串的变量例如: 定期航线,国家或邮编VARCHAR 具有最大限制的可变长度的字符串变量; 1 +实际字符串长度(高达255 字符)存储不同长度的字符串值(高达一个特定的最大限度) . 例如:名字,密码,短文标签TEXT 没有最大长度限制的可变长度的字符串Variable; 2 +聽存储actual string length 大型文本数据例如: 新闻故事,产品描述BLOB 二进制字符串变量;2 +实际字符串长度存储二进制数据例如:图片,附件,二进制文档DATE 以yyyy-mm-dd格式的日期3 存储日期例如:生日,产品满期TIME 以hh:mm:ss格式的时间3 存储时间或时间间隔例如:报警声,两时间之间的间隔,任开始/结束时间DATETIME yyyy-mm-ddhh:mm:ss格式结合日期和时间8 存储包含日期和时间的数据例如:提醒人,事件TIMESTAM P yyyy-mm-ddhh:mm:ss格式结合日期和时间4 记录即时时间例如:事件提醒器,“最后进入”的时标记YEAR 以yyyy格式的年份 1 存储年份例如:毕业年,出生年ENUM 一组数据,用户可从中选择其中一个1或2个字节存储字符属性,只能中选择之一例如:布尔量选择,如性别SET 一组数据,用户可从中选择其中0,1或更多。
从1到8字节;取决于设置的大小存储字符属性,可中选择多个字符的联合。
例如:多选项选择,比如业余爱和兴趣。
Oracle数据类型一、概述在ORACLE8中定义了:标量(SCALAR)、复合(COMPOSITE)、引用(REFERENCE)和LOB四种数据类型,下面详细介绍它们的特性。
二、标量(SCALAR)合法的标量类型与数据库的列所使用的类型相同,此外它还有一些扩展。
它又分为七个组:数字、字符、行、日期、行标识、布尔和可信。
数字,它有三种基本类型--NUMBER、PLS_INTEGER和BINARY_INTENER。
NUMBER可以描述整数或实数,而PLS_INTEGER和BINARY_INTENER只能描述整数。
NUMBER,是以十进制格式进行存储的,它便于存储,但是在计算上,系统会自动的将它转换成为二进制进行运算的。
它的定义方式是NUMBER(P,S),P是精度,最大38位,S是刻度范围,可在-84...127间取值。
例如:NUMBER(5,2)可以用来存储表示-999.99...999.99间的数值。
P、S可以在定义是省略,例如:NUMBER(5)、NUMBER等;BINARY_INTENER用来描述不存储在数据库中,但是需要用来计算的带符号的整数值。
它以2的补码二进制形式表述。
循环计数器经常使用这种类型。
PLS_INTEGER和BINARY_INTENER唯一区别是在计算当中发生溢出时,BINARY_INTENER型的变量会被自动指派给一个NUMBER型而不会出错,PLS_INTEGER型的变量将会发生错误。
字符,包括CHAR、VARCHAR2(VARCHAR)、LONG、NCHAR 和NVARCHAR2几种类型。
CHAR,描述定长的字符串,如果实际值不够定义的长度,系统将以空格填充。
它的声明方式如下CHAR(L),L为字符串长度,缺省为1,作为变量最大32767个字符,作为数据存储在ORACLE8中最大为2000。
VARCHAR2(VARCHAR),描述变长字符串。
它的声明方式如下VARCHAR2(L),L为字符串长度,没有缺省值,作为变量最大32767个字节,作为数据存储在ORACLE8中最大为4000。
在多字节语言环境中,实际存储的字符个数可能小于L值,例如:当语言环境为中文(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)时,一个VARCHAR2(200)的数据列可以保存200个英文字符或者100个汉字字符。
LONG,在数据库存储中可以用来保存高达2G的数据,作为变量,可以表示一个最大长度为32760字节的可变字符串。
NCHAR、NVARCHAR2,国家字符集,与环境变量NLS指定的语言集密切相关,使用方法和CHAR、VARCHAR2相同。
行,包括RAW和LONG RAW两种类型。
用来存储二进制数据,不会在字符集间转换。
RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。
LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节。
日期,只有一种类型--DATE,用来存储时间信息,站用7个字节(从世纪到秒),绝对没有“千年虫”问题。
行标识,只有一种类型--ROWID,用来存储“行标识符”,可以利用ROWIDTOCHAR函数来将行标识转换成为字符。
布尔,只有一种类型--BOOLEAN,仅仅可以表示TRUE、FALSE或者NULL。
可信,只有一种类型--MLSLABEL,可以在TRUSTED ORACLE 中用来保存可变长度的二进制标签。
在标准ORACLE中,只能存储NULL值。
三、复合(COMPOSITE)标量类型是经过预定义的,利用这些类型可以衍生出一些复合类型。
主要有记录、表。
记录,可以看作是一组标量的组合结构,它的声明方式如下:TYPE record_type_name IS RECORD( filed1 type1 [NOT NULL] [:=expr1].......filedn typen [NOT NULL] [:=exprn] )其中,record_type_name是记录类型的名字。
(是不是看着象CREATE TABLE?......)引用时必须定义相关的变量,记录只是TYPE,不是VARIABLE。
表,不是物理存储数据的表,在这里是一种变量类型,也称为PL/SQL表,它类似于C语言中的数组,在处理方式上也相似。
它的声明方式如下:TYPE table_type_name IS TABLE OF scalar_type INDEX BY BINARY_INTENER;其中,table_type_name是类型的名字,scalar_type 是一种标量类型的类型声明。
引用时也必须定义相关的变量。
表和数组不同,表有两列,KEY和VALUE,KEY就是定义时声明的BINARY_INTENER,VALUE就是定义时声明的scalar_type。
除了记录和表之外,还有对象类型、集合(嵌套表和VARRAYS)等类型,这些将专门讲解。
四、引用(REFERENCE)在PL/SQL8.0之前,只有一种类型--REF CURSOR,也就是游标。
它的定义较为简单,CURSOR cursor_name IS select .....from.....;在PL/SQL8.0之后,引入了REF类型,它指向一个对象。
这种类型将单独讲解。
(等我弄明白再说,免得在高人面前......)五、LOB型LOB变量主要是用来存储大量数据的数据库字段,最大可以存储4G字节的内容(这么大,存VCD?,浪费!)。
主要有:CLOB:和ORACLE7中的LONG类型相似,存储单字节字符数据。
(别用来存中文喔。
)NCLOB:用来存储定宽多字节字符数据。
(例如:存《啸傲江湖》就挺好)BLOB:和LONG RAW相似,用来存储无结构的二进制数据。
BFILE:它用来允许ORACLE对数据库外存储的大型二进制文本进行只读形式的访问。
六、其他其实在完成对标量变量的理解之后,基本上可以应付C/S模式下的常规数据库应用所需了,后续的类型说实话,我玩了5年ORACLE,都很少用到。
附:参考书《ORACLE8 PL/SQL程序设计》(《ORACLE8 PL/SQL PROGRAMMING》) ORACLE技术系列丛书机械工业出版社注:本文所列举的是PL/SQL当中可以定义的数据类型,并不是所有的类型都可以在建表时指定为列的数据类型SqlServer数据类型数据类型说明bigint 整数数据,从–2^63 (–9,223,372,036,854,775,808) 到2^63–1 (9,223,372,036,854,775,807)。
存储大小为8 字节。
integer整数数据,从–2^31 (-2,147,483,648) 到2^31–1 (2,147,483,647)。
存储大小为4 字节。
smallint 整数数据,从–32,768 到32,767。
存储大小为2 字节。
tinyint 整数数据,从0 到255。
存储大小为1 字节。
bit整数数据,值为1 或0。
存储大小为1 位。
numeric (p, s) 固定精度和小数的数字数据,取值范围从–10^38+1 到10^38–1。
p 变量指定精度,取值范围从1 到38。
s变量指定小数位数,取值范围从0 到p。
存储大小为19 字节。
money 货币数据值,从(–2^63/10000) (–922,337,203,685,477.5808) 到2^63–1 (922,337,203,685,477.5807),准确度为货币单位的万分之一。
存储大小为8 字节。
float浮点数数据,从–1.79E +308 到1.79E+308存储大小为8 字节。
real浮点精度数字数据,从–3.40E+38 到3.40E+38。
存储大小为4 字节。
datetime 日期和时间数据,从1753 年1 月1 日到9999 年12 月31 日,准确度为三百分之一秒或3.33 毫秒。
值被圆整到 .000、.003 或 .007 毫秒增量。
存储为两个4 字节整数。
前4 个字节存储早于或晚于基日期1900 年1 月1 日的天数。
基日期是系统的参照日期。
不允许datetime 的值早于1753 年1 月1 日。
后4 个字节存储一天之中的具体时间,被表示为从午夜算起的毫秒数。
秒数的有效范围是0–59。
national character(n) Synonym:nchar(n) 固定长度的Unicode 数据,最大长度为4000 个字符。