一.MySql数据库
a.数据库:存储数据的仓库
b.DBMS:数据库管理系统,操作和管理数据库的大型的软件
c.常见的数据库:
MYSQL:开源免费的数据库,小型数据库
ORACLE:收费的大型数据库
BD2:IBM公司的数据库产品,收费的
SQLSever:MicroSoft公司的收费的中型数据库
SyBase:已经过时,提供了经典的建模工具
SQLite:嵌入式小型数据库
数据库分类:
1.关系型数据库:表与表之间的关系
MYSQL,ORACLE
2.非关系型数据库
例如,MongGoDB
d.类与数据库的对应关系
类---数据表
属性---字段
对象---数据记录
对应关系有什么用:
1.有了这种映射关系,以后我们会直接通过特殊的方式
将JavaBean的各个属性一一对应存入数据库
2.我们在设计表时,也会参考这种面向对象的方式,设计表的字段
e.在电脑中查看是否启动mysql
1.在我的电脑右键-->管理-->服务和应用程序-->服务
2.在win+R输入services.msc
f.mysql分成两个部分
服务端:
mysqld.exe
客户端:
mysql.exe
GUi界面:
SQLyog,Navicat,Sequel,pro
g.命令行的登录方式
启动和停止mysql(命令行指令)
启动: net start mysql
关闭: net stop mysql
1.mysql-uroot -p123
2.mysql-u root -p
回车然后再输入密码123
注意:出现"..usingpassword yes.." : 用户名或者密码输入错误
二.sql的语句介绍和分类
sql的定义:结构化查询语言
1.分类:
DDL:数据定义语言: create, drop, alter(操作库,表)
DML:数据库操作语言:insert, delete, update(增,删,改)
DCL:数据控制语言: 创建修改用户,权限
DQL:数据查询语言:select, from, where(查)
2.语法:
a.不区分大小写 ,惯例,sql关键字大写 SELECT WHERE
b.可以多行,可以单行,以分号";"结尾
c.单词之间通过空格分隔,参数之间使用","分隔
d.字符串和日期要使用双引""或者单引'' ,推荐使用单引''
3.sql注释(2+1)
1) #单行注释
2)-- 单行注释,减号后面必须有一个空格
3)/*
多行注释
*/
三.数据类型
主要使用的:
int 整形
double浮点型
varchar字符串可变 varchar(20) 单位是20字节
char字符串固定
date日期类型(只有年月日,没有时分秒)格式:yyyy-MM-dd
varchar和char类型的区别?
varchar:每次存储是按实际长度进行存储
优点:节省内存
缺点:效率低
char:每次存储就是按照固定的长度进行存储
优点:效率高
缺点:效率高
四.数据库(database)的操作
1.操作数据库语句:
create database 库名创建一个数据库
create database 库名 set character 编码表创建库并设置编码
(安装数据库时默认是utf8)
drop database 库名;删除数据库(删了就找不回了,没有回收站)
show databases显示所有数据库
use 库名;使用这个库
--扩展
select datebase()查看正在使用哪个库
show create database 库名显示创建库的时候的信息
2.SQLyog中SQL代码的保存
Ctrl+S 保存sql语句
Ctrl+O 打开保存的sql语句
五.表
1.创建表
createtable 表名(
列名1 数据类型约束,
列名2 数据类型约束,
列名3 数据类型约束
);
例.create table users(
uidint primary key auto_increment,
unamevarchar(20),
uaddressvarchar(200)
);
2.约束:
约束的种类:
主键约束: primary key (非空,唯一)
自增约束: Auto_increment(不写值,也可以自动增加)
扩展
外键:foreign key
非空:not null
唯一:unique
检查:check(条件)
默认值约束:default
3.查询&删除
showtables; 查看使用库中的所有的表
desc表名; 查看表的结构
droptable 表名; 删除一个表
4.修改表的结构:
--添加列,字段
altertalbe 表名 add列名数据类型约束
例.alter table users add tel int;
--修改列
--1)修改列的数据类型和约束
altertable 表名modify 列名数据类型约束
例.alter table users modify tel varchar(50);
--2)修改列名
altertable 表名change 旧列名新列名数据类型约束
例.alter table users change tel newtel double;
--删除列
altertable 表名drop 列名
例.alter table users drop tel;
--修改表名
renametable 旧表名 to 新表名
例.rename table users to users_new;
六.操作数据
1.插入数据:
方式一.根据列名插入值
insertinto 表名(列名1,列名2,列名3)values(值1,值2,值3);
例. insert into product(id,pname,price)
values(1,'笔记本',5555.99);
注意:列名,表名的问题
对应问题个数,数据类型
方式二:所有值全给出的方式
insertinto 表名values(值1,值2,值3..);
注意:方式2应该插入表中所有的字段值
方式三: 批量插入数据
insertinto 表名(列名1,列名2,列名3)values(值1,值2,值3),
(值4,值5,值6),
(值7,值8,值9)
2.更新记录数据:
1)update 表名 set列名1=新值,列名2=新值;
2)update 表名 set列名=值where 条件;
例.update product set panme='智能马桶'where id=7;
注意:update 后面没有table这个关键字
扩展:
一.id in(1,2,3);等价于id=1 or id=2 or id=3;
二. java sql
&&and
||or
!not
WHERE 关键字:
筛选,过滤条件
3.删除数据:
deletefrom 表名where 条件
deletefrom product where pname='热水器';
注意:delete与trunccate的区别?
delete from 表名计数器不会被重置
truncate table 表名计数器重置
4.乱码问题:
cmd命令行中默认使用的 GBK
而 mysql创建的时候使用的是utf-8
setnames 'gbk'; 临时设置成gbk
底层做了3件事: 设置1.客户端 2.设置库 3.设置连接
七.查询语句:
关键字---select
1)基本的查询
select列名1,列名2from 表名; 查询指定列的数据
select* from 表名; 查询所有的数据
2)distinct 去重
selectdistinct zname from product;
注意:多个列去重,必须按照多个列组合去重
3)as 查询重新命名列
selectzname as '名称'from product;
4)查询中,可以直接进行数学运算
selectzname,zmoney+1000 from zhangwu;
2)条件查询:
查询所有的吃饭支出
select* from zhangwu where zname='吃饭支出';
查询金额大于1000
select* from zhangwu where zmoney >1000;
查询金额在2000到5000之间的
select* from zhangwu
wherezmoney>=2000 and zmoney<5000
改造成 between and
select* from zhangwu
wherezmoney between 2000 and 5000;
查询金额是1000,3500,5000其中的一个
select* from zhangwu
wherezmoney in(1000,3500,5000)
八.运算符
1)比较运算符
=--- 相等
<>或者!=--- 不等于
>--- 大于
<--- 小于
<=--- 小于等于
>=---大于等于
betwenn值1and 值2--- 在值1和值2之间(包含头和尾)
in(值1,值2,值3)--- 在列表中,满足其中一个就可以
isnull --- 是空
isnot null --- 不为空
like通配符:模糊查询
"%"用来匹配多个字符例,like'a%'
"_"用来匹配一个字符例,like'a_'
2)逻辑运算符
and--- 与
or--- 或
not--- 非
注意:日期也是可以比较大小的
九.排序&聚合函数&分组:
排序:
orderby:可以对查询结果进行排序
select* from 表名order by 字段asc;
select* from zhangwu order by money;
注意: asc 升序(默认)
desc降序
聚合函数:
count:统计指定列不为null的记录行数
sum:指定列求和
max:指定列的最大值
min:指定列的最小值
avg:指定列的平均数
注意:使用聚合函数的时候值为null的不参与计算
分组:
groupby:将列中的重复的内容进行操作
注意:分组后,跟聚合函数配合才有意义
select字段1,字段2..from表名group by 字段having 条件
分组操作中having子语句,是用于在分组后对数据进行过滤,类似where
having和where的区别:
a.
having在分组后
where在分组前
b.
having可以使用分组函数(统计函数)
where后面不可以使用分组函数
1)select parent,sum(money) from zhangwu group byparent
2)selectparent,sum(money) from zhangwu
groupby parent having sum(money) >500;
注意:sql语句完整结构(顺序)
select ..from..where..group by..having..order by..