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个数据
整理不易,中午没吃饭,有点饿~~~~~~~~
教训:中午还是要吃饭的 !