08_MySql基础

MySql基础(一)

数据库 & 数据库管理系统
区别
  • 数据库:就是存储数据的仓库,是一个文件系统
  • 数据库管理系统:一个管理数据库的软件
  • 相当于图书馆和图书管理员
常用的数据库管理系统
  • MYSQL:开源免费小型数据库,后面被Oracle公司收购,6.0开始要收费,我们用5.5的版本
  • Oracle:收费的大型数据库
  • DB2:IBM公司研发的收费数据库,多用于银行
  • SQLServer:微软研发的数据库
  • SQLite:移动设备用的嵌入式小型数据库
数据库 & 数据库管理系统 关系
  • 数据库本身是一个服务器,需要网络连接访问
  • 通过数据库管理系统操作数据库,用户不直接操作数据库
  • 数据库服务器面对里面的众多数据库,在众多数据库中有相应的表,数据就存在表中
  • 相当于图书馆--分类--书架--书本
数据库表
  • 数据库表相当于java中的类
  • 表名--类名
  • 表中字段--类属性
  • 记录--对象
表数据
  • 表的字段规定的数据类型:整数,小数,字符串....
MySql数据库
安装MySql
  • 查看doc文档,根据安装步骤安装(j2ee软件包)
  • 安装时需要修改两个路径:
    1. 数据库服务器的安装路径(卸载的时候需要用到这个路径)
    2. 数据库存放路径
  • 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常用数据类型:
    1. int:整型
    2. double:浮点型
    3. varchar:字符型
    4. 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;

你可能感兴趣的:(08_MySql基础)