笔记

MySql入门

学习目标

  • 了解什么是数据库和SQL
  • 掌握对数据库的CRUD
  • 掌握对表的CRUD
  • 掌握对数据的CRUD

1.数据库概念

  • 文件系统。

2.常见数据库

  • MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费.
  • Oracle :收费的大型数据库.Oracle公司的产品.Oracle收购SUN公司,收购MYSQL.
  • DB2:IBM公司的数据库产品,收费的.银行系统中.
  • SQLServer:MS公司.收费的中型的数据库.
  • SyBase :已经淡出历史舞台.提供了一个非常专业数据建模的工具PowerDesigner.
  • SQLite : 嵌入式的小型数据库,应用在手机端.

3.关系型数据库

  • 实体(表)和实体之间存在一种关系

4.mysql的安装和卸载

1)卸载

  • 去360或者控制面板卸载
  • 一定要删除两个文件夹(数据库安装路径,数据存放路径,这两个文件夹在配置文件里面my.ini)

5.数据库服务器内部结构

6.sql概念

  • 结构化查询语言
  • 非过程化语言,一条语句对应一个结果

    eg: int i = 5; int j = 4; int sum = i+j;
    

7.sql分类

DDL:数据定义语言.
    create,alter,drop...
DML:数据操纵语言
    insert,delete,update
DCL:数据控制语言
    grant
DQL:数据查询语言(****重点).
    select

公司一般数据库有两套,一套是测试库,一套是正式库

8.命令行连接数据库

  • mysql -u root -p

9.学习数据库列表

  • 对数据库的CRUD
  • 对表的CRUD
  • 对表里面的数据的CRUD(*重点)
二,对数据库的CRUD

1.创建数据库

create database 数据库名 [character set 字符集]
  • 创建一个web06_1的数据库(默认字符集)

    create database web06_1;
    
  • 创建一个web06_2的数据库(字符集指定为gbk)

    create database web06_2 character set gbk;
    

2.查看数据库

1)查看所有的数据库

    show databases;

2)查看数据库的定义

    show create database 数据库名;

3.删除数据库(很少用)

    drop database 数据库名;

4.修改数据库(不是修改数据库名,是修改字符集)

    alter database 数据库名 character set 字符集;

注意:

  • 是utf8,不是utf-8

5.其它操作

  • use 数据库名; 选择数据库
  • select database(); 查看正在使用的数据库

注意:

  • use后面直接根数据库名
  • 在操作表和操作数据之前,一定要指定数据库
三,对表的CRUD

1.创建表

    create table 表名(
        字段 类型 约束,
        字段 类型 约束,
        字段 类型 约束

    );

1)类型

Java                MYSQL
int                 int
float               float
double              double
String              char/varchar
Date                date,time,datetime,timestamp
文件类型                BLOB、TEXT   TEXT指的是文本文件  BLOB二进制文件

不同:

  • 字符串

    char(18);  aa  ;--->身份证 18位 
    varchar(18); aa
    
  • 时间

    date:只有日期
    time:只有时间
    datetime:即有日期又有时间
    timestamp:时间戳 -- > 下订单
    
  • 文件类型

注意:

  • 一般不把大文件(歌曲,电影)通过二进制存入数据库。把文件存放在服务器的硬盘上,保存文件的路径。

2)约束

  • 规则,约定
  • not null; 非空
  • unique;唯一约束
  • primary key;主键约束(非空+唯一)

注意:

  • 一般,把id设置为int类型,设置为主键约束,并且自动增长
  • 或者把id设置为字符串类型,UUID

1)创建一张学生表(id int类型,主键约束,设置自动增长; 学生姓名,字符串类型; 学生性别,整型)

create table student(
    id int primary key auto_increment,
    sname varchar(20),
    sex int

);

2.查看表

1)查看所有的表

show tables;

2)查看表的定义结构

desc 表名;

3.修改表

  • 增加一个字段;alter table 表 add 字段 类型 约束;
  • 修改列的类型约束; alter table 表 modify 字段 类型 约束 ;
  • 修改列的名称,类型,约束;alter table 表 change 旧列 新列 类型 约束;
  • 删除一列; alter table 表名 drop 列名;
  • 修改表名; rename table 旧表名 to 新表名;

1)给学生表增加一个grade字段

alter table student add grade varchar(20);

2)给学生表的sex字段改成字符串类型

alter table student modify sex varchar(10);

3)给学生表的grade字段修改成class字段

alter table studnet change grade class varchar(20);

4)把class字段删除

alter table student drop class;

5)把学生表修改成老师表(很少用)

rename table student to teacher;

4.删除表(很少用)

    drop table 表名;
三,对表的数据CRUD(**重点)

1.插入数据

1种. insert into 表 values(值,值....)
2种.insert into 表(字段,字段) values(值,值);

注意:

  • 第1种,字段有几个,值就应该插入几个
  • 第2种,插入哪些值,字段就列举出来几个。但是如果没有插入的字段有非空约束,不行的
  • 值和字段类型要匹配
  • 值和字段的个数要匹配
  • 值是字符或者时间类型,需要用”括起来

2.更新记录

    update 表 set 字段 = 值 [where 条件]
  • 把分类表的cname字段更新成服装

    update category set cname = '服装';
    

注意:

  • 如果没有加条件,修改字段的所有记录都会被修改

3.删除记录(表还在)

1)delete from 表 [where条件]

2)truncate table 表

区别:

  • delete是受事物控制的,一条一条的删除
  • truncate不受事物控制,把整张表删除,再创建一模一样的空表

4.查询记录(**重点)

select [*][字段,字段...][distinct 字段][聚合函数] from 表名 [where 条件]

1)查询所有的字段记录

  • 查询商品表的所有字段记录

    select *from product;
    

2)查询某张表特定字段的记录

  • 查询商品表的商品名和价格

    select pname,price from product;
    

3)去重查询

  • 把价格重复的给筛选

        select distinct price from product;
    

注意:

  • 一定要一模一样才能去重

4)别名查询 as

  • 字段别名; 字段 as 别名
  • 表的别名; 表名 as 别名

  • 查询商品名称和商品价格,商品价格通过别名‘价格’来查询

    select pname, price as '价格' from product;
    

5)运算查询(+,-,*,/等)

  • 把商品名,和商品价格+10查询出来

    select pname,price+10 from product;
    

注意:

  • 运算查询字段字段之间是可以的
  • 字符串时间这些做运算查询,结果是没有意义的

6)where条件查询

img

  • 查询商品价格>3000的商品

    select *from product where price>3000;
    
  • 查询价格在3000到6000之间的商品(3000<= price <=6000)

    select *from product where price between 3000 and 6000;
    

注意:

  • between and是包括临界值的

  • 查询id在1,5,10,15范围内的商品

    select *from product where pid in(1,5,10,15);
    
  • 查询商品名以Ip开头的商品

    select *from product where pname like "Ip%";
    

like:注意空格

  • 一般和占位符一起使用
  • %;多位(0~n)
  • _;一位

  • 查询商品价格大于3000并且数量大于20的商品

    select *from product where price>3000 and num>20;
    

7)排序查询

  • order by 字段
  • asc;升序
  • desc;降序

eg:根据商品价格查询出商品

    select *from product order by price;

8)聚合函数

  • count(*|字段); 统计个数,过滤null
  • sum();总和
  • max();最大值
  • min();最小值
  • avg();平均值

  • 查询商品的总个数

    select count(pid) from product;
    
  • 求商品的价格总和

    select sum(price) from product;
    
  • 查询商品的最大价格

    select max(price) from product;
    
  • 查询商品的平均价格

    select avg(price) from product;
    

9)分组查询

  • group by 字段

  • eg:根据cno分组,统计不同组的商品个数

    select con,count(*) from product group by cno;
    

注意:

  • 一般情况下,通过分组只包含分组字段和聚合函数结果才有意义

10)分组后筛选

  • having

  • eg:根据cno分组,统计不同组的商品个数,并且个数>5的

    select con,count() from product group by cno having count() >5;

注意:

  • having是分组后筛选,不能离开group by 单独存在
  • 有having一定有group by,有group by 不一定有having

11)查询语句出现的顺序

  • select from where group 【having】 order

注意:

  • 聚合函数不能作为where的条件,where后面不能直接跟聚合函数
  • having一般和聚合函数配合起来使用

12)分页查询

  • limit a,b;
  • a:从哪里开始(从0开始计数的)
  • b:一页显示的数量

    a = (curPage-1)*b;
    

应用场景:

  • 百度下面翻页的效果,手机里面上拉加载更多

做翻页效果:

  • 请求一次服务器,查询数据库(适合每一条数据量比较大)
  • 把数据一次查完返回给前端(适合数据量不太大)

- 分页扩展

  • 查询最大价格的商品名

    select pname,max(price) from product;不行的
    select pname,price from product order by price desc limit 0 ,1;
    
  • 翻页查询封装PageBean

    class PageBean{
        List<Item> list;
        int curPage;//当前页   
        int curCount;//一页显示的个数
        int total;//总个数  
        int totalPage;//总页数  
    }
    
    
    totalPage: total%curCount == 0---> total/curCount;
                total%curCount != 0---> total/curCount+1;
    
四,数据库常见问题解决

1安装路径

安装文件存放路径:不能有中文和空格!

2.如果在安装的过程中, 出现 了 the error code is 2503 或者2502, 记得要获得管理员权限,然后再安装.

3.解决命令行插入中文乱码或者插入数据不进去的问题

如果在命令行里出现中文乱码,到my.ini配置文件里面修改和命令行一致的编码。

img

4.3306端口号被占用导致服务开启不了

已经安装服务,端口号被占用:
    命令行输入:netstat -ano
    找到对应端口的pid,去任务管理器去查找pid对应的软件。kill掉软件。

5.密码忘记或者出现ERROR 1045 (28000): Access denied for user ‘ODBC’@’localhost’ (using password: YES)

1)第一种

1.在my.ini的[mysqld]字段加入:
skip-grant-tables
2.重启mysql服务,这时的mysql不需要密码即可登录数据库
 然后进入mysql(不要密码)
3.mysql>use mysql;
 mysql>update user set password=password('新密码') WHERE User='root';
4.mysql>flush privileges;
 运行之后最后去掉my.ini中的skip-grant-tables,重启mysqld即可。

2)第二种

 不使用修改my.ini重启服务的方法,通过非服务方式加skip-grant-tables运行mysql来修改mysql密码
 1. 停止mysql服务
 2.打开命令行窗口,在bin目录下使用mysqld-nt.exe启动,即在命令行窗口执行: mysqld-nt --skip-grant-tables
 3.然后另外打开一个命令行窗口,登录mysql,此时无需输入mysql密码即可进入。
 4.按以上方法修改好密码后,关闭命令行运行mysql的那个窗口,此时即关闭了mysql,如果发现mysql仍在运行的话可以结束掉对应进程来关闭。
 5.启动mysql服务

6.没有安装服务

    (没有安装服务)安装服务:
    管理员权限进入mysql的bin目录下:
    mysqld.exe -install 安装服务:
    如果有服务已经存在可以先移除
    mysqld.exe -remove  移除服务
五,多表间关系

1.外键约束

  • alter table 表 add foreign key(字段) references 表(字段);

2.多表的关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值