mysql基础
- javaweb简介
- 数据库学习
一.javaWeb课程介绍
- 什么是javaWeb :java开发互联网项目 即 网站 broswer server
-
补充:
画图理解什么是互联网项目(先简单了解即可,后面实战再去体会)
二.数据库学习
- 数据库概念介绍
- MySQL数据库软件
- 安装
- 卸载
- 配置
- SQL–结构化查询语言
1.数据库基本概念
- 数据库的英文名:DataBase —简称 DB
- 什么是数据库?
- 用于存储和管理数据的仓库
- 数据库的特点:
- 持久化存储数据,其实就是一个文件系统
- 方便存储和管理
- 使用统一的方式操作数据
- 补充
思考:
1.数据有哪些? 数字 文字 图片 视频 音频
2.数据在电脑中以什么形式存在?数据附着在哪里?数据的载体是什么?
3. 数据在电脑上以文件的形式存在
数据的载体是文件
文件由数据构成
4.常用文件格式有哪些?-后缀名 txt docx xlsx pptx mp3 mp4 avi java
5.不常见的文件格式有哪些? exe dll ini md html xml frm
6.我们数据库存的是什么数据呢?在电脑上又以什么格式的文件存储呢?
带着这个疑问,我们继续下面课程的学习
2.数据库软件
-
数据库软件的概念:
- 数据库是一个概念,数据库软件是这个概念的具体实现
- 汽车是一个概念,生产汽车的公司有:宝马,大众 。其中 宝马X6是宝马公司的一款汽车
- 生产数据库的公司有:Oracle IBM 微软 ,其中Oracle,Mysql数据库软件都是Oracle公司的产品
-
常用的数据库软件:
- MYSQL
- Oracle
搞清楚三个概念名称:数据,数据库,数据库软件
数据:数字,文字,图片,音乐,视频...
数据库:数据仓库
数据库软件:数据库概念的实现,真实的数据仓库,可以存储和管理数据
2.1 MySQL的安装
-
两个步骤:安装和配置
-
如果不成功,需要卸载,再装
2.2 MySQL的卸载
- 找到mysql的安装目录
- 找到my.ini文件中的数据目录datadir=""
- 控制面板程序卸载中卸载mysql
- 删除 datadir中的mysql文件夹
2.3 MySQL服务的启动和关闭
- 找到服务
- 直接搜索服务
- win+R–>services.msc
- 找到MySQL服务,右键启动和停止
- 管理员权限打开cmd
- net stop mysql(服务名)
- net start mysql(服务名)
2.4 MySQL登录和退出
-
登录
- mysql -uroot -proot
- mysql -uroot -p 回车 密码隐藏输入
- mysql --host=127.0.0.1 --user=root --password=root
-
退出
- exit 或 quit
- exit 或 quit
2.5 MySQL目录结构
- MySQL安装目录
- my.ini
- MySQL数据目录 data文件夹 涉及到三个概念:
- 数据库:文件夹
- 表: frm文件
- 数据: frm文件中的数据
3. SQL学习
3.1 sql基本概念
- 什么是SQL?
- Structured Query Language:结构化查询语言
- 其实就是定义了操作所有关系型数据库的规则
- 方言:不同数据库软件产品对sql的支持不完全一样,有细微差异,我们称这些语法的差异为方言
- 例如 普通话和家乡话 普通话相当于sql,所有的关系型数据库通用。家乡话相当于方言,适用于不同的数据库软件
3.2 .SQL通用语法
- SQL语句以单行或多行书写,以分号结尾
- 空格和缩进增强可读性
- sql语句不区分大小写,关键字建议使用大写。
- 注释
- 单行注释:# 或 --空格
- 多行注释 /**/
随堂测试:
1.以下正确的是写法是:
A: mysql -uroot -proot
B: mysql -uroot -proot;
C: net Start Mysql;
D: net Start Mysql
A D
3.3 SQL分类
- 画图 分类
- ddl 数据定义语言:操作数据库和表结构 data define language
- dml 数据操作语言:操作数据记录–增删改
- dql数据查询语言:查询数据记录
- dcl数据控制语言:用户权限的控制–授权和撤销权限
随堂测试:
1.请说出下面选项对应的是sql的哪一类?
A: 向学员表中添加一条记录 dml
B: 修改数据库db1的字符集为utf8 ddl
C: 查询学员表中年龄大于20岁的学员信息 dql
D: 创建一个数据库连接新用户root1,登录密码root1,允许该用户创建库和表。 dcl
E: 向学员表中添加‘联系电话’这一列信息 dml
--熟练理解表结构:
1.表名,表的字符集
2.表的列名,列类型,列个数
3.3.1 .ddl学习
1. 操作数据库
-
C (Create):创建
-
创建数据库
create database 数据库名;
-
创建数据库前先判断是否存在
create database if not exists 数据库名;
-
创建数据库,判断是否存在,并指定字符集
create database if not exists 数据库名 character set 字符集
-
练习:创建数据库db1 ,判断是否存在,并指定字符集为utf8
create database if not exists db1 character set utf8;
随堂测试: 1.创建一个数据库db1,判断是否存在,并指定字符集为utf8
-
-
R (Retrieve):查询
-
查询所有数据库的名称
show databases;
-
查询某个数据库的字符集–其实是查询数据库的创建sql语句
show create database db1(数据库名);
随堂测试: 1.查询数据库db1的名称 2.查询数据库db1的字符集
-
-
U(Update):修改
-
修改数据库的字符集
alter database db1(数据库名) character set utf8(字符集);
随堂测试: 1.修改数据库db1的字符集为gbK,并查看修改后的字符集 1.修改数据库db1的字符集为utf8,并查看修改后的字符集
-
ALTER DATABASE db1 CHARACTER SET gbk;
SHOW CREATE DATABASE db1 ;
ALTER DATABASE db1 CHARACTER SET utf8;
SHOW CREATE DATABASE db1;
-
D(Delete):删除
-
删除数据库
drop database db1(数据库名);
-
删除数据库前先判断是否存在
drop database if exists db1(数据库名);
随堂测试: 1.删除数据库db1,并判断是否存在。 2.新建数据库db1,并判断是否存在,指定默认字符集为utf8.
-
ALTER DATABASE IF EXISTS db1;
CREATE DATABASE IF NOT EXISTS db1 CHARACTER SET utf8;
-
使用数据库
-
查询当前正在使用的数据库名称
select database();
-
注意 和 show databases;的细微区别
1. 语义不同,分别是:查看所有数据库名称,查看当前正在使用的数据库名称 2. 写法不同,database() 和 databases
-
使用数据库
use db1(数据库名);
-
2. ddl操作表
-
查询
-
查询某个数据库中所有的表名称
show tables;
-
查询表结构
desc 表名;
-
查询表的创建语句
show create table 表名;
-
-
创建
创建表
create table 表名( 列名1 数据类型1, 列名2 数据类型2, ...... 列名n 数据类型n ); 注意:最后一列,不需要加逗号
画图,理解什么是表
数据类型 1. int 整数类型 age int 2. double 小数类型 score double(5,2) 总长度5,小数点后的位数2,最大值999.99 3. date 日期,只包含年月日,yyyy-MM-dd 4. datetime 日期,包含年月日和时分秒 yyyy-MM-dd HH:mm:ss 5. timestamp 时间戳,包含年月日和时分秒 yyyy-MM-dd HH:mm:ss 如果该类型字段没有赋值,或赋值为null,则默认使用当前系统时间填充 6. varchar 字符串(没有超过长度,则多余的部分会回收,节约内存) 7. char字符串(长度固定) name varchar(20) 表示姓名最长20个字符的限制 注意: 1.字符串varchar要指定长度 2.varchar和日期类型的数据要加上引号(推荐使用单引号)
随堂测试: 请指出以下字段应该使用什么数据类型: A:学员的工资 int B:最后一次修改时间 datetime C:结婚日期 date D:性别 男 女 char(1) E:爱好 varchar(50) F:身高 double G:工龄 int
练习:创建一个学员表
create table student( id int, name varchar(10), age int, score double(4,1), birth date, insert_time timestamp );
随堂测试: 1.创建一个员工表employee,需要如下字段: 员工编号,姓名,性别,年龄,工龄,生日,工资 create table employee( id int, -- 员工编号 name varchar(20),-- 姓名 gender char(1),-- 性别 age int,-- 年龄 work_years int,-- 工龄 birth date,-- 生日 salary double(8,2) -- 工资 );
复制表
create table 表名 like 被复制的表名;
-
删除表
1. drop table 表名 2. drop table if exists 表名 删除这个表,并判断是否存在:
-
修改
1.修改表
-
修改表名
alter table 表名 rename to 新表名
-
修改表的字符集
-- 查看表的字符集,其实是查看表的创建语句 show create table 表名; -- 修改表的字符集 alter table 表名 character set 字符集;
-
2.修改列
-
添加一列
alter table 表名 add 列名 数据类型;
-
修改列类型
alter table 表名 modify 列名 数据类型;
-
修改列名和类型
alter table 表名 change 旧列名 新列名 数据类型;
-
删除列
alter table 表名 drop 列名;
随堂测试 1.修改员工表employee名为emp 2.修改表的字符集为gbk,查看表的字符集 3.修改表的字符集为utf8,并查看表的字符集 4.添加'部门'列 5.修改'性别'列类型为varchar(6) 6.修改gender为sex,类型为varchar(6) 7.删除'部门'列
-- 1.修改员工表employee名为emp
ALTER TABLE employee RENAME TO emp;
-- 2.修改表的字符集为gbk,查看表的字符集
ALTER TABLE student CHARACTER SET gbk;
SHOW CREATE TABLE student;
-- 3.修改表的字符集为utf8,并查看表的字符集
ALTER TABLE student CHARACTER SET utf8;
SHOW CREATE TABLE student;
-- 4.添加'部门'列
ALTER TABLE student ADD 部门 VARCHAR(20);
-- 5.修改'性别'列类型为varchar(6)
ALTER TABLE student ADD 性别 CHAR(1);
ALTER TABLE student MODIFY 性别 VARCHAR(6);
-- 6.修改gender为sex,类型为varchar(6)
ALTER TABLE student ADD gender CHAR(1);
ALTER TABLE student CHANGE gender sex VARCHAR(6);
-- 7.删除'部门'列
ALTER TABLE student DROP 部门;
综合练习:
1.查看当前的服务器一共有多少个数据库 show databases;
2.查看当前正在使用的数据库 select database();
3.选定其中的一个数据库,进行使用 use db3;
4.查看当前库中有多少个表 show tables;
5.创建一个表
create table employee(
id int, -- 员工编号
name varchar(20),-- 姓名
gender char(1),-- 性别
age int,-- 年龄
work_years int,-- 工龄
birth date,-- 生日
salary double(8,2) -- 工资
);
6.修改表:
1.修改员工表employee名为emp
2.修改表的字符集为gbk,查看表的字符集
3.修改表的字符集为utf8,并查看表的字符集
4.添加'部门'列
5.修改'性别'列类型为varchar(6)
6.修改gender为sex,类型为varchar(6)
7.删除'部门'列
- 图形化界面工具 SQLyog
- 演示安装和连接,写sql语句并执行
- 调节字体大小
3.3.2 dml学习
- 添加数据
-
添加全部字段
insert into 表名 (列名1,列名2,...列名n) values (值1,值2,...值n);
注意: 1.值要和列名要一一一对应,有几个列就要有几个值 2.添加全部字段数据时,列名部分可以省略,即: insert into 表名 values (值1,值2,...值n);
-
添加部分字段
insert into 表名 (列名1,列名2,列名3,...) values (值1,值2,值3,...);
注意: 1.值必须和列名对应 2.列名可以不是连续的 3.列名可以不按照表结构中的顺序,但通常建议按照先后顺序 4.添加部分字段时,列名不能省略 5.没有添加数据的字段默认使用null填充
-
批量添加数据
随堂测试: 1.向员工表中新增3名员工信息: 2 张三 25岁,男 3 李四 26岁,男 4 王五 27岁,女
-- 分析:属于添加部分字段 insert into emp (id,name,age,sex) values (2,'张三',3,'男'),(3,'李四',26,'男'),(4,'王五',27,'女') -- 批量新增语法 insert into 表名 (字段1,字段2,...) values (值1,值2,...),(值1,值2,...),(值1,值2,...)
-
注意:
添加数据值时,除了数字类型,其它类型需要使用引号(单双引号都可以),建议使用单引号。
- 删除数据
-
删除满足条件的数据
delete from 表名 [where 条件];
注意: 1.如果不加条件,则删除表中所有的数据 eg: delete from emp1; delete from emp1 where true; delete from emp1 where 1=1;
-
删除表中的所有数据
truncate table 表名;
两种删除所有数据的方法: 1.truncate方式,先删除整个表,再创建一张同样结构的表,执行效率高,推荐使用。 2.delete from 表名 ,不带条件,有多少条记录就会执行多少次删除操作,效率不高,不推荐。
随堂测试: 1.删除员工表中年龄大于25岁的员工 2.删除所有员工数据(两种方式)
- 修改数据
-
语法
update 表名 set 列名1=值1, 列名2=值2, ... [where 条件];
注意: 1.如果不带条件,则会修改所有的数据
随堂测试: 1.曹操的年龄加1岁,工资涨500 UPDATE emp SET age=age+1,salary =salary+500 WHERE name='曹操'; 2.修改所有员工的部门三国 update emp set dept='三国';
2.3.3 dql学习
-
完整的查询语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
1. 基础查询
-
多个字段查询
select 字段名1,字段名2... from 表名;
注意: 如果查询所有字段,则可以使用*来替代字段列表。
-
去除重复
关键字 distinct 直接放在select后面
-
四则运算
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算) ifnull(表达式1,表达式2):null参与的运算,计算结果都为null 表达式1:哪个字段需要判断是否为null 如果该字段为null后的替换值。
案例:计算学员的英语和数学成绩和
select math,english,ifnull(math,0)+ifnull(english,0) from stu;
-
起别名
字段名 后写关键字 as 或省略as 直接用空格
随堂测试:
1.查询员工表中所有员工的姓名和工资
2.查询所有员工的部门,并去重
3.员工表添加'津贴'这一列
4.给每个员工加上600的津贴
5.查询员工的姓名,总工资(工资和津贴之和)
-- 随堂测试答案:
-- 3.员工表添加'津贴'这一列
ALTER TABLE emp ADD bonus DOUBLE(6,2);
-- 4.给每个员工加上600的津贴
UPDATE emp SET bonus =600;
-- 5.查询员工的姓名,总工资(工资和津贴之和)
SELECT NAME 姓名,(IFNULL(salary,0)+bonus) 总工资 FROM emp;
2. 条件查询
- where和 运算符 构成查询条件
> 、< 、<= 、>= 、= 、<>
BETWEEN...AND
IN( 集合)
LIKE:模糊查询
占位符:
_:单个任意字符
%:多个任意字符
IS NULL
and 或 &&
or 或 ||
not 或 !
- 案例
-- 创建表
CREATE TABLE student (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
-- 填充数据
INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);
-- 查询年龄大于20岁
SELECT * FROM student WHERE age > 20;
SELECT * FROM student WHERE age >= 20;
-- 查询年龄等于20岁
SELECT * FROM student WHERE age = 20;
-- 查询年龄不等于20岁
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
-- 查询年龄大于等于20 小于等于30
SELECT * FROM student WHERE age >= 20 && age <=30;
SELECT * FROM student WHERE age >= 20 AND age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);
-- 查询英语成绩为null
SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=)
SELECT * FROM student WHERE english IS NULL;
-- 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
SELECT * FROM student WHERE NOT english IS NULL;
随堂测试:
1.查询工资在1000-3000之间的员工 (3种方式)
2.查询没有工资的员工
3. 模糊查询
-
使用关键字 like
通配符: _ 匹配一个字符 % 匹配0-n个字符
-
案例
-- 查询姓马的有哪些? like SELECT * FROM student WHERE NAME LIKE '马%'; -- 查询姓名第二个字是化的人 SELECT * FROM student WHERE NAME LIKE "_化%"; -- 查询姓名是3个字的人 SELECT * FROM student WHERE NAME LIKE '___'; -- 查询姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%';
随堂测试: 1.员工表中新增多名员工: 小马 ,野马,汗血宝马,马云,马化腾,马如风,马到成功 2.查询员工表中姓名为两个字的员工 like '__'; 3.查询员工表中以'马'开头的,姓名为两个字的员工 like '马_'; 4.查询员工表中以'马'结尾的员工 like '%马'; 5.查询员工表中姓名包含'马'的员工 like '%马%';