mysql和oracle的区别

1. mysql和oracle都是关系型数据库,可以应用于各种平台。我们用的oracle的版本是oracle11g ,用的mysql的版本是mysql5.5。mysql最开始是瑞典一个公司开发的,开源的,但是后来被sun公司收购,后来sun又被oracle收购,所以现在可以说mysql属于甲骨文公司了!现在用mysql的公司也有很多,mysql价钱便宜些,处理千万级别的数据不成问题的,并且开源,很友好!

2. mysql默认端口:3306 默认用户root

oracle默认端口 1521 默认用户system

3. mysql的安装卸载简单,oracle很麻烦,动不动就要害的大家重做系统(迷醉)

4. oracle在命令行用命令登陆:sqlplus---然后录入账号密码

mysql在命令行用命令登陆: mysql -hlocalhost -uroot -p123123

(开头字母代表 ----- h:host u:user p:password,并且这些命令要想正常运行,那必须要在环境变量path中配置好)

5. 在初学阶段,图形化工具,oracle 一般用PLSQL ,mysql 一般用navicat。假如别的你用着习惯比如sqlyog小海豚啥的当然也没有问题。

6. 关于数据库的层次结构:

oracle:创建一个数据库,数据库下有好多用户:sys,system,scott等,不同用户下还有好多表。我们自己练习一般就创建一个数据库用。

mysql:默认用户是root,用户下可以创建好多数据库,每个数据库下还有好多表。我们一般自己练习就用默认用户,不会创建多个用户。

7.数据库中表字段的类型:

oracle:number(数值型),varchar2,varchar,char (字符型),date 日期型 等

mysql:int,float,double等数值型,varchar,char字符型,date,datetime,time,year,timestamp等日期型。

其中char(2)这样定义,这个单位在oracle中2代表两个字节,mysql中代表两个字符。

其中varchar在mysql中 必须给长度例如varchar(10) 不然插入的时候出错。

8.主键递增操作:

oracle:可以借助序列

mysql:利用自增 auto_increment

9.单表sql语法:

(a)创建表:

oracle:

create table t_student(

sid int primary key ,

sname varchar(1) not null ,

enterdate date,

gender char(1),

mail unique, ---唯一约束

age number check (age>19 and age<30) -----检查约束

)

mysql:

create table t_student(

sid int primary key auto_increment,

sname varchar(1) not null ,

enterdate date,

gender char(1),

age int check (age>18 and age<40), ---检查约束,虽然语法可以通过,但是不好使

mail varchar(10) UNIQUE --- 唯一约束

)


(b)插入数据:

oracle:

insert into myuser values (序列名字.nextval,'nana','123','男',to_date('1990-3-4','YYYY-MM-DD'))

mysql:

(0)正确写法:null 自增

(1)日期不同 可以直接添加:'1990-3-4'

(2)单位(1)代表一个字符,字母汉字都是一个字符! 性别 char(2) 代表 两个字符 :a一个字符 男 一个字符

(3)日期没有sysdate , 要是:sysdate() now() 错误 没有to_date函数 insert into myuser values (NULL,'nana','123','男',to_date('1990-3-4','YYYY-MM-DD'))

(4)可以多条数据一起添加

(5)非空约束,唯一约束,主键约束,都可以,但是 检查约束不好使

下面语法都是可以的:

insert into t_student values (NULL,'a','1990-3-4','a')

insert into myuser values (NULL,'nana','123','男','1990-3-4')

insert into myuser values (NULL,'nana','123','男','1990/3/4')

insert into myuser values (NULL,'nana','123','男',sysdate())

insert into myuser values (NULL,'nana','123','男',now())

insert into myuser values (NULL,'nana','123','男',sysdate()),(NULL,'nana','123','男',sysdate())

(c)删除表

(1)删除表:这里不同

oracle: delate from myuser ; ---from 可有可无

mysql: delete from myuser; ---必须有from

(2)删除整个表:oracle,mysql一样

drop table myuser ;

(3)只删除数据 不删除表 :oracle,mysql一样

TRUNCATE table myuser ;


10.多表sql语法:

(1)oracle:创建学生表,班级表,添加外键关联:

--创建学生表:

create table t_student(

sid number primary key ,

sname varchar2(10),

gender char(3),

classid number

)

--创建班级表:

create table t_class(

cid number primary key,

cname varchar(10)

)


----学生表添加数据:

insert into t_student values (seq_emp.nextval,'lili','男',1);

insert into t_student values (seq_emp.nextval,'nana','男',2);

insert into t_student values (seq_emp.nextval,'feifei','男',3);

---班级表添加数据:

insert into t_class values (1,'java01');

insert into t_class values (2,'java02');


--添加学生表的外键约束:

alter table t_student add constraints fk_student foreign key (classid) references t_class (cid)on delete cascade;


(2)mysql创建学生表,班级表,添加外键关联:

##创建学生表:

create table t_student(

sid int primary key auto_increment,

sname varchar(10),

gender char(3),

classid int

)

##创建班级表:

create table t_class(

cid int primary key,

cname varchar(10)

)

##学生表添加数据:

insert into t_student values (null,'lili','男',1);

insert into t_student values (null,'nana','男',2);

##班级表添加数据:

insert into t_class values (1,'java01');

insert into t_class values (2,'java02');

##添加学生表的外键约束:

alter table t_student add constraint fk_student foreign key (classid) references t_class (cid) on delete set null on update CASCADE;

注意哪里不同:

创建语法不同

外键约束:oracle是constraints,mysql是constraint

级联操作:

oracle:on delete set null 或者on delete cascade

mysql : on delete set null on update CASCADE

更改班级表的主键的时候,学生表外键的值也随之更改

删除班级表的主键记录的时候,学生表外键的值置空


11.外连接:

oracle:92语法:可以内连接,外连接

99语法:可以内连接,外连接,全外连接

mysql:只支持 内连接,外连接 ,并且只能用类似oracle中99语法的格式写:

select * from t_class c,t_student s where c.cid(+)=s.classid; (不可以出错)

select * from t_class c right join t_student s on c.cid=s.classid;(只能这样写)

12.分页:

(1)oracle分页复杂:

第2页:6-10条记录

select * from

(select rownum rr,a.* from (select * from emp order by sal) a )

where rr>5 and rr<=10;

(2)mysql分页简单一句话:

select * from help_category order by parent_category_id limit 10,5

10,5含义:

记录从0开始,所以其实10代表的是第11条记录,从第11条记录开始,取5个数据