介绍:
MySQL是和Oracle类似一款数据库产品,语法和Oracle大体相同。MySQL是一款开源的中小型数据库,而Oracle是大型的商业数据库。MySQL最初是MySQL AB公司开源的产品,08年被Sun公司收购。09年Sun被Oracle收购了。都是关系型数据库
MySQL和Oracle一样都遵循SQL语言标准的数据库,MySQL语法和Oracle大体相同,但同时MySQL扩展了自己独有的语法。
表
建表语法
create table 表名(
列名(字段名) 数据类型 约束,
列名(字段名) 数据类型 约束
);
数据类型
整数 | number(n) | |
数据类型 | oracle | mysql |
小数 | number(m,n) | float,double |
定长字符串 | char(n) | char(n) |
变长字符串 | varchar2(n) | varchar(n) |
日期 | date(年月日-时分秒) |
建表示例
create table t_student( student_id int, student_name varchar(20), age tinyint, score double, birthday datetime );
建表语法细节补充
//只有在不存在某张表的执行,才执行建表语句,如果已经存在,不做任何操作 create table [if not exists] 表名( 列名 数据类型 约束, 列名 数据类型 约束, ... ) //设置表的数据库引擎和编解码集 //MySQL是开源的,可以使用不同的数据库引擎 //常见引擎 MyISAM(重查询、弱事务) 5.5之前默认 InnoDB (事务支持好,查询性能也不弱)5.5之后默认 create table [if not exists]表名( 列名 数据类型 约束, 列名 数据类型 约束, ... )[engine = myisam|Innodb] [default charset=utf8mb4]
约束
primary key 主键约束 unique 唯一约束 not null 非空约束 注意: mysql中没有 check 检查约束 foreign key(外键列名) references 表名(列名)
示例
create table t_class( class_id int primary key, class_name varchar(20) not null unique ); create table t_student( student_id int primary key, student_name varchar(20) not null, age tinyint, score double, birthday datetime, class_id int, foreign key(class_id) references t_class(class_id) )
增删改查
增
//Oracle中添加主键,通过序列生成的 create sequence seq_student; insert into t_student(seq_student.nextval,...); //MySQL原生不支持序列,MySQL中使用auto_increment约束主键自动自增 create table t_class( class_id int primary key auto_increment, class_name varchar(20) not null unique ); insert into t_class values(1,‘1910‘); insert into t_class(class_name) values(‘1911‘); insert into t_class values(null,‘1912‘); select * from t_class create table t_student( student_id int primary key auto_increment, student_name varchar(20) not null, age tinyint, score double, birthday datetime, class_id int, foreign key(class_id) references t_class(class_id) ) insert into t_student(student_name,age,score,birthday,class_id) values(‘xiaohei‘,18,100.0,now(),1); 注意:使用主键自动增长,插入语句必须显式写出要插入数据的列 或者主键列赋值为null
删(delete)
和Oracle中一模一样
改(update)
和Oracle中一模一样
//查询当前系统时间 Oracle: select sysdate from dual; MySQL: select now(); select sysdate(); //字符串拼接 Oracle: 拼接字符串使用 || MySQL: 拼接字符串使用concat(...); select concat(code,‘-‘,name) from country; select concat(‘%‘,#{查询条件},‘%‘) from 表名
注意:MySQL默认自动提交事务。
select * from 表 where 条件 ... limit offset,rows; offset表示获取到的首行的下标 rows表示最多获取到的条数 示例: --获取前10行 select * from country limit 0,10; --获取11行~20行 select * from country limit 10,10; pageNum,pageSize offset = (pageNum-1)*pageSize rows = pageSize
-
新建web项目
-
引入jar包,pom.xml中声明依赖
<!-- <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc</artifactId> <version>6.0</version> </dependency>--> <!--上面的配置替换为下面的配置--> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
工具类型:MyBatisUtils.java
配置文件:
mybatis-config.xml
log4j.properties
jdbc.properties 有变化
- jdbc.properties
oracle: driverClassName=oracle.jdbc.OracleDriver url=jdbc:oracle:thin:@localhost:1521:xe user=hr password=hr mysql: driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf-8 user=root password=root
-
-
建表
-
实体类
-
dao
接口:没有变化
实现:xxxMapper.xml中写MySQL的语句
-
service
-
test
-
action+jsp
-
集成测试