目录
1.为什么选择MySQL数据库
1、免费
2、功能强大
数据库安装网址:
链接
2.SQL 语句分类
- Data Definition Language (DDL 数据定义语⾔), 如:建库,建表
- Data Manipulation Language(DML 数据操纵语⾔),如:对表中的记录操作增删改
- Data Query Language(DQL 数据查询语⾔),如:对表中的查询操作
- Data Control Language(DCL 数据控制语⾔),如:对⽤户权限的设置
2.1 DDL操作数据库
创建数据库
1、直接创建
create database 数据库名;
2、先判断,再创建数据库
create datebase if not exists 数据库名;
3、指定字符集创建
create datebase 数据库名 character set 字符集;
查看数据库
– 查看所有数据库
show datebase
– 查看某个数据的信息
show creat datebase db3;
删datebase
drop datebase 数据库名;
use 数据库名;-- 转换数据库名
⾯试题
在 MySQL 数据库软件中,有test1、test2、test3三个数据库,登录数据库之后,输⼊语句:
select database test2; 运⾏结果是什么?
这是⼀条错误的语句,如果要选中⼀个数据库,应⽤使⽤:use test2;
DDL操作表
create table 表名(
字段名1 字段类型1,
字段名 2 字段类型 2
);
具体操作:
-- 创建student表包含id,name,birthday字段
create table student (
id int, -- 整数
name varchar(20), -- 字符串
birthday date -- ⽣⽇,最后没有逗号
);
复制一个相同的表
删除表
修改表结构
DML操作数据
对表中的记录进行增删改查
插入记录
insert into 表名 字段名 values 字段值;
乱码问题
蠕⾍复制
更新表记录
UPDATE 表名 SET 列名=值 [WHERE 条件表达式]
# UPDATE: 需要更新的表名
# SET: 修改的列值
# WHERE: 符合条件的记录才更新
# 你可以同时更新⼀个或多个字段。
# 你可以在 WHERE ⼦句中指定任何条件。
不带条件修改数据:
update 表名 set 字段号 = 值 ;–修改所有的行
带条件修改数据:
update 表名 set 字段号=值 where 字段名=值;
具体操作:
-- 不带条件修改数据,将所有的性别改成⼥
update student set sex = '⼥';
-- 带条件修改数据,将 id 号为 2 的学⽣性别改成男
update student set sex='男' where id=2;
-- ⼀次修改多个列,把 id 为 3 的学⽣,年龄改成 26 岁,address 改成北京
update student set age=26, address='北京' where id=3;
注:如果update和delete不能执⾏,需要修改数据库安全模式:
SET SQL_SAFE_UPDATES = 0;
删除表记录
DELETE FROM 表名 [WHERE 条件表达式]
# 如果没有指定 WHERE ⼦句,MySQL 表中的所有记录将被删除。
# 你可以在 WHERE ⼦句中指定任何条件
DQL查询表中的数据
SELECT 列名 FROM 表名 [WHERE 条件表达式]
# 1) SELECT 命令可以读取⼀⾏或者多⾏记录。
# 2) 你可以使⽤星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据
# 3) 你可以使⽤ WHERE 语句来包含任何条件。
简单查询
-- 使用*表示所有列
select * from 表名;
-- 查询指定列的数据, 多个列之间以逗号分隔
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
-- 查询 student 表中的 name 和 age 列
select name,age from student;
指定列的别名查询
语法:
-- 对列指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名;
-- 对列和表同时指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;
实操:
– 使用别名
select name as 姓名,age as 年龄 from Student as st;
表使⽤别名的原因:⽤于多表查询操作。
清除重复值
在这里插入图片描述
实操:
-- 查询 math 分数⼤于 80 分的学⽣
select * from student where math > 80;
-- 查询 english 分数⼩于或等于 80 分的学⽣
select * from student where english <= 80;
-- 查询 age 等于 20 岁的学⽣
select * from student where age = 20;
-- 查询 age 不等于 20 岁的学⽣,注:不等于有两种写法
select * from student where age <> 20;
select * from student where age != 20;
实操:
-- 查询 age ⼤于 35 且性别为男的学⽣(两个条件同时满⾜)
select * from student where age > 35 and sex = '男';
-- 查询 age ⼤于 35 或性别为男的学⽣(两个条件其中⼀个满⾜)
select * from student where age > 35 or sex = '男';
-- 查询id是1或3或5的学⽣
select * from student where id = 1 or id = 3 or id = 5;
in关键字
SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2…);
in ⾥⾯的每个数据都会作为⼀次条件,只要满⾜条件的就会显示
实操:
-- 查询id是1或3或5的学⽣
select * from student where id in(1, 3, 5);
-- 查询id不是1或3或5的学⽣
select * from student where id not in(1, 3, 5);
范围查询
-- 查询姓⻢的学⽣
select * from student where name like '⻢%';
select * from student where name like '⻢';
-- 查询姓名中包含'德'字的学⽣
select * from student where name like '%德%';
-- 查询姓⻢,且姓名有两个字的学⽣
select * from student where name like '⻢_';
总的具体实操:
/*存数据:
存文件 - txt excel
数据库 - 文件(特定格式),只有数据库软件可以读取
数据库 - 服务器(软件),可以由客户端访问
MariaDB
关系型数据库 - 非关系型数据库 NOSql - Not Only SQL
SQL语句 99标准 - 官方语言(统一) + 方言(个性)
DB DataBase
此电脑 -> 右键 -> 管理 -> 服务
C:/Programe Files/MySQL/MySQL Server/bin
环境变量:CMD 可以执行的命令的所有目录
ipconfig ping dir cd net
执行命令[工具、文件]:
1.在当前文件夹搜索
2.在环境变量定义的所有目录中搜索
图形化工具:
Workbench - mysql自带
SqlDeveloper - oracle自带
Navicat12
Sqlyog
TCP/IP协议 自行研究
ip:port 套接字,确定是一个服务器软件
ip:确定主机
port:确定服务器软件
域名:套接字的映射
DNS:IP集合,中转站
127.0.0.1 localhost
默认数据库:(数据分区,仓库)
1.sys - 系统相关配置
2.mysql - mysql系统相关内容,例如用户\权限
*/
/* 语法:
大小写不敏感
每一句sql最后一定要以 ; 结尾
命名: 表名/字段名 不能使用关键字 order user
字符串: 引号 '' ""
*/
/* SQL分类:
1.DDL: Data Defined Language
2.DML: Data Manipulation Language
3.DQL: Query
4.DCL: Control
*/
-- DDL
-- 查看当前数据库的字符集 charset utf8 latain-改字符集,需要修改配置文件 my.cnf/my.ini
show variables like '%char%';
-- 查看当前所有数据库
Show databases;
-- 创建数据库
-- create database java2106;
-- mysql独特写法
create database if not exists java2106;
-- 使用数据库 / 切换数据库(要操作哪个数据库)
use java2106;
use test;
-- 删除数据库
-- drop database test;
drop database if exists test;
-- 改变数据库字符集
alter DATABASE java2106 default charset=utf8;
-- select 全局函数()
select now();
/*操作table, 前提必须切换数据库 use xxx;
1.创建
2.删除
3.修改
数据类型:
1.字符/字符串: varchar(10)-最大10个字符 char(10)-固定10个字符
2.整数: int(2)[mysql] number(2)[oracle]
3.小数: double(3,1)-[mysql]最大值99.9 number(3,1)[oracle]
4.时间: 年月日date 时分秒timestamp 年月日时分秒datetime
*/
-- 1.创建表 - 确定字段名(列), 确定字段类型
-- 表名全称: java2106.user
create table if not exists `user` (
name varchar(20) comment '姓名', -- varchar(20)指的是长度最大20, comment指代字段说明
age int(2),
gender char(1),
score double(3,1) comment '个人综合评分',
birthday datetime
);
-- 2.查看表结构
desc user;
-- 3.查看所有的表
show tables;
-- 4.显示创建user表的sql语句
show create table user;
-- 5.创建一张和user相同的表
create table user1 like user;
desc user;
-- 6.修改表 alter
-- 6.1 添加新的字段 add
alter table user add (no int(2));
-- 6.2 修改原先字段的类型 modify
alter table user modify name varchar(10);
-- 6.3 删除字段 drop
alter table user drop no;
-- 6.4 修改字段名 change
alter table user change gender sex char(1);
-- 7.重命名表
rename table user to user2;
-- 8.删除表
drop table user2;
-- DML 操作
-- 1.向表中添加数据
insert into user1 values('张三', 23, '男', 78.9, '2021-07-13 13:23:45'); -- 值的顺序和字段顺序要一致
insert into user1 values('张三', 23, '男', 78.9, now());
insert into user1 values('张三', null, '男', 78.9, null);
-- values值的个数和顺序必须跟前面括号中的字段顺序一致
insert into user1(name, score, gender) values('张三', 78.9, '男');
-- mysql可以一次性添加多个记录
insert into user1 values('lucy', null, '男', 78.9, null),
('tom', 18, '男', 78.9, null),
('jack', 23, '男', 78.9, null),
('rose', 45, '女', 78.9, null),
('david', 32, '男', 78.9, null);
-- 2.修改数据
update user1 set name = 'jerry'; -- 修改所有数据
update user1 set name = 'jerry' where name='张三'; -- name=张三的才要修改(条件)
update user1 set age = 19, birthday=now() where name='lucy';
-- 3.删除数据
delete from user1 ; -- 删除全部记录
delete from user1 where name='jerry';
truncate user1; -- 删除全部
SET SQL_SAFE_UPDATES = 0;
-- DQL: Data Query Language
-- 单表查询 select
-- 查询全部
select * from emp; -- * 在执行时会解析成字段名,消耗资源
-- 查询指定字段
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;
select empno,ename from emp;
-- 查询的字段可以直接计算, 字段起别名[as]
select ename, sal*12 as salary from emp;
select ename, sal*12 salary from emp;
-- 查询的字段可以使用函数来操作
-- 函数: 数字相关, 字符串相关, 时间相关
select ename, date_format(hiredate, '%Y年%m月%d日') from emp;
SELECT DATE_FORMAT(now(), '%Y年%m月%d日');
-- 条件查询: 筛选 where
-- 查询薪资范围 > < >= <= = !=[<>]
select ename, sal from emp
where sal > 2000;
select ename, sal from emp
where sal <> 3000;
-- 条件 并且:and 或者:or
select ename, sal from emp where sal > 2000 and sal < 3000;
select ename, sal from emp where sal < 2000 or sal > 3000;
-- sal>=2000 and sal<=3000
select ename, sal from emp where sal between 2000 and 3000;
-- null 表示无穷大或者无穷小, 不能判断范围, 也不能计算
-- is null - 是null值 is not null - 不是null值
select ename from emp where mgr is null;
-- 在部门20的人
select ename, deptno from emp where deptno = 20;
-- 不在部门20和30的人
select ename, deptno from emp where deptno = 20 or deptno=30;
select ename, deptno from emp where deptno not in (20,30);
-- 名字长度>4的人 - 函数结果可以作为条件
select ename from emp where length(ename) > 5;
-- 查询入职时间是当年7月份以后的员工
-- 名字是 SMITH 的人
select ename from emp where ename = 'SMITH';
-- 首字母是 S 的人 like-模糊查询
-- %(任意字符任意长度) _(一个任意字符)
select ename from emp where ename like 'S%';
select ename from emp where ename like '_A%';
select ename from emp where ename like '%A%';
-- ESCAPE '*' 转义
SELECT ENAME FROM EMP WHERE ENAME LIKE 'A*_SMITH' ESCAPE '*';
-- sal > 2000,3000,4000中的任意一个值
select ename, sal from emp where sal > any(2000,3000,4000);
-- sal > 2000,3000,4000中的每一个值
select ename, sal from emp where sal > every(2000,3000,4000);