MySql基础(一)
数据库 & 数据库管理系统
区别
- 数据库:就是存储数据的仓库,是一个文件系统
- 数据库管理系统:一个管理数据库的软件
- 相当于图书馆和图书管理员
常用的数据库管理系统
- MYSQL:开源免费小型数据库,后面被Oracle公司收购,6.0开始要收费,我们用5.5的版本
- Oracle:收费的大型数据库
- DB2:IBM公司研发的收费数据库,多用于银行
- SQLServer:微软研发的数据库
- SQLite:移动设备用的嵌入式小型数据库
数据库 & 数据库管理系统 关系
- 数据库本身是一个服务器,需要网络连接访问
- 通过数据库管理系统操作数据库,用户不直接操作数据库
- 数据库服务器面对里面的众多数据库,在众多数据库中有相应的表,数据就存在表中
- 相当于图书馆--分类--书架--书本
数据库表
- 数据库表相当于java中的类
- 表名--类名
- 表中字段--类属性
- 记录--对象
表数据
- 表的字段规定的数据类型:整数,小数,字符串....
MySql数据库
安装MySql
- 查看doc文档,根据安装步骤安装(j2ee软件包)
- 安装时需要修改两个路径:
- 数据库服务器的安装路径(卸载的时候需要用到这个路径)
- 数据库存放路径
- MySql端口:3306
- 数据库中有一个内置的用户:root
选择数据库服务器的启动方式
- 打开window服务:
- terminal中输入:services.msc(打开服务可视窗口)
- MySql数据库有开机启动和手动启动两种,为了节省性能,可以选择开发的时候手动开启
- 右键--属性--启动类型--手动
- 快速打开服务:
- 在命令行中输入:net start mysql
MySql的登陆
- 安装MySql的时候勾选了自动配置环境变量
- 在命令行输入:
mysql -uroot -proot
//-u表示用户名user
//-p表示密码password
//登陆后输入exit退出mysql
//也可以用户名密码分开写来登陆
mysql -u root -p
//然后再输入密码
- 登陆后表示已经进入数据库管理系统了,然后就可以对数据库进行操作了
SQLYog软件介绍(图形化开发工具)
- 在命令行里写程序比较痛苦,可通过可视化工具操作数据库--==SQLYog==
- 对于数据库来讲,图形化界面操作的工具有很多种
- SQLYog软件为免安装版本
- 在SQLYog界面中:
- Query:可以敲命令,就相当于在命令行登陆mysql后的界面
SQL语句
- 数据库不认识java语言,要与数据库交互需要用sql语言(结构化查询语言)
- 所有的数据库都遵循sql语言的标准
- sql语句不区分大小写(建议使用大写)
- sql可以单行和多行书写,以分号结尾
- 注释:/**/
- mysql常用数据类型:
- int:整型
- double:浮点型
- varchar:字符型
- date:日期类型 yyyy-MM-dd(只有年月日,没有时分秒)
SQL分类
- 数据定义语言:DDL-->用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
- 数据操作语言:DML-->用来对数据库中表的记录进行更新。关键字:insert,delete,update等
- 数据控制语言:DCL-->用来定义数据库的访问权限和安全级别,及创建用户
- 数据查询语言:DQL-->用来查询数据库中表的记录。关键字:select,from,where等
创建数据库操作
create database 数据库名;#默认字符集为安装数据库时制定的字符集
create database 数据库名 character set 字符集;
#显示数据库
show databases;
#删除数据库
drop database 数据库名;
#切换数据库(使用数据库)
use 数据库名;
#查看某个数据库的定义的信息
SHOW CREATE DATABASE 数据库名;
#查看正在使用的数据库
select database();
创建表 & 删除表
create table 表名(
字段名 数据类型 约束,
字段名 数据类型 约束,
字段名 数据类型 约束
);
# 字段名最后一个不能写逗号
drop table 表名;
#查看所有的表
show tables;
#查看表的详细信息
DESC 表名;
-
约束:限制这个列能写什么数据,不能写什么数据
- 主键约束:永远保持唯一性
- 非空约束:值不能为空
- 唯一约束:只能出现一次
- 外键约束:基础班没有
创建用户表
create table users (
uid int primary key auto_increment, #表名第一个字母+id
user_name varchar(50), #varchar需要制定字符长度
address varchar(50)
);
- 主键约束:primary key
- 保证数据的唯一性(非空、唯一),开发中主键是不具备任何含义的
- 自动增长:auto_increment(只适用MySQL)
- 数据库可以让主键列实现自动增长的功能
- 不能为空:not null
修改表结构(alter修改)
- 添加一个列add
alter table 表名 add 列名 类型(长度) 约束;
- 修改一个列modify
alter table 表名 modify 列名 类型(长度) 约束;
- 单独改列名
alter table 表名 change 旧列名 新列名 数据类型(长度) 约束;
- 删除列drop
alter table 表名 drop 列名;
- 改表名
rename table 表名 to 新表名;
- 改表字符集
alter table 表名 character set 字符集
sql代码保存
- sqlyog能够保存sql代码,后缀为.sql
表数据操作
- 添加数据
#字符串以单引号括起来
#除了数字之外都应该加上单引号,如日期,字符串
#主键可以不用添加值,让其自增长
insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
insert into 表名 values(全字段的值);
#写入两条
insert into 表名(字段1,字段2,字段3) values(值1,值2,值3),(值1,值2,值3);
- 更新数据
# 下面语句会将所有的数据都改了
update 表名 set 字段1=值1, 字段2=值2, 字段3=值3;
update 表名 set 字段1=值1, 字段2=值2, 字段3=值3 where 条件
- 提交写法
id=6等于
id<>6不等于
id<=6小于等于6
and 并且
or 或
not 非
id in (1,4,5,6) id在1,4,5,6里的任意一个
id not in (1,4,5,6) id不在1,4,5,6里的任意一个
-
删除数据
- drop用于删除数据库或者表,代表整个删除
- delete用于删除表中的数据,只删除局部
delete from 表名 where 条件
- 面试题:清空表中的数据
delete from 表名; truncate table 表名; delete一条一条删除,不清空auto_increment的记录 truncate直接将表删除,再重新建表,auto_incremeng重新开始
-
查询语句
- 查询语句在开发中使用最多
- 使用"*"在练习、学习过程中可以使用,在实际开发中,不推荐使用。原因,要查询的字段信息不明确,若字段数量很多,会导致查询速度很慢
select * from 表明 条件
select 字段1,字段2,字段3 from 表名 where 条件
#去掉重复记录
select dictance 字段1 from 表名;
#取别名
select 字段1 as 别名1, 字段2 as 别名2 from 表名 条件;
搜索出来,字段1显示为别名1,字段2显示为别名2,不常用
select zname, zmoney+1000 as zmoney from table1;
- where条件
1. > < <> >= <= =
2. between ... and ...(包含头包含尾)
3. in... 在..里面.如:in (1,2,3,4,5)
4. like通配符 %代表多个字符 _代表一个字符; 如:
first_name like 'a%';
first_name like 'a_';
5. is null:判断是否为空
6. and
7. or
8. not
- like模糊查询(非常强大),需要配合通配符 % 和 _
- % : 多个字符
- _ : 一个字符
select * from 表名 where 字段名 like '%关键字%'
- 查询数据库中某个字段为5个字符的数据
select * from 表名 where 字段名 like '_____';(5个下划线)
- 查询数据库中某个字段不为空的数据
select * from 表名 where 字段名 is not null;
select * from 表名 where not (字段名 is null);
- 排序查询--order by 字段名 [desc][asc]
- 默认升序
- 升序:[asc]
- 降序:[desc]
select * from 表名 where 条件 order by 字段名
聚合
- 之前我们做查询的时候都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向的,它是对一列的值进行计算,然后返回一个单一的值,另外聚合函数会忽略空值
- count:统计指定列不为null的记录条数
- sum:计算指定列的数值和,如果指定列不是数值类型,计算结果为0
- max:计算指定列的最大值,如果指定列为字符串类型,那么使用字符串排序运算
- min:计算指定列的最小值,那么使用字符串排序运算
- avg:计算制定列的平均值,如果指定列不是数值类型,计算结果为0
select count(*) from 表名;
select count(*) as 'counts' from 表名;
select count(列名) from 表名;
select sum(字段名) from 表名 where 条件;
分组查询:group by 被分组的列名
- 分组查询必须跟随聚合函数
- 被分组的列需要出现在select的查询字段中
- 先where过滤,在group by分组,如果对结果再进行筛选,通过having进行筛选
补充
SELECT * FROM zhangwu WHERE zname LIKE'%支出%' ORDER BY zmoney DESC
SELECT SUM(money) AS total,NAME FROM zhangwu WHERE
NAME LIKE '%支出%' GROUP BY NAME HAVING total > 200 ORDER BY total DESC;