1.整型:int和bigint,int映射java中的int/Integer
Bigint映射java中的long/Long
2.小数型:Float(M,D)和Double(M,D)
其中M表示有效数字总位数,D表示小数部分的位数
Float(7,2):表示数值的总位数是7位,小数部分最多2位
3.字符型
常用的字符串型有char 和varchar
char(n):代表固定长度的字符串,长度单位是字符,比如char(5)代表5个字符的长度
Varchar(n):代表可变长度的字符串,,长度单位是字符,
Varchar(n)或char(n)的字段占用的字节数和字符集有关系,如果是utf8字符集,那么1个中文字符占用3个字节,1个英文字符占用1个字节, length(str):获取字符串str的字节数,char_length(str)获取字符数
4.日期与时间类型
Datetime和timeStamp的区别:
1)Datetime类型的年份范围[1000,9999],而timestamp类型的年的范围[1970,2037]
2) Timestamp类型的字段的值会随着表的其它字段的更新而自动刷新,变成当前的日期时间
在实际开发中,通常用timestamp类型的字段来保存某个记录最后修改的日期时间
数据类型和Oracle不同的地方:
1)MySQL中没有varchar2,只有varchar
2)Oracle中不管是日期还是时间都通用用Date类型,没有Datetime和time类型,Mysql中同时有date,datetime和time类型
3)MySQL中字符串型的长度是以字符为单位
按照oracle的建表语法写就行
create table student
(
id int PRIMARY key auto_increment,
name varchar(20) not null,
sex char(1) DEFAULT '男',
email varchar(20) unique, -- 唯一约束
age int check(age>=18 and age<=30)
)
auto_increment: 代表自动递增,mysql服务器会让主键从初始值1开始,每次增加1
DEFAULT :设置默认值
Unique:设置唯一约束
check:检查约束
当建表时指定了主键自动递增了,在表设计器中可以看到自动递增被勾选了
设置了自动递增后,在插入数据时,就不需要管主键了,mysql服务器会自动生成主键的值
Check约束在mysql中没有作用
使用navicat导入
1)新建一个空数据库,名字和要导入的sql脚本文件名相同
2)选中刚创建的数据库,运行sql文件
使用navicat导出
选中要导出数据的数据库,右键“转储SQL文件”–>”结构和数据”
和oracle不相同的地方:
1)concat():可以连接多个字符串,而oracle中的concat()只能连接2个字符串
2)MySQL中的分页查询语句
select 字段列表 from 表 limit 首行下标,每页记录数
假设每页要显示pageSize条记录,
查询第currentPage页的数据的分页sql:
select 字段列表 from 表 limit (currentPage-1)pageSize, pageSize
聚合函数,又叫分组函数,在5个分组函数中,有1个不会忽略值为null的行,是count(*),和oracle相同.排序,分组查询和oracle是相同的
-- 分类编号: category_id
select category_id, count(id) from product GROUP BY category_id
order by count(id) desc
-- 查询零售价总和大于1500的商品分类编号以及总零售价和
select category_id, sum(sale_price) from product GROUP BY
category_id having sum(sale_price)>1500
6.1插入
A)插入完整记录
给表的每一列都要提供值,如果主键字段是自动递增的,那么要给它一个null值
insert into student values(null,'张其','女','[email protected]',20)
B)插入部分记录
给表的一部分字段提供值
Insert into 表(字段1,字段2…字段N) values(value1,value2…valueN)
-- 插入部分字段
insert into student(name,sex,email,age) values('张飞','男','[email protected]',28)
C)插入多条记录
insert into student(name,sex,email,age) values('刘
备',default,'[email protected]',32),
('关羽',default,'[email protected]',30)
6.2 删除
DELETE FROM table_name
[WHERE condition];
MySQL的delete语句是不能省略from关键字的,oracle中可以省略from
delete from student where id=3
Delete语句只是删除表中的数据,表结构还在,如果要删除表,要使用drop 表名
7.1 内连接
MySQL中内连接查询分为隐式内连接和显式内连接,
隐式内连接就是oracle中sql92的等值连接,
显式内连接就是oracle中sql99的内连接
语法
SELECT 列1,列2… FROM A [INNER] JOIN B ON A.列 = B.列
其中inner可以省略
7.2 外连接
MySQL的外连接语法不支持oracle的sql92的外连接语法
Select 字段 from tabel1,table2 where table1.字段=table2.字段(+)
MYSQL只支持sql99的外连接语法
例如:左外连接语法:
SELECT
FROM A LEFT [OUTER] JOIN B
ON A.column_name = B.column_name
左外连接和右外连接可以互换
例如:
-- 查询每个货品的名称,对应的分类名称以及对应的库存数量(三张表连接),要求没有库存的商品也要显示出来
select product_name,category_name,store_num from product p join
product_category pc on p.category_id=pc.id
left join product_stock ps on p.id=ps.product_id;
-- 把上面的需求按照右外连接来写
select product_name,category_name,store_num from product_stock ps
right join product p on p.id=ps.product_id join product_category
pc on p.category_id=pc.id
将查询结果中的null替换为0,使用ifnull(e1,e2),相当于oracle的nvl函数
select product_name,category_name,ifnull(store_num,0) from product p join
product_category pc on p.category_id=pc.id
left join product_stock ps on p.id=ps.product_id;
和oracle的子查询语法都一样,可以在update/delete语句中嵌套一个子查询
update product set sale_price=sale_price+100
where category_id=(select id from product_category
where category_name='无线鼠标')
-- 删除分类名称为有线鼠标的商品记录
delete from product where category_id=(select id from
product_category
where category_name='有线鼠标')
1)需要将jar包换成MySQL 的驱动包,复制资料中的
2)将项目的src根路径下的db.properties文件中的参数改成MySQL服务器的参数
driver=com.mysql.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/mysql_db
user=root
password=123456