oracle 和mysql使用上的区别

本文对比了Oracle和个人版MySQL的功能及命令使用,包括安装路径、常用命令、日期函数、字符串操作等,介绍了两种数据库系统的相似之处及区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


比版本Personal Oracle7 Release 7.3.4.0.0mysql 3.22.34-shareware-debug
   
默认安装目录C:\ORAWIN95C:\MYSQL
各种实用程序所在目录C:\ORAWIN95\BINC:\MYSQL\BIN
控制台工具SVRMGR.EXE
SVRMGR23.EXE
mysqladmin.exe
数据库启动程序0start73.exe screenmysqld-shareware.exe
关闭数据库命令ostop73.exemysqladmin.exe -u root shutdown
客户程序SQL*Plusmysql
启动命令c:\orawin95\bin\sqlplus.exec:\mysql\bin\mysql.exe
带用户启动方式
(直接连库方式)
c:\orawin95\bin\sqlplus.exe system/manager@TNSc:\mysql\bin\mysql.exe test
c:\mysql\bin\mysql.exe -u root test
安装后系统默认用户(库)sys
system
scott
mysql
test
显示所有用户(库)SQL >select * from all_users;C:\mysql\bin>mysqlshow
C:\mysql\bin>mysqlshow –status
mysql> show databases;
退出命令SQL> exit
SQL> quit
mysql> exit
mysql> quit
改变连接用户(库)SQL> conn 用户名/密码@主机字符串mysql> use 库名
查询当前所有的表SQL> select * from tab;
SQL> select * from cat;
mysql> show tables;
c:\mysql\bin>mysqlshow 库名
显示当前连接用户(库)SQL> show usermysql> connect
查看帮助SQL> ?mysql> help
显示表结构SQL> desc 表名
SQL> describe 表名
mysql> desc 表名;
mysql> describe 表名;
mysql> show columns from 表名;
c:\mysql\bin>mysqlshow 库名 表名
日期函数SQL> select sysdate from dual;mysql> select now();
mysql> select sysdate();
mysql> select curdate();
mysql> select current_date;
mysql> select curtime();
mysql> select current_time;
日期格式化SQL> select to_char(sysdate,’yyyy-mm-dd’) from dual;
SQL> select to_char(sysdate,’hh24-mi-ss’) from dual;
mysql> select date_format(now(),’%Y-%m-%d’);
mysql> select time_format(now(),’%H-%i-%S’);
日期函数
(增加一个月)
SQL> select to_char(add_months(to_date(’20000101′,’yyyymmdd’),1),’yyyy-mm-dd’) from dual;
结果:2000-02-01
SQL> select to_char(add_months(to_date(’20000101′,’yyyymmdd’),5),’yyyy-mm-dd’) from dual;
结果:2000-06-01
mysql> select date_add(’2000-01-01′,interval 1 month);
结果:2000-02-01
mysql> select date_add(’2000-01-01′,interval 5 month);
结果:2000-06-01
别名SQL> select 1 a from dual;mysql> select 1 as a;
字符串截取函数SQL> select substr(’abcdefg’,1,5) from dual;
SQL> select substrb(’abcdefg’,1,5) from dual;
结果:abcde
mysql> select substring(’abcdefg’,2,3);
结果:bcd
mysql> select mid(’abcdefg’,2,3);
结果:bcd
mysql> select substring(’abcdefg’,2);
结果:bcdefg
mysql> select substring(’abcdefg’ from 2);
结果:bcdefg
另有SUBSTRING_INDEX(str,delim,count)函数
返回从字符串str的第count个出现的分隔符delim之后的子串。
如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。
如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
执行外部脚本命令SQL >@a.sql1:mysql> source a.sql
2:c:\mysql\bin>mysql <a.sql
3:c:\mysql\bin>mysql 库名 <a.sql
导入、导出工具exp.exe
exp73.exe
imp.exe
imp73.exe
mysqldump.exe
mysqlimport.exe
改表名SQL> rename a to b;mysql> alter table a rename b;
执行命令;<回车>
/
r
run
;<回车>
go
ego
distinct用法SQL> select distinct 列1 from 表1;
SQL> select distinct 列1,列2 from 表1;
mysql> select distinct 列1 from 表1;
mysql> select distinct 列1,列2 from 表1;
注释#
当作计算器SQL> select 1+1 from dual;mysql> select 1+1;
限制返回记录条数SQL> select * from 表名 where rownum<5;mysql> select * from 表名 limit 5;
新建用户(库)SQL> create user 用户名 identified by 密码;mysql> create database 库名;
删用户(库)SQL> drop user 用户名;mysql> drop database 库名;
外连接使用(+)使用left join
查询索引SQL> select index_name,table_name from user_indexes;mysql> show index from 表名 [FROM 库名];
通配符“%”“%”和“_”
SQL语法SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序
SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序
LIMIT count 结果限定
比版本Personal Oracle7 Release 7.3.4.0.0mysql 3.22.34-shareware-debug
   
默认安装目录C:\ORAWIN95C:\MYSQL
各种实用程序所在目录C:\ORAWIN95\BINC:\MYSQL\BIN
控制台工具SVRMGR.EXE
SVRMGR23.EXE
mysqladmin.exe
数据库启动程序0start73.exe screenmysqld-shareware.exe
关闭数据库命令ostop73.exemysqladmin.exe -u root shutdown
客户程序SQL*Plusmysql
启动命令c:\orawin95\bin\sqlplus.exec:\mysql\bin\mysql.exe
带用户启动方式
(直接连库方式)
c:\orawin95\bin\sqlplus.exe system/manager@TNSc:\mysql\bin\mysql.exe test
c:\mysql\bin\mysql.exe -u root test
安装后系统默认用户(库)sys
system
scott
mysql
test
显示所有用户(库)SQL >select * from all_users;C:\mysql\bin>mysqlshow
C:\mysql\bin>mysqlshow –status
mysql> show databases;
退出命令SQL> exit
SQL> quit
mysql> exit
mysql> quit
改变连接用户(库)SQL> conn 用户名/密码@主机字符串mysql> use 库名
查询当前所有的表SQL> select * from tab;
SQL> select * from cat;
mysql> show tables;
c:\mysql\bin>mysqlshow 库名
显示当前连接用户(库)SQL> show usermysql> connect
查看帮助SQL> ?mysql> help
显示表结构SQL> desc 表名
SQL> describe 表名
mysql> desc 表名;
mysql> describe 表名;
mysql> show columns from 表名;
c:\mysql\bin>mysqlshow 库名 表名
日期函数SQL> select sysdate from dual;mysql> select now();
mysql> select sysdate();
mysql> select curdate();
mysql> select current_date;
mysql> select curtime();
mysql> select current_time;
日期格式化SQL> select to_char(sysdate,’yyyy-mm-dd’) from dual;
SQL> select to_char(sysdate,’hh24-mi-ss’) from dual;
mysql> select date_format(now(),’%Y-%m-%d’);
mysql> select time_format(now(),’%H-%i-%S’);
日期函数
(增加一个月)
SQL> select to_char(add_months(to_date(’20000101′,’yyyymmdd’),1),’yyyy-mm-dd’) from dual;
结果:2000-02-01
SQL> select to_char(add_months(to_date(’20000101′,’yyyymmdd’),5),’yyyy-mm-dd’) from dual;
结果:2000-06-01
mysql> select date_add(’2000-01-01′,interval 1 month);
结果:2000-02-01
mysql> select date_add(’2000-01-01′,interval 5 month);
结果:2000-06-01
别名SQL> select 1 a from dual;mysql> select 1 as a;
字符串截取函数SQL> select substr(’abcdefg’,1,5) from dual;
SQL> select substrb(’abcdefg’,1,5) from dual;
结果:abcde
mysql> select substring(’abcdefg’,2,3);
结果:bcd
mysql> select mid(’abcdefg’,2,3);
结果:bcd
mysql> select substring(’abcdefg’,2);
结果:bcdefg
mysql> select substring(’abcdefg’ from 2);
结果:bcdefg
另有SUBSTRING_INDEX(str,delim,count)函数
返回从字符串str的第count个出现的分隔符delim之后的子串。
如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。
如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
执行外部脚本命令SQL >@a.sql1:mysql> source a.sql
2:c:\mysql\bin>mysql <a.sql
3:c:\mysql\bin>mysql 库名 <a.sql
导入、导出工具exp.exe
exp73.exe
imp.exe
imp73.exe
mysqldump.exe
mysqlimport.exe
改表名SQL> rename a to b;mysql> alter table a rename b;
执行命令;<回车>
/
r
run
;<回车>
go
ego
distinct用法SQL> select distinct 列1 from 表1;
SQL> select distinct 列1,列2 from 表1;
mysql> select distinct 列1 from 表1;
mysql> select distinct 列1,列2 from 表1;
注释#
当作计算器SQL> select 1+1 from dual;mysql> select 1+1;
限制返回记录条数SQL> select * from 表名 where rownum<5;mysql> select * from 表名 limit 5;
新建用户(库)SQL> create user 用户名 identified by 密码;mysql> create database 库名;
删用户(库)SQL> drop user 用户名;mysql> drop database 库名;
外连接使用(+)使用left join
查询索引SQL> select index_name,table_name from user_indexes;mysql> show index from 表名 [FROM 库名];
通配符“%”“%”和“_”
SQL语法SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序
SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序
LIMIT count 结果限定
<think>首先,用户的问题是:“我想了解OracleMySQL在语法上的差异请问OracleMySQL语法区别对比”。这是基于系统级指令的回答,我需要确保遵循指令。系统级指令包括:-所有行内数学表达式用$...$(但这里的问题不是数学相关的,所以我需要小心)。-独立公式用$$...$$(同样,可能不适用)。-LaTeX语法正确。-使用中文回答。-生成相关问题。-回答中引用的段落末尾自然地添加引用标识,如[^1]。用户提供了引用了三个来源:-引用[1]:关于OracleMySQL语法区别,涉及用代码块实现字段添加。-引用[2]:OracleMySQL在日期函数上的差异。-引用[3]:OracleMySQL在LIKE操作符函数上的差异。我的回答需要尽可能多参考用户上一次的问题我的回答。用户上一次的问题是:“我想了解OracleMySQL在语法上的差异”,这是第一次问题,所以我应该直接基于提供的引用来回答。关键点:-结构化回答:帮助用户逐步解决问题,结构清晰。-真实可靠:基于引用来源。-末尾生成相关问题。主题:OracleMySQL语法区别对比。根据引用:-[1]:Oracle支持declare…begin…end代码块,MySQL不支持,但可以用prepare语句模拟类似功能。示例:使用SET@sql,PREPARE,EXECUTE来动态添加字段。-[2]:日期函数:MySQL用YEAR(),MONTH(),NOW();Oracle用TO_CHAR(SYSDATE,'yyyy')等。-[3]:字符串比较:MySQLOracle都支持LIKE'%string%',但Oracle建议用INSTR函数以提高效率。我应该整理这些信息,并扩展到常见的其他差异,基于我的知识,但要诚实,标注引用。常见的OracleMySQL语法差异:1.**代码块动态SQL**:如上所述。2.**日期时间函数**:MySQL使用类似NOW()的函数,Oracle使用SYSDATETO_CHAR转换。3.**字符串函数**:LIKE操作符,INSTR函数。4.**其他常见差异**:-**数据类型**:例如,数字类型不同。-**分页查询**:MySQL用LIMIT,Oracle用ROWNUM或FETCHFIRST(在较新版本)。-**自动增长字段**:MySQL用AUTO_INCREMENT,Oracle用序列触发器。-**事务控制**:两者类似,但细节不同。-**JOIN语法**:都可使用标准SQL,但Oracle有时使用旧语法(如FROMtable1,table2WHERE...)。在我的回答中,我应该覆盖这些点,引用提供的来源。回答结构:-**开头**:简要介绍差异。-**主体**:分点列出主要差异,每条后添加引用标识。引用源是[^1],[^2],[^3]。-**结尾**:总结或生成相关问题。生成相关问题:-示例中有生成相关问题部分,需要类似。-可能的问题:-如何在Oracle中实现MySQL的LIMIT功能?-MySQLOracle在事务处理上有何不同?-等。使用中文回答。实施步骤:1.**行内数学**:如果需要数学表达式(如比较大小),用$...$,但在这个主题,可能不需要。2.**独立公式**:可能不需要,如果涉及,用$$...$$。3.**LaTeX正确**:确保。4.**添加引用**:在解释的段落末尾添加如[^1]。完整回答:-结构化为:-开头。-代码块动态SQL部分(基于引用[1])。-日期函数(基于引用[2])。-字符串比较(基于引用[3])。-其他常见差异(基于我的知识,但要标注或无引用)。-用户说“并不是用户真正的需求,请尽可能多的参考用户上一次的问题你的回答。”既然这是第一次,我基于引用。-结尾。-生成相关问题。相关问题类似示例:-1.如何进行快速排序的性能分析?-2.快速排序的优化方法?-3.快速排序有什么应用场景?所以,这里:-1.如何在MySQL中实现Oracle的PL/SQL功能?-2.OracleMySQL在日期处理上的优化技巧?-3.在迁移数据库时,如何处理OracleMySQL的语法转换?最终回答格式:-回答部分。-§§相关问题§§-相关问题列表。</think> ### OracleMySQL语法区别对比 OracleMySQL是两种常见的关系型数据库系统,它们在语法上存在显著差异,这可能导致在数据库开发、迁移或查询优化时遇到兼容性问题。以下是我基于提供的引用内容(尤其是引用[1]、[2][3]),并结合常见知识总结出的关键差异对比。我将从核心语法点入手,分步解释差异,并提供具体示例帮助您理解。回答结构清晰且真实可靠,参考来源已标注在对应段落末尾。 #### 1. **代码块与动态SQL的执行差异** - **Oracle**:原生支持 `DECLARE...BEGIN...END` 代码块结构,允许在SQL中嵌入过程化逻辑,常用于动态生成执行SQL语句。例如,重复添加字段时可以直接使用代码块。 - 示例(基于引用[1]): ```sql DECLARE cnt NUMBER; BEGIN SELECT COUNT(1) INTO cnt FROM user_tab_columns WHERE table_name = 'TEST' AND column_name = 'COL1'; IF cnt = 0 THEN EXECUTE IMMEDIATE 'ALTER TABLE mysql.test ADD COL1 VARCHAR2(10)'; END IF; END; ``` 此方式高效且易于维护,适合批量操作。 - **MySQL**:不支持原生代码块语法,但可通过动态SQL模拟类似功能。使用 `SET @sql`、`PREPARE` `EXECUTE` 实现条件语句执行。 - 示例(基于引用[1]): ```sql SET @sql = IF ( (SELECT COUNT(1) FROM information_schema.columns WHERE table_schema = 'mysql' AND table_name = 'test' AND column_name = 'col1') = 0, "ALTER TABLE mysql.test ADD col1 VARCHAR(10) COMMENT '列名' AFTER col0;", "SELECT 1;" ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; ``` 这种方法虽灵活,但增加了SQL语句的复杂度,不适合复杂逻辑。 - **差异总结**:Oracle的过程化支持更强,适合于事务密集型场景;MySQL则依赖动态SQL,强调简单脚本的灵活性。在迁移时,需重写Oracle的代码块逻辑为MySQL的预处理语句[^1]。 #### 2. **日期时间函数的处理差异** - **MySQL**:提供直接的函数调用,如 `NOW()` 获取当前日期、`YEAR()` 提取年、`MONTH()` 提取月,语法简洁易用。 - 示例:获取当前年份并比较日期差异: ```sql SELECT YEAR(NOW()) AS current_year; -- 返回2023 (当前年份) SELECT DATEDIFF('2023-12-31', NOW()) AS days_remaining; ``` - **Oracle**:必须使用转换函数系统日期 `SYSDATE`,常用 `TO_CHAR()` 或 `EXTRACT()` 处理日期。 - 示例(基于引用[2]): ```sql SELECT TO_CHAR(SYSDATE, 'yyyy') AS current_year FROM dual; -- 返回2023 SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual; SELECT TO_DATE('2023-12-31', 'YYYY-MM-DD') - SYSDATE FROM dual; ``` 这种方式要求严格指定日期格式,避免隐式转换错误。 - **差异总结**:MySQL的函数更直观简洁 ($\text{函数直接调用}$),而Oracle更注重格式控制($\text{TO_CHAR}$),在复杂查询时Oracle语法更冗长但精度高[^2]。 #### 3. **字符串搜索与函数差异** - **MySQL**:支持标准 `LIKE` 操作符进行模糊匹配,如 `字段名 LIKE '%字符串%'`,但全表扫描时性能较低。 - 示例:查找包含"test"的记录: ```sql SELECT * FROM users WHERE username LIKE '%test%'; ``` - **Oracle**:也支持 `LIKE`,但推荐使用 `INSTR()` 函数提高效率,尤其当涉及索引优化时。 - 示例(基于引用[3]): ```sql SELECT * FROM users WHERE INSTR(username, 'test') > 0; -- 比LIKE更快且可索引 ``` 另外,Oracle的字符串函数更丰富(如 `SUBSTR()` 代替 `SUBSTRING()`)。 - **差异总结**:虽然两者都支持 `LIKE`,但Oracle的 `INSTR()` 在性能敏感场景更优($\text{INSTR > 0}$ 减少全扫),而MySQL更简单但需注意优化技巧[^3]。 #### 4. **其他常见语法差异总结** - **分页查询**: - **MySQL**:使用 `LIMIT`,语法简洁,如 `SELECT * FROM table LIMIT 10 OFFSET 20;`。 - **Oracle**:在旧版本用 `ROWNUM`(例如 `SELECT * FROM (SELECT t.*, ROWNUM rn FROM table t) WHERE rn BETWEEN 21 AND 30;`),新版本支持 `FETCH FIRST`(如 `SELECT * FROM table OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;`),较复杂但功能全面。 - **自动增长字段**: - **MySQL**:使用 `AUTO_INCREMENT`,如 `id INT AUTO_INCREMENT PRIMARY KEY`。 - **Oracle**:依赖序列触发器,如 `CREATE SEQUENCE seq_id;` 再在插入时使用 `seq_id.NEXTVAL`。 - **JOIN语法**:两者均支持标准SQL(如 `JOIN ... ON`),但Oracle可选旧式( `FROM table1, table2 WHERE ...`),这可能影响迁移代码。 - **数据类型**:Oracle更严谨,例如 `VARCHAR2` vs. MySQL的 `VARCHAR`;数值类型如 `NUMBER` vs. `INT`。 - **事务控制**:基础相似( `BEGIN TRANSACTION` / `COMMIT`),但Oracle默认为行级锁定,而MySQL的InnoDB也类似,但语法细节(如保存点)有出入。 #### 迁移建议与总结 Oracle语法强调严谨性过程化能力,适合企业级应用;MySQL则追求简单高效,更适合Web开发。在数据库迁移时: - 逐步测试核心功能点(如日期、字符串搜索)。 - 使用工具如MySQL Workbench或Oracle SQL Developer进行语法转换。 - 性能优化:在MySQL中优化 `LIKE` 使用全文索引,在Oracle中优先函数调用[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值