目录
MySQL基础&SQL入门
1. 数据库的基本概念
a. 数据库(DataBase) 就是存储和管理数据的仓库
b. 其本质是一个文件系统, 还是以文件的方式,将数据保存在电脑上
2. MySQL的安装及配置
3. SQL(重点)
3.1 SQL的概念
- 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库 查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
- 是所有关系型数据库的统一查询规范,不同的关系型数据库都支持SQL
- 所有的关系型数据库都可以使用SQL
- 不同数据库之间的SQL 有一些区别 方言
3.2 SQL通用语法
3.3 SQL的分类
3.4 DDL操作, 数据库
/*
对数据库操作的分类包含
CRUD
C create 创建
R retrieve 查询
U update 修改
D delete 删除
使用数据库
*/
3.4.1 创建&查询
/*
创建数据库 方式1: 指定名称的数据库
latin1 编码,很可能出现乱码
*/
CREATE DATABASE db1;
/*
指定字符集的方式创建数据库
一般都指定为 utf8,与Java中的编码保持一致
*/
CREATE DATABASE db1_1 CHARACTER SET utf8;
/*
查看数据库
*/
-- 切换数据库语句
USE db1_1;
-- 查询当前正在使用的数据库
SELECT DATABASE();
-- 查询Mysql中有哪些数据库
SHOW DATABASES;
3.4.2 修改&删除
-- 修改数据库的字符集
-- 语法格式 alter database 数据库名 character set utf8;
ALTER DATABASE db1 CHARACTER SET utf8;
-- 删除数据库
-- 语法格式 drop database 数据库名称
-- 将数据库从Mysql中永久删除
DROP DATABASE db1_1; -- 慎用
3.5 DDL 操作 数据表
3.5.1 MySQL常见的数据类型
Mysql中的常见数据类型
int 整型
double 浮点型
varchar 字符串型
date 日期类型 -- 只显示年月日 没有时分秒 yyyy-MM-dd
datatime 年月日时分秒 -- yyyy-MM-dd HH:mm:ss
char -- 在MySQL中也代表字符串
注意:MySQL中的 char类型与 varchar类型,都对应了 Java中的字符串类型,区别在于:
char类型是固定长度的: 根据定义的字符串长度分配足够的空间。
varchar类型是可变长度的: 只使用字符串长度所需的空间
比如:保存字符串 "abc"
x char(10) 占用10个字节
y varchar(10) 占用3个字节
适用场景:
char类型适合存储 固定长度的字符串,比如 密码 ,性别一类
varchar类型适合存储 在一定范围内,有长度变化的字符串
3.5.2 创建表&查看表
创建表的语法格式
create table 表明(
字段名称 字段类型(长度),
字段名称2 字段类型,
字段名称3 字段类型 -- 最后一个字段不要加逗号
);
-- 创建商品分类表
/*
表名 category
cid int 分类id
cname varchar 分类的名称
*/
-- 选择要使用的数据库
USE db1;
-- 创建分类表
CREATE TABLE category(
cid INT,
cname VARBINARY(20)
);
-- 创建测试表
/*
表名 test1
tid int
tdate date
*/
CREATE TABLE test1(
tid INT,
tdate DATE
);
-- 快速创建一个表结构相同的表 (复制)
-- 语法结构 create table 新表名称 like 旧表名称
-- 创建一个与test1表结构相同的 test2 表
CREATE TABLE test2 LIKE test1`db1`;
-- 查看表结构
DESCRIBE test1;
DESC test2;
-- 查看表
-- 查看当前数据库中所有的数据表名
SHOW TABLES;
-- 查看创建表的 sql
SHOW CREATE TABLE category;
-- 查看表结构
DESC category;
3.5.4 删除表
/*
表的删除
语法格式
drop table 表名; 从数据库中永久的删除一张表
drop table if exists 表名; --判断表是否存在,如果存在就删除, 不然就不执行
*/
-- 删除 test1表
DROP TABLE test1; -- 表不存在时会报错
-- 使用先判断后删除的形式
DROP TABLE IF EXISTS test2; -- 表不存在时警告`db1`
3.5.5 修改表
/*
修改表的名称
...字符集
...某一列(数据类型, 名称, 长度)
向表中添加一列
删除表中的一列
*/
-- 修改表的名称 关键字:rename to
-- 语法格式: rename table 旧表名 to 新表名
RENAME TABLE category TO category1;
-- 修改表的字符集为GBK 关键字:character set
-- 语法格式: alter table 表名 character set 字符集
ALTER TABLE category1 CHARACTER SET gbk;
-- 向表中添加一个字段 关键字: add
-- 语法格式: alter table 表名 add 字段名称 字段类型(长度)
-- 添加分类描述字段
ALTER TABLE category1 ADD cdesc VARCHAR(20);
-- 修改表中的列的类型或者长度 关键字: modify
-- 语法格式: alter table 表名 modify 字段名 字段类型
-- 修改cdesc字段的长度为50
ALTER TABLE category1 MODIFY cdesc VARBINARY(50); -- 修改字段长度
ALTER TABLE category1 MODIFY cdesc CHAR(20); -- 修改字段类型
-- 修改列的名称 关键字: change
-- 语法格式: alter table 表名 change 旧列名 新列名 类型(长度)
-- 修改cdesc字段 名称改为 description varchar(30)
ALTER TABLE category1 CHANGE cdesc description VARCHAR(30);
-- 删除列 关键字: drop
-- 语法格式: alter table 表名 drop 列名
ALTER TABLE category1 DROP description;
3.6 DML 操作表中数据
3.6.1 插入数据
/*
增加
语法格式: insert into 表名 (字段名1,字段名2,...) values(字段值1,字段值2,...)
*/
/*
表名:student
表中字段:
学员ID, sid int
姓名, sname varchar(20)
年龄, age int
性别, sex char(1)
地址, address varchar(40)
*/
-- 创建学生表
CREATE TABLE student(
sid INT,
sname VARCHAR(20),
age INT,
sex CHAR(1),
address VARCHAR(40)
);
-- 向学生表中插入数据
-- 方式1 插入全部字段 将所有字段名都写出来
INSERT INTO student (sid,sname,age,sex,address) VALUES (1,'孙悟空',18,'男','花果山');
-- 方式2 插入全部字段 不写字段名
INSERT INTO student VALUES(2,'孙悟饭',5,'男','地球');
-- 方式3 插入指定字段
INSERT INTO student (sid,sname) VALUES(3,'蜘蛛精');
-- 注意事项:
-- 1, 值与字段必须对应, 个数&数据类型&长度 都必须一致
INSERT INTO student (sid,sname,age,sex,address) VALUES (4,'孙悟空',18,'man','花果山'); -- 报错
-- 2, 插入 varchar char date 类型的时候,必须使用单引号或者双引号进行包裹
INSERT INTO student (sid,sname,age,sex,address) VALUES (4,'孙悟空',18,'男','花果山'); -- 报错
-- 3, 如果插入空值, 可以忽略不写,或者写null
INSERT INTO student (sid,sname) VALUES (5,'唐僧');
INSERT INTO student (sid,sname,age,sex,address) VALUES (6,'八戒',NULL,NULL,NULL);
3.6.2 更改数据
/*
修改操作
语法格式1: update 表名 set 列名 = 值
语法格式2: update 表名 set 列名 = 值 where 条件表达式: 字段名 = 值
*/
-- 修改表中的所有学生性别为女
UPDATE student SET sex = '女'; -- (慎用!!!)
-- 带条件的修改 将sid为 1的数据, 性别修改为男
UPDATE student SET sex = '男' WHERE sid = 1;
-- 一次性修改多个列
-- 修改sid为 5的这条数据, 年龄改为20岁, 地址改为大唐
UPDATE student SET age = 20, address = '大唐' WHERE sid = 5;
3.6.3 删除数据
/*
删除
语法格式1: delete from 表名;
语法格式2: delete from 表名 where 条件表达式;
*/
-- 删除 sid为6的数据
DELETE FROM student WHERE sid = 6;
-- 删除所有数据
DELETE FROM student;
-- 删除所有数据的方式有两种
-- 1, delete from 表; -- 不推荐,对表中数据逐条删除,效率低
-- 2, truncate table 表; -- 推荐, 删除整张表, 然后创建一个一模一样的新表
INSERT INTO student VALUES(1,'孙悟空',20,'男','花果山');
TRUNCATE TABLE student;
3.7 DQL 查询表中数据
3.7.1 准备数据
#创建员工表
表名 emp
表中字段:
eid 员工id,int
ename 姓名,varchar
sex 性别,char
salary 薪资,double
hire_date 入职时间,date
dept_name 部门名称,varchar
/*
表名 emp
表中字段:
eid 员工id,int
ename 姓名,varchar
sex 性别,char
salary 薪资,double
hire_date 入职时间,date
dept_name 部门名称,varchar
*/
-- 创建员工表
CREATE TABLE emp(
eid INT,
ename VARCHAR(20),
sex CHAR(1),
salary DOUBLE,
hire_date DATE,
dept_name VARCHAR(20)
);
-- 添加数据
INSERT INTO emp VALUES(1,'孙悟空','男',7200,'2013-02-04','教学部');
INSERT INTO emp VALUES(2,'猪八戒','男',3600,'2010-12-02','教学部');
INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教学部');
INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市场部');
INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市场部');
INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市场部');
INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','财务部');
INSERT INTO emp VALUES(8,'黄蓉','女',3500,'2011-09-14','财务部');
INSERT INTO emp VALUES(9,'吴承恩','男',20000,'2000-03-14',NULL);
INSERT INTO emp VALUES(10,'孙悟饭','男', 10,'2020-03-14',财务部);
3.7.2 简单查询
/*
DQL
简单查询
select 列名 from 表名;
select 列名 as 别名 from 表名;
select distinct 列名 from 表名;
select 数据列名+1000 from 表名;
*/
-- 查询emp表中的所有数据
SELECT * FROM emp; -- *表示所有的列
-- 查询所有数据, 只显示 id和 name
SELECT * FROM emp; -- 先这样写
SELECT eid, ename FROM emp;
-- 查询所有数据, 然后给列明改为中文
SELECT * FROM emp;
-- 别名查询 使用关键字 as
SELECT
eid AS '编号',
ename AS '姓名',
sex AS'性别',
salary AS '薪资',
hire_date AS '入职时间',
dept_name '部门名称' -- as可以省略
FROM emp;
-- 查询一共有几个部门
SELECT dept_name FROM emp;
-- 去重操作 关键字: distinct
SELECT DISTINCT dept_name FROM emp;
-- 将员工薪资数据加1000 进行展示
SELECT ename, salary+1000 AS salary FROM emp;
-- 注意: 查询操作 不会对数据表中的数据进行修改, 只是一种显示的方式.
3.7.3 条件查询
/*
条件查询
语法格式: select 列名 from 表名 where 条件表达式
比较运算符
> < <= >= = <> !=
BETWEEN ...AND...
IN(集合)
LIKE '%张%'
IS NULL
逻辑运算符
and
or
not
*/
-- 查询员工姓名为黄蓉的员工信息
-- 1, 查哪张表 2, 查哪些字段 3, 查询条件
SELECT * FROM emp WHERE ename = '黄蓉';
-- 查询薪水价格为5000的员工信息
SELECT * FROM emp WHERE salary = 5000;
-- 查询薪水价格不是5000的所有员工信息
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;
-- 查询薪水价格大于6000元的所有员工信息
SELECT * FROM emp WHERE salary > 6000;
-- 查询薪水价格在5000到10000之间所有员工信息
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
SELECT * FROM emp WHERE salary >= 5000 AND salary <= 10000;
-- 查询薪水价格是3600或7200或者20000的所有员工信息
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2, 使用 in() 匹配括号中的参数
SELECT * FROM emp WHERE salary IN (3600,7200,20000);
/*
like '%精%'
% 通配符, 表示任意多个字符串 --'%精%'
_ 通配符, 表示一个字符 -- '_精'
*/
-- 查询含有'精'字的所有员工信息
SELECT * FROM emp WHERE ename LIKE '%精%';
-- 查询以'孙'开头的所有员工信息
SELECT * FROM emp WHERE ename LIKE '孙%';
-- 查询第二个字为'兔'的所有员工信息
SELECT * FROM emp WHERE ename LIKE '_兔%';
-- 查询没有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NULL;
-- 查询有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NOT NULL;
-- 条件查询, 先取出表中的每条数据, 满足条件的就返回, 不满足就过滤掉