MySQL数据库基础
一、数据库简介
(一)数据库相关概念
什么数据库?
数据库就是存储数据的仓库, 其本质就是一个文件系统, 数据时按照特定的格式将数据存储起来的.(程序员不需要关注存储格式)
为什么要使用数据库?
原始IO流:
使用数据库:
与数据库相关的概念:
(二)数据库工作流程
数据库分为客户端和服务器端:
客户端:
- 搜集数据
- 数据展示
服务器端:
处理数据 ==> 结果集(会将结果集返回给客户端)
(三)数据库分类
数据库按照存储结构的不同分为:
- 关系型数据库: 以二维表格的形式存储数据, 并且表与表之间存在一定的关系;
比如: MySQL, Oracle, SQLServer, DB2
- 非关系型数据库: 以文档或键值对的形式进行存储数据, 结构简单, 数据之间没有任何关系, 有利于扩展; 比如: redis MongoDB
二、MySQL数据库介绍
(一)基本介绍
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),通常最常用的结构化查询语言(SQL语言)来操作或者管理数据库;
MySQL的优势:
- 开源免费
- 体积小, 安装方便, 简单易学
- 支持多种操作系统, 支持多种开发语言
(二)MySQL数据库安装
数据库安装(详见安装文档)
(三)MySQL数据库卸载
数据库卸载(详见安装文档)
(四)MySQL数据库登录
MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录。
命令 |
说明 |
mysql -u用户名 -p密码 |
使用指定用户名和密码登录当前计算机中的MySQL数据库。 Mysql -uroot -proot |
mysql -h主机名 -u用户名 -p密码
|
使用指定用户名和密码登录 网络上指定主机中 的MySQL数据库。 例如:mysql -h127.0.0.1 -uroot -proot |
(五)安装视图工具SQLyog
使用系统的DOS窗口操作数据库不太方便,由Webyog公司出品的SQLyog 是一个快速而简洁的图形化管理MySQL数据库的工具,它能够在任何地点有效地管理你的数据库。
下载安装后双击如下小海豚图标,通过参数配置完成与MySQL服务的连接。
三、SQL语言
(一)SQL语言简介
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
Sql语言: 说白了就是对数据库中数据进行增删改查;
(二)SQL语句分类
分类:
1、数据查询语言(DQL:Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
2、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。
3、事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。
4、数据控制语言(DCL):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
5、数据定义语言(DDL):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。
6、指针控制语言(CCL):它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
(三)SQL语句通用语法
l SQL语句可以单行或多行书写,以分号结尾
l 可使用空格和缩进来增强语句的可读性
l MySQL数据库的SQL语句不区分大小写,关键字建议使用大写,而数据库名,数据表名,列名建议使用小写
例如:SELECT * FROM user。
l 同样可以使用/**/的方式完成多行注释 单行注释 -- 或者 #
l MySQL中的常用数据类型如下
整数类型:tinyint、int
浮点类型:float 、double
布尔类型:(MySQL是没有booblean类型的)
在MYSQL中一般布尔类型都用int去代替了,1代表true,0 代表false
字符串类型:
varchar:可变长度类型,无论创建表时指定多大长度,存储数据的时候会按照数据的实际长度进行空间占用,设置的最大值目的就是为设定最大范围。
char:固定长度类型,当存储数据的长度小于创建表时指定的长度时,则用空格填充,而不会自动调整。
日期类型:
Date 年月日
Time 时分秒
Datetime(标准日期类型) 年月日时分秒
Timestamp(时间戳)年月日时分秒
Datetime Timestamp区别:
Datetime :最大值是9999年12月31 23:59:59、默认值null
Timestamp :最大值是2037年12月31 23:59:59、默认值当前系统时间
(四)DDL数据定义语言
DDL(Data Definition Language)数据定义语言主要是针对数据库或表做创建、修改和删除操作的。
主要涉及的关键字:
Create:创建
Alter:修改
Drop:删除
Show: 查询
1、DDL之数据库的操作
1. 创建数据库
命令 |
说明 |
create database 数据库名; |
在当前服务器下创建指定名称的数据库。 配置数据库时我们指定了utf8,那么数据库默认字符集就是utf8 |
create database 数据库名 character set 字符集; |
在当前服务器下创建指定名称的数据库,并且指定数据库的字符集 |
代码准备:
#创建数据库day01_1 数据库中数据的编码采用的是安装数据库时指定的默认编码 utf8
#创建数据库day01_2 并指定数据库中数据的编码为gbk
2. 查看数据库
命令 |
说明 |
use 数据库名; |
切换数据库。 |
select database(); |
查看当前正在操作使用的数据库名称。 |
show databases; |
查看MySQL服务器中有哪些数据库 |
show create database 数据库名; |
查看某个数据库的定义的信息 |
代码准备:
#切换到day01_1数据库
#查看当前正在操作哪个数据库
#查看服务器下的所有数据库
#查看day01_1数据库的定义信息
3. 修改数据库
命令 |
说明 |
alter database 数据库名 character set 字符集; |
修改数据库编码集 |
代码准备:
#修改day01_2数据库编码为utf8;
4. 删除数据库
命令 |
说明 |
drop database 数据库名称; |
从MySQL服务器中永久删除某个数据库 |
代码准备:
#删除day01_2数据库
2、DDL之数据表的操作
通常情况下,一个MySQL服务器上有多个数据库,一个数据库里包含多张数据表,一张数据表又由多列(字段)组成,而一张表中可以存储多条记录,也就是我们所说的行。
1. 创建数据表
语法格式:
Create table 表名(
列名1 数据类型(长度),
列名2 数据类型(长度),
...
)
代码准备
/*
1、创建分类表
分类表名称:category
分类表中有:分类ID和分类名称两个字段
分类ID:cid,为整型,
分类名称:cname,为字符串类型,最大允许填写100长度的字符串
*/
/*
2、创建测试表
测试表名称:test1
测试表中有:测试ID和测试时间两个字段
测试ID:tid,为整型
测试时间:tdate,为年月日的日期类型
*/
/*
3、创建学生表
学生表名称:student
学生表中有:学号, 姓名, 年龄, 性别, 邮箱五个字段
学号:sid为整型且最大长度为6
姓名:sname为字符串类型,最大允许填写30长度的字符串
年龄: sage为整型且最大长度为3
性别: ssex为字符串类型,最大允许填写2长度的字符串
邮箱: semail为字符串类型,最大允许填写50长度的字符串
*/
2. 查看表
命令 |
说明 |
show tables; |
查看当前数据库中的所有表名; |
desc 表名; |
查看某张数据表的表结构 |
代码准备
#查看当前数据库中有哪些表
#查看category表的表结构
3. 删除表
命令 |
说明 |
drop table 表名; |
从当前数据库中永久删除某张表 |
代码准备
#删除测试表test1
4. 修改表结构格式:(了解)
命令 |
说明 |
alter table 表名 关键字…. |
修改某张表的某些字段 |
一般修改表结构,最多进行字段的添加操作
l alter table 表名 add 列名 类型(长度) [约束];
作用:修改表添加列.
例如:
#1,为分类表添加一个新的字段为 分类描述 cdesc varchar(20)
ALTER TABLE category ADD cdesc VARCHAR(20);
l alter table 表名 modify 列名 类型(长度) 约束;
作用:修改表修改列的类型长度及约束.
例如:
#2, 为分类表的描述字段进行修改,类型varchar(50)
ALTER TABLE category MODIFY cdesc VARCHAR(50);
l alter table 表名 change 旧列名 新列名 类型(长度) 约束;
作用:修改表修改列名.
例如:
#3, 为分类表的分类名称字段进行更换 更换为 description varchar(30)
ALTER TABLE category CHANGE cdesc description VARCHAR(30);
l alter table 表名 drop 列名;
作用:修改表删除列.
例如:
#4, 删除分类表中description这列
ALTER TABLE category DROP description;
l rename table 表名 to 新表名;
作用:修改表名
例如:
#5, 为分类表category 改名成 category2
RENAME TABLE category TO category2;
l alter table 表名 character set 字符集(了解);
作用:修改表的字符集
例如:
#6, 为分类表 category 的编码表进行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
(五)DML数据操作语言
DML(Data Manipulation Language)数据操作语言,主要是针对数据表做增、删、改操作。
涉及的关键字:
新增: insert
修改: update
删除: delete
下面以学生表为例给大家讲解这三种操作。
1、insert添加操作
添加操作分为单行添加和多行添加:
- 单行添加
语法格式:
Insert into 表名(字段名1, 字段名2,...) values(值1, 值2,...)
#向学生表中添加一条数据
变形: 可以省略列名, 但是要求值的个数和顺序必须与表中的字段保持一致;
写法格式:
Insert into 表名 values(值1, 值2,...)
此方法不推荐使用
注意:
- 插入值时与值的个数, 顺序, 字段类型要保持一致
- 插入值的长度要小于等于字段设置的类型长度
- 多行添加
写法格式:
Insert into 表名(字段名1, 字段名2,...) values(值1, 值2,...),(值1, 值2,...),(值1, 值2,...),(值1, 值2,...),......;
#向学生表中添加多条数据
注意:
使用value与values都是可以正常添加数据的, 这两个也是可以混合使用的;
有区别:(效率不同)
- 插入单行时, 使用values较快
- 插入多行时, 使用value较快
2、update修改操作
语法格式:
Update 表名 set 字段名1=新值1, 字段名2=新值2 where [条件];
代码准备:
#修改单个列的数据
#同时修改多列数据
#无条件修改表中所有行的该列数据都会变
3、delete删除操作
语法格式:
第一种方式:
Delete from 表名;(将表中的数据一行一行的删除, 清空了表中数据)
Delete from 表名 where [条件];(根据条件删除某一条数据)
第二种方式:
Truncate table 表名;(将表中的数据清空)
代码准备:
#删除表中全部数据
#将表中sid=7这条数据删除
#清空表中数据
Delete与truncate区别:
- Delete 后边可以跟where条件, 而truncate后不能跟where条件
- Delete删除是一行一行从表中删除数据, 效率低,而truncate是删除整个表的结构, 又重新创建了一张一模一样的表结构, 效率高;
(六)DQL数据查询语言
DQL(Data Query Language)数据查询语言,主要是针对数据表做查询操作。查询操作只是根据用户需求从原始数据表中筛选出符合查询条件的结果集,对原始表的数据没有任何影响。
1. 准备工作:
#创建商品表:
CREATE TABLE product(
pid INT PRIMARY KEY,#主键ID
pname VARCHAR(20),#商品名称
price DOUBLE,#商品价格
category_name VARCHAR(32)#商品分类名称
);
INSERT INTO product(pid,pname,price,category_name) VALUES(1,'联想电脑',5000,'电脑办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(2,'海尔电脑',3000,'电脑办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(3,'雷神电脑',5000,'电脑办公');
INSERT INTO product(pid,pname,price,category_name) VALUES(4,'JACK JONES',800,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(5,'真维斯',200,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(6,'花花公子',440,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(7,'劲霸',2000,'服装');
INSERT INTO product(pid,pname,price,category_name) VALUES(8,'香奈儿',800,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(9,'相宜本草',200,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(10,'面霸',5,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(11,'雪碧',56,'饮料饮品');
INSERT INTO product(pid,pname,price,category_name) VALUES(12,'香飘飘奶茶',1,'饮料饮品');
INSERT INTO product(pid,pname,price,category_name) VALUES(13,'iPhone9',8000,NULL);
1. 语法格式:
#查询并展示表中所有记录
写法格式:select * from 表名;
#查询并展示表中符合要求的记录
写法格式:select * from 表名 where [条件];
代码准备:
#查询product表中所有记录
#查询product表中所有记录,仅显示pid和pname字段
#查询product表中所有的电脑办公记录
2. 简单查询
l 别名查询.使用的关键字是as.
表别名:
列别名:
l 去掉重复值(distinct).
l 查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
3. 条件查询-where
比较运算符 |
> < <= >= = <>或者!= |
大于、小于、大于(小于)等于、不等于 |
BETWEEN ...AND... |
显示在某一区间的值 Price between 200 and 1000; Price >= 200 and price<=1000; |
|
IN(set) |
显示在in列表中的值 比如: price in(100, 200, 300) 或者 price=100 or price=200 or price=300 |
|
LIKE ‘张pattern’ |
模糊查询,Like语句中, % 代表零个或多个任意字符 _ 代表一个字符 Pname Like ‘%张%’ ‘_想%’ |
|
IS NULL |
判断是否为空 is not null 不为空 |
|
逻辑运算符 |
and |
多个条件同时成立 && |
or |
多个条件任一成立 || |
|
not |
不成立,取反。 ! |
代码准备:
#查询商品名称为“花花公子”的商品所有信息:
#查询价格为800商品
#查询价格不是800的所有商品
#查询商品价格大于60元的所有商品信息
#查询商品价格在200到1000之间所有商品
#查询商品价格是200或800或者2000的所有商品
#查询含有'霸'字的所有商品
#查询以'香'开头的所有商品
#查询第二个字为'想'的所有商品
#商品没有分类的商品
#查询有分类的商品
4. 分页查询
应用场景:
分页:
将数据进行分割, 分割到不同页面进行展示;
分页的关键字: limit
写法格式:
Select * from 表名 limit 参数;(只有一个参数代表只显示查询的条数)
Select * from 表名 limit 参数1, 参数2;(两个参数)
参数1: 起始索引(从0开始)
参数2: 每页显示的条数(展示的商品个数)
代码准备:
#查询表中前三条记录
#分页查询:每页显示3条记录,查询第1页数据
#第二页数据
#第三页数据
5. 排序
应用场景:
语法格式:(关键字:order by)
Select * from 表名 where 条件 order by 字段名 asc/desc;(默认升序)
排序有两种:
Asc: 升序
Desc: 降序
#1.使用价格排序(降序)
#2.在价格排序(降序)的基础上,以主键排序(降序)
#即若价格相同,相同价格的数据以pid降序排序
#3.显示商品的价格(去重复),并排序(降序)