MySQL数据类型,建表,导入,导出,查询,排序,分组查询,DML操作,连接查询,子查询,JDBC连接MySQL数据库

1.MySQL的数据类型

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)获取字符数
MySQL数据类型,建表,导入,导出,查询,排序,分组查询,DML操作,连接查询,子查询,JDBC连接MySQL数据库_第1张图片
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中字符串型的长度是以字符为单位

2.建表

按照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数据类型,建表,导入,导出,查询,排序,分组查询,DML操作,连接查询,子查询,JDBC连接MySQL数据库_第2张图片
设置了自动递增后,在插入数据时,就不需要管主键了,mysql服务器会自动生成主键的值
在这里插入图片描述
Check约束在mysql中没有作用

3.导入,导出

使用navicat导入
1)新建一个空数据库,名字和要导入的sql脚本文件名相同
MySQL数据类型,建表,导入,导出,查询,排序,分组查询,DML操作,连接查询,子查询,JDBC连接MySQL数据库_第3张图片
2)选中刚创建的数据库,运行sql文件
MySQL数据类型,建表,导入,导出,查询,排序,分组查询,DML操作,连接查询,子查询,JDBC连接MySQL数据库_第4张图片
MySQL数据类型,建表,导入,导出,查询,排序,分组查询,DML操作,连接查询,子查询,JDBC连接MySQL数据库_第5张图片
使用navicat导出
选中要导出数据的数据库,右键“转储SQL文件”–>”结构和数据”
MySQL数据类型,建表,导入,导出,查询,排序,分组查询,DML操作,连接查询,子查询,JDBC连接MySQL数据库_第6张图片

4.MySQL的查询

和oracle不相同的地方:
1)concat():可以连接多个字符串,而oracle中的concat()只能连接2个字符串
2)MySQL中的分页查询语句
select 字段列表 from 表 limit 首行下标,每页记录数

假设每页要显示pageSize条记录,
查询第currentPage页的数据的分页sql:
select 字段列表 from 表 limit (currentPage-1)pageSize, pageSize

5.排序,分组查询

聚合函数,又叫分组函数,在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.DML操作

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.连接查询

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;

8.子查询

和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='有线鼠标')
          

9.JDBC连接MySQL数据库

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

下面报错表示email字段的值重复了,违背了主键或唯一约束
在这里插入图片描述

你可能感兴趣的:(MySQL)