mysql、sql server、oracle大比较
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql、sql server、oracle大比较,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6601字,纯文字阅读大概需要10分钟。
内容图文
MYSQL
- 多个数据库多个用户形式(最好每个数据库对应一个用户),占用内存小,适用于所有平台,开源免费
- 客户端和命令窗口,都是由数据库决定内容-> use datebase;
- 组函数在select语句中可以随意使用
- 支持自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值
- 可以用双引号包起字符串
- 分页语句比较简单,用LIMIT开始位置,记录个数
- 日期字段分DATE和TIME两种, 找到离当前时间7天用DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)
- 插入当前时间的几个函数是:NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以'YYYY-MM-DD'的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以'HH:MM:SS'的格式返回当前的时间,可以直接存到TIME字段中
- 非空字段允许有空的内容
- 模糊比较like%'字符串%'
- 不支持事务操作、子查询 、外键、存储过程和视图等功能
1、生成uuid
SELECT UUID(); //c2cb8f66-351f-11e7-b3ed-00163e0429b6 SELECT REPLACE(UUID(), '-', ''); //将'-'替换掉
在 MySQL 的 UUID() 函数中,前三组数字从时间戳中生成,第四组数字暂时保持时间戳的唯一性, 第五组数字是一个 IEEE 802 节点标点值,保证空间唯一。
使用 UUID() 函数,可以生成时间、空间上都独一无二的值。
据说只要是使用了 UUID,都不可能看到两个重复的 UUID 值。
2、插入时间
NOW() 以 'YYYY-MM-DD HH:MM:SS' 返回当前的日期时间,可以直接存到DATETIME字段中
CURDATE() 以 'YYYY-MM-DD' 格式返回日期,可以直接存到DATE字段中
CURTIME() 以 'HH:MM:SS' 格式返回当前的时间,可以直接存到TIME字段中
insert into table(time) values(NOW());
3、设置默认时间
//添加UpdateTime 设置 默认时间 CURRENT_TIMESTAMP 设置更新时间为 ON UPDATE CURRENT_TIMESTAM ALTER TABLE `table_name` ADD COLUMN `UpdateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间' ;
4、insert into select
语句1:Insert into Table2(field1,field2,…) select value1,value2,… from Table1 where condition;
语句2:Insert into Table2 select * from Table1;
- 目标表Table2必须存在,MySQL不会自动创建;
- 语句1一般用于两个表结构一致的情况,而语句2用于表结构不一致的情况;
- 语句1中涉及的field1,field2也必须存在;
- 若Table2有主键且不具备自动增长,则 field1, field2…中必须包括主键。
如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现。具体情形是:有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。
对于这种情况,我们可以使用如下的语句来实现:
INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name
对于多个表,我们可以先将需要查询的字段join起来,然后组成一个视图后再select from就可以了:
INSERT INTO a(field1,field2) SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb
其中f1是表b的字段,f2是表c的字段,通过join查询就将分别来自表b和表c的字段进行了组合,然后再通过select嵌套查询插入到表a中,这样就满足了我们这个场景了,如果需要不止2个表,那么可以多个join的形式来组合字段。需要注意的是嵌套查询部分最后一定要有设置表别名,如下:
SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb
即最后的as tb是必须的(当然tb这个名称可以随意取),即指定一个别名,否则在mysql中会报如下错误:
ERROR 1248 (42000): Every derived TABLE must have its own alias //即每个派生出来的新表都必须指定别名才可以的。
SQL SERVER
只能在windows上运行
1、主键自增
create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMARY KEY , [字段1] nVarChar(50) default \'默认值\' null , [字段2] ntext null , [字段3] datetime, [字段4] money null , [字段5] int default 0, [字段6] Decimal (12,4) default 0, [字段7] image null )
2、插入时间
getdate():获取系统当前时间,返回值为datetime类型
dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,number要增加的值,整型,正值返回date之后的时间值,负值返回date之前的时间值
datediff(datepart,startdate,enddate):返回两个时间以指定时间部分来计算的差值。返回整数值
dataname(datepart,date):获取时间不同部分的值,返回值为字符串
datepart(datepart,date):和datename相似,只是返回值为整型,datepart是要返回的时间的部分,常用取值year、month、day、hour、minute。
day(date):获取指定时间的天数
month(date):获取指定时间的月份
year(date):获取指定时间的年份
select getdate() as dte,dateadd(day,-1,getdate()) as nowdat
SELECT DATEPART(month, GETDATE()) AS 'Month Number'
select dateadd(day,-1,getdate())
select datediff(month,'1991-6-12','1992-6-21') as a
3、设置默认时间
CREATE TABLE test(
id NVARCHAR(50), name nvarchar(50), CREATETIME DATETIME DEFAULT(GETDATE()), PRIMARY KEY(id) )
4、系统其他转换函数
isnull(逻辑表达式,代替值):判断逻辑表达式是否为null,是的话就用指定的值代替。
convert()和cast:
CAST 函数和 CONVERT 函数还可用于获取各种特殊数据格式,并可用于选择列表、WHERE
子句以及允许使用表达式的任何位置中。如果希望 Transact-SQL 程序代码符合 SQL-92,
请使用 CAST 而不要使用 CONVERT。如果要利用 CONVERT 中的功能,请使用 CONVERT
而不要使用 CAST。
使用 CAST 或 CONVERT 时,需要提供以下信息:
要转换的表达式;例如,销售报表要求销售数据从货币数据转换为字符数据。
要将指定的表达式转换为的数据类型,例如 varchar 或其他 SQL Server 系统数据类型。
除非将被转换的值存储起来,否则转换仅在 CAST 函数或 CONVERT 函数的作用时间范围内有效。
如果转换时没有指定数据类型的长度,则 SQL Server 自动将 30 作为长度值。
5、INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 或者:Insert into Table2 select * from Table1
注意:(1)要求目标表Table2必须存在,并且字段field,field2...也必须存在
(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2...中必须包括主键
(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:
SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。
ORACLE
- 一个数据库中多个用户的形式,占用内存大,价格高,能在所有主流平台上运行(包括 windows)
- 客户端和命令窗口,都是由用户决定内容-> conn user_name/password
- 支持大并发,大访问量,是OLTP(On-Line Transaction Processing联机事务处理系统)最好工具
- 如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错
- select name,count(money) from user; 不符合要求
- 不支持自增,需要建立一个自动增长的序列号
- 只可以用单引号包起字符串
- 分页时,每个结果集只有一个ROWNUM字段标明它的位置,只能用ROWNUM<**,不能用ROWNUM>**
- INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用Oracle里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。
- 日期字段只有DATE, 找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7;
- 当前时间是sysdate
- 非空字段不容许有空的内容
- 字段名like%'字符串%'但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,'字符串')>0会得到更精确的查找结果
- 实现了ANSIISQL中大部分功能,如,事务的隔离级别、传播特性等
1、生成uuid
返回类型为RAW、
没有- (dash)分隔符、返回的字母大写,可以使用 lower(sys_guid()) 转为小写
select sys_guid() from dual;
内容总结
以上是互联网集市为您收集整理的mysql、sql server、oracle大比较全部内容,希望文章能够帮你解决mysql、sql server、oracle大比较所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。