MySQL、Oracle与DB2数据库差异
第一章:SQL执行差异
1.DB2数据库
1.1用户创建
#用户名等1到8个字符 #DB2中用户必须是个操作系统用户(比如Windows和Linux用户) #等同于在系统中创建用户设置密码(这点不同于oracle等数据库) useradd -d /home/testuser -m testuser passwd testuser
1.2赋权限
#查看数据库 dbdbname su - db2inst db2 list application #连接数据库权限授予、撤销 db2 connect to dbdbname user db2inst using db2inst db2 GRANT dbadm ON DATABASE TO USER testuser; db2 REVOKE connect,resource,dba ON DATABASE FROM testuser;
1.3创建表空间
--删除、创建自动存储、注释表空间 drop tablespace testuserdb; CREATE TABLESPACE testuserdb MANAGED BY AUTOMATIC STORAGE; COMMENT ONTABLESPACE testuserdb IS '表空间';
1.4创建schema
--查询当前存在的Schema select * from syscat.schemata; --在不同用户下创建与之相同的默认 schema DROP schema testuser RESTRICT; CREATE schema testuser authorization testuser; --查询、修改当前Schema(DB2数据库中用户与Schema没有必然联系,设置给用户设置一个与之相同的默认Schema) select current schema from sysibm.sysdummy1; SET CURRENT SCHEMA = 'testuser';
1.5创建索引
select * from sysibm.sysindexes where tbname = 'TESTTABLE'; --查看表索引 drop index ind_emp; --删除索引 create index ind_emp on testtable(NO); --普通索引 create unique index ind_emp on testtable(NAME,TYPE,NO); --唯一索引 Create unique index ind_emp on u_emp(emp) cluster; --聚集索引
2.Oracle数据库
2.1创建用户、赋权限、删除用户
https://www.cnblogs.com/ZhaoHS/p/10246064.html
3.MySQL数据库
3.1创建用户、赋权限
登陆mysql mysql -uroot -p 创建数据库 CREATE DATABASE webDB; 创建用户(密码注意是否需要字母大小写、数字、特殊符号) CREATE USER 'web'@'%' IDENTIFIED BY 'web@123'; 给用户赋数据库表权限(webDB.*表示给用户赋webDB数据库所有表权限) grant all privileges on webDB.* to 'web'@'%' with grant option;
3.2例如(注意:恢复root用户超级权限)
[root@mysql ~]# mysql -h主机IP -u用户名 -p密码 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 83282 Server version: 5.7.37 MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> GRANT ALL PRIVILEGES ON web.* TO 'web'@'%' IDENTIFIED BY 'web'; ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'web' mysql> SELECT host,user,password,Grant_priv,Super_priv FROM user; ERROR 1046 (3D000): No database selected mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user; ERROR 1054 (42S22): Unknown column 'password' in 'field list' mysql> UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; Query OK, 1 row affected (0.00 sec) Rows matched: 2 Changed: 1 Warnings: 0 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye mysql> grant all privileges on web.* to 'web'@'%' with grant option; Query OK, 0 rows affected (0.00 sec)
3.3删除用户、用户数据库、修改用户密码
删除用户 >mysql -u root -p >密码 mysql>DELETE FROM user WHERE User="web" and Host="localhost"; //刷新系统权限表 mysql>flush privileges; 删除用户的数据库 mysql>drop database webDB; 修改指定用户密码 >mysql -u root -p >密码 mysql>update mysql.user set password=password('新密码') where User="web" and Host="localhost"; mysql>flush privileges;
3.4查询&解除死锁
select concat('KILL ',id,';') from information_schema.processlist where user='root'; 杀进程(解除死锁) KILL 7279; KILL 7283; KILL 7286; KILL 7282; KILL 7284;
第二章:在使用与功能上的差异总结
MySQL与DB2的对比
编号 |
功能 |
MySQL |
DB2 |
1 |
账号管理 |
数据库用户名+IP地址 |
操作系统用户 |
2 |
权限管理 |
可以批量grant与revoke |
只能单独授权包括最小单元 |
3 |
日志管理 |
归档日志与事务日志没有关系 |
归档日志由事务日志产生 |
4 |
锁的管理 |
MVCC实现锁的并发控制 |
内存模型实现锁的并发控制 |
5 |
schema的管理 |
每个schema为一个独立的DB |
同一个DB内可以有多个schema |
6 |
表空间管理 |
无法条带化、可管理、维护性较弱 |
管理方便、功能强大 |
7 |
数据备份 |
开源在线的备份工具少,传统的备份只支持温备份 |
备份方式严谨、功能强大 |
8 |
事务行为 |
回滚到上一个保存点,不会回滚整个事务 |
整个事务进行回滚 |
9 |
数据恢复 |
支持在恢复时打开数据库,灵活 |
不支持在恢复或前滚时打开数据库 |
10 |
SQL支持 |
对复杂SQL支持较弱,在运行时可能会存在性能问题 |
支持各种复杂SQL,多种jion方式 |
11 |
Package支持 |
不支持 |
支持 |
12 |
语法差异 |
遵守SQL92标准,但细节上有差异、默认大小写敏感 |
遵守SQL92标准,大小写不敏感 |
13 |
容灾与高可用 |
可选择方案较多、灵活、可二次开发 |
只有HADR |
14 |
可扩展性 |
可选择方案较多、灵活、可定制、可开发 |
只有PureScale |
15 |
DDL功能 |
支持指定位置加列、在线DDL |
不支持 |
引用:http://blog.chinaunix.net/uid-31518880-id-5782957.html
MySQL与Oracle的对比
引用:https://www.doc88.com/p-47216041896644.html?r=1
第三章:数据库连接&报错等
1.DB2数据库
1.1报错:https://www.cnblogs.com/ZhaoHS/p/14212588.html
1.2 驱动:com.ibm.db2.jcc.DB2Driver
URL:jdbc:db2://9.1.17.47:50001/TRDADB
2.MySQL数据库
2.1mysql安装磁盘满了,服务停止不能启动
启动mysql数据库
systemctl start mysqld
连接mysql数据库
mysql -h9.1.15.72 -uroot -proot
2.2驱动:com.mysql.cj.jdbc.Driver
URL:jdbc:mysql://9.1.15.72:3306/afaconsole?characterEncoding=utf8
2.3 MySQL插入中文时出现ERROR 1406 (22001): Data too long for column ‘name‘ at row 1
修改类型为:longtext,alter table 表名 modify column 字段名称 字段类型 not null;
alter table AWEB_ROLE modify column PERMISSIONS longtext COMMENT '权限' not null;
待持续完善......