Day23 MySql数据库与JDBC (1)MYSQL

 (1)MYSQL

一. 数据库概述

  1.  常见关系型的数据库:
    1. mysql:开源免费的适用于中小型企业的免费数据库,sun公司收购mysql,sun公司被oracle收购之后开始收费
    2. mariadb:由mysql创始人搞出来的,直接是mysql开源版本的一个分支,基本上所有命令都是一样
    3. oracle:甲骨文公司,商业收费软件,适用于大型电商网站,收购sun公司
    4. db2:IBM公司,thinkpad        负责解决方案:软件和硬件,服务器架构.银行系统大多采用是db2
    5. sqlserver: windows里面,政府网站asp.net,并且大学教学通常都是采用SQLserver,图形化工具做的不错
    6. sybase:被淘汰的数据库
  2. NOSQL非关系型数据库:key:value
    1. mongodb
    2. redis  set get
  3. 关系型数据库:
    主要是用来描述实体与实体之间的关系
    E-R图   实体:方框   属性:椭圆   关系:菱形

二.MYSQL数据库服务器

  1. MYSQL数据库:数据库管理软件
  2. 服务器:就是一台电脑,这台安装相关的服务器软件,这些软件监听不同的端口号,根据用户访问的端口号,提供不同的服务

三.MYSQL的安装与卸载

  1. 卸载:
    1. 打开控制面板,删除软件
    2. 删除mysql安装目录的所有文件
    3. 删除mysql数据存放文件,在C:\ProgramData\MySQL
  2. 安装
    1. 运行安装程序:在启动配置教程之前,一直下一步,finish
    2. 第一次finish之后启动服务器配置教程
    3. 第一个 include mysql bin directory to windows path
    4. 第二个:端口号不要修改,字符集选择UTF-8,密码不要忘记

四.MYSQL的SQL语句

  1. SQL:Structuer Query Language
  2. DDL:数据定义语言:定义数据库,数据表的结构 create(创建) drop(删除) alter(修改)
  3. DML:数据操纵语言:主要是用来操作数据  insert(插入) update(修改) delete(删除)
  4. DCL:数据控制语言:定义访问权限,取消访问权限,安全设置 grant
  5. DQL:数据查询语言:select(查询) from(子句) where(子句)

五.数据库的CRUD的操作

  1. 首先要登录数据库服务器: mysql -uroot -proot
  2. 创建数据库:
    create database 数据库的名字
        例如:  create database user;

    create database 数据库的名字 character set 字符集;
        例如: create database user_1 character set utf8;

    create database 数据库的名字 character set 字符集 collate 校对规则;
        例如: create database user_2 character set utf8 collate utf8_bin;
  3. 查看数据库
     
    1. 查看数据库定义的语句
      show create database 数据库的名字
      show create database user;
      show create database user_2;
    2. 查看所有的数据库
      show databases;

      //下面三个数据库不能动
      information_schema
      performance_schema
      mysql
  4. 修改数据库的操作
    1. 修改数据的字符集
      alter database 数据库的名字 character set 字符集
      alter database user_1 character set gbk;
  5. 删除数据库
    1. drop database 数据库名字;
      drop database user_2;

      drop database test;
  6. 其他数据库操作命令
    1. 切换数据库(选中数据库)
      use 数据库名字
      use user;
    2. 查看当前正在使用的数据库
      select database();

六.表的CRUD操作

  1. 创建表
    1. create table 表名(
              列名  列的类型  约束,
              列名2  列的类型  约束,
      );
    2. 列的类型:
      java     int       char/string       double       float       boolean     date                  
      sql       int       char/varchar    double       float       boolean     date    text   blob   time   datetime   timestamp     
    3. 列的约束:
      主键约束:primary key
      唯一约束:unique
      非空约束:not null
    4. 创建表:
      分析实体:学生
      学生ID,姓名,性别,年龄
      create table student(
              sid int primary key,
              sname varchar(31),
              sex int ,
              age int
      ); 
  2. 查看表
    1. 查看所有的表
      show tables;
    2. 查看表的创建过程
      show create table student;
    3. 查看表结构
      desc student;
  3. 修改表
    添加列(add),修改列(modify),修改列名(drop),修改表名(rename),修改表的字符集
    1. 添加列(add)
      alter table 表名 add 列名 列的类型 列的约束
      alter table student add chengji int not null;
    2. 修改列(modify)
      alter table student modify sex varchar(2);
    3. 修改列名(change)
      alter table student change sex gender varchar(2);
    4. 删除列(drop)
      alter table student drop chengji;
    5. 修改表名(rename)
      rename table student to person;
    6. 修改表的字符集
      alter table person character set gbk;
  4. 删除表
    drop table person;

七.SQL完成对表中数据的CRUD的操作

  1. 插入数据
    insert into 表名(列名1,列名2,列名3) values (值1,值2,值3)
    insert into student(sid,sname,sex,age)values(1,'zhangsan',1,23);
    1. 简单写法:若果插入的是全列名的数据,表明后面的列名可以省略
      insert into 表名 values (值1,值2,值3)
      insert into student values(2,'zhangsan',1,23);
    2. 注意:如果是插入部分列的话,列名不能省略
      insert into student(sid,sname)values(3,'lisi');
      insert into student values(3,'lisi'); //这种写法是错误的
    3. 批量插入
      insert into student values
      (4,'zhangsan',1,23),
      (5,'zhangsan',1,23),
      (6,'zhangsan',1,23),
      (7,'zhangsan',1,23),
      (8,'zhangsan',1,23);
    4. 单条插入和批量插入的效率
    5. 查看表中数据
      select * from student;
    6. 命令行下插入中文问题:insert into student  values (11,'李四',1,24);
      临时解决乱码问题,set names gbk;当前命令行输入的是GBK编码,命令行关闭后,再输入中文就会存在问题
      永久解决乱码问题,先任务管理器暂停mysql的服务,修改my.ini配置(在mysql软件安装路径里),57行编码改成GBK
  2. 删除记录
    delete from 表名 [where 条件]
    delete from student where sid = 11;
    delete from student;    //如果没有指定条件,会将表中数据一条一条全部删除掉
    1. 面试问题: delete删除数据 和truncate 删除数据有什么区别
      delete:DML一条一条删除表中的数据
      truncate:DDL先删除表再重建表
      关于哪条执行效率高:具体看表中的数据量
                   如果数据比较少,delete比较高效
                   如果数据比较多,truncate比较高效
  3. 更新表记录
    update 表名 set 列名=列的值,列名2=列的值2  [where 条件]
    将sid为5的名字改成李四
    如果参数是字符串,日期要加上单引号
    update student set sname='李四' where sid = 5;
  4. 查询记录
    select [distinct] [*] [列名,列名2] from 表名 [where 条件]
    distinct:去除重复的数据
    1. 简单查询:
      select * from product;
      select pname,price from product;
    2. 别名查询,as的关键字,as关键字是可以省略
      --表别名:select p.name,p.price from product as p;   //as可以省略
      --列别名:select pname as 商品名称,price as 商品价格 from product;  //as可以省略
    3. 去掉重复的值
       select price from product;
       select distinct price from product;
  5. select运算查询:
    select  *, price*1.5, from product;
    select  *, price*0.9 as 折后价, from product;
    --like :模糊查询
          _:代表的是一个字符
         %:代表的是多个字符
    --查询出名字中带饼的所有商品 ' %饼% '
       select * from product where pname like ' %饼% ';
    --查询第二名字是菜的所有商品  ' _菜% '
       select * from product where pname like ' _菜% ';

    --in 在某个范围中获得值
         --查询出商品分类id在 1,2,3里面的所有商品
         select * from product where cno in (1,2,3);
  6. 排序查询 order by 关键字
    asc: ascend 升序 (默认的排序方式)
    desc: descend 降序
    select * from product order by price desc;
  7. 聚合函数:
    sum():求和   avg():求平均值   count():统计数量
    max():最大值  min():最小值
  8. 分组 group by
    根据cno分组,分组统计商品个数
    select cno,count(*) from product group by cno;
    根据cno分组,分组统计商品的平均价格,并且平均价格>60
    select cno,avg(price)
    from product group by cno
    having avg(price) >60;
    --having 关键字 可以接聚合函数的,出现在分组之后
    --where 关键字 不可以接聚合函数的,出现在分组之前
  9. 编写顺序
    --S..F..W..G..H..O
       select .. from .. where .. group by .. having .. order by ..
  10. 执行顺序
    --F..W..G..H..S..O
       from .. where .. group by .. having .. select .. order by
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值