1. 数据库的基本概念
- 数据库的英文单词: DataBase 简称 : DB
1.1 什么数据库?
- 用于存储和管理数据的仓库。
1.2 数据库的特点:
- 持久化存储数据的。其实数据库就是一个文件系统
- 方便存储和管理数据
- 使用了统一的方式操作数据库 -- SQL
2. MySQL 数据库软件
2.1 安装
- 详细请看 MySQL基础.pdf: 详细请看 MySQL基础.pdf
2.2 卸载
- 详细请看 MySQL基础.pdf: 详细请看 MySQL基础.pdf
2.3 配置
- MySQL安装的是一个MySQL服务。
2.4 MySQL服务的启动
-
手动:右键单击此电脑--> 管理 -- >服务和应用程序
cmd -- > services.msc 打开服务和应用程序管理界面。
使用纯命令行的方式:net stop mysql || net start mysql 直接运行可能出现下面的错误,需要使用管理员方式打开cmd。
- 以管理员方式运行cmd:net stop mysql 停止mysql服务; net start mysql ;启动mysql服务。这里的mysql是自定义的服务名称。
2.5 MySQL的登录和退出
登录 mysql -uroot -p
退出 exit 或者 quit
远程连接到远程MySql服务器。 mysql -h远程主机ip(不需要加上端口号) -u用户名 -p
第三种登录的方式 : mysql --host=服务器ip --user=root --password=用户密码
2.6 MySQL的目录结构
2.6.1 MySQL的安装目录
2.6.2 MySQL的数据目录
- 数据库的概念:对应文件夹
- 表的概念:对应文件夹中的文件
- 数据的概念:文件中的数据
3. SQL
- 什么是SQL:Structured Query Language 结构化查询语言。其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式可能存在不一样的地方,叫做方言。
3.1 SQL通用语法
SQL语句可以以单行或者多行书写,以分号结尾。
可以使用空格和缩进来增加语句的可读性。
MySQL数据库的SQL 语句不区分大小写,关键词建议使用大写。
三种注释方式: 单行注释(--) 或者(#) 多行注释 (/**/) 。
3.2 SQL的分类
Data Definition Language (DDL 数据定义语言) 如:建库,建表。关键字:create、drop、alter。
Data Manipulation Language(DML 数据操纵语言), 如:对表中的记录操作 增删改 。关键字:insert、delete、alter。
Data Query Language(DQL 数据查询语言),如:对表中的查询操作。关键字:select、where
-
Data Control Language(DCL 数据控制语言),如:对用户权限的设置。关键字:gant、revoke等。
3.2.1 DDL 数据定义语言
用于操作数据库和表、列等。关键字:create ,drop, alter等。
操作数据库(CRUD):C(Create)、R( Retrieve)、U(Update)、D(Delete)。
3.2.1.1 操作数据库
A. 创建数据库 C(create)
1. 创建数据库 : create database db1;
2. 创建数据库之前判断是否有该数据库:create database if not exists `db1`;
3. 创建数据库并制定字符集:create database db3 character set gbk;
4. 创建数据库之前判断并指定字符集:create database if not exists db4 character set gbk;
B. 查询数据库 R(Retrieve)
1. 查询所有数据库 : show databases;
2. 查看某个数据库的字符集(创建语句) : show create database `数据库名称`
C. 修改数据库 U(Update)
- 修改数据库字符集
alter database 数据库名称 character set 字符集 (注意字符集这里 需要使用 utf8 )
D. 删除数据库 D (drop)
- 删除数据库
删除存在的数据库 : drop database 数据库名称 ;
判断数据库是否存在再删除: drop database if exists 数据库名称 ;
E. 使用数据库
查询当前正在使用的数据库名称:select databse();
使用数据库 : use 数据库名称;
3.2.1.2 操作表
MySQL 中的数据类型
A. 创建表 C (Create)
1. 创建表 : create table 表名 (
列名1 数据类型1,
列名2 数据类型2,
.......
列名n 数据类型n
);
2. 数据类型 :
* int :整数类型
* double:小数类型 例:score double(5,2) 数字最长有5为,小数点后保留两位小数
3. 日期类型 date:日期只包含年月日的日期,yyyy-MM-dd
4. 日期和时间:包含年与日时分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:时间戳类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss 。 如果指定为改类型,在将来不给该类型赋值,或赋值为null ,将使用系统当前默认的系统时间赋值。
6. 字符串类型 varchar, 例: name varchar(20) 名字最大20个字符。
创建一张学生表
create table student (
id int ,
name varchar(32),
age int ,
score double(4,1),
brithday date,
insert_time timestamp
);
B. 查询表 R (Retrieve)
1. 查询数据库中的所有表名称: show tables;
2. 查询表结构: desc 表名称
3. 查询创建表的语句 : show create table 表名 ;
C 修改表 U (Update)
1. 修改表名 :alter table 表名 rename 新的表名
2. 修改表的字符集:alter table 表名 character set 字符集名称;
3. 添加一列:alter table 表名 add 列名 数据类型;
4. 修改列的名称: alter table 表名 change 老列名 新列名 新数据类型 或者 alter table student modify 老列名 新的数据类型(该方式只能修改数据类型);
5. 删除列: alter table 表名 drop 列名 ;
D . 删除表 D(Delete)
1. 删除表 :drop table 表名称;
2. 删除之前判断表是否存在: drop table if exists 表名称;
E. 复制一个表
1. 复制一个表 : create table newName like oldName;
3.2.2 DML 数据库操作语言
- Data Manipulation Language(DML 数据操纵语言), 如:对表中的记录操作 增删改 。关键字:insert、delete、alter。
3.2.2.1 添加数据 insert
- 语法:
1. 向指定表中添加一条数据 : insert into 表名 (列名1 , 列名 1, ... , 列名 n) values(值1,值2, ..... ,值n)
2. 注意事项: 列名和值需要一一对应(字段名称和数据类型);表名之后不定义列名则为所有列添加值;未指定列名但是也不想填写值,可以使用 null 代替值;除了数字之外的数据类型都需要使用逗号引起来,单引号双引号都可以;
- 案例 :
DESC student; -- 查看表信息
INSERT INTO student (id, NAME ,age) VALUES (1,'张无忌',17); -- 向表中插入一条数据
SELECT * FROM student; -- 查询表中所有数据
DESC student;
INSERT INTO student VALUES(1,'赵敏',16,99.9,NULL,NULL); -- 不指定列名 ,但是需要将全部列填上,不想填的列使用null替换
SELECT * FROM student;
INSERT INTO student VALUES(2,'张三丰',200,100.0,'1820-11-11',NULL); -- 插入值时除数字之外 都需要使用引号引起来,单引号双引号都可以‘
SELECT * FROM student;
3.2.2.2 修改数据 update
- 语法 :
1. update 表名 set 列名1 = 值1 , 列名2 = 值 2 ,.... , 列名n = 值 n [where 条件]
2. 注意事项: 如果不加 where 条件 将 修改表中全部对应的数据列。
- 案例 :
-- 修改表中数据 开始
UPDATE student SET age = 20 WHERE NAME = '赵敏';
SELECT * FROM student;
UPDATE student SET score = 100.0 ; -- 如果不加 where 条件将修改表中全部对应的数据列
UPDATE student SET age = 20 WHERE NAME = '张无忌';
SELECT *FROM student;
SELECT *FROM student ;
-- 修改表中数据 结束
3.2.2.3 删除数据 delete
- 语法 :
1. 删除表中某条数据 : delete from 表名 [ where 条件 ];
2. 注意事项:如果不写where 条件默认删除表中所有数据 (不推荐)。 推荐使用:TRUNCATE TABLE 表名; 删除表再创建一张一模一样的新表
- 案例 :
-- 删除表中数据 开始
DELETE FROM student WHERE id = 1;
SELECT * FROM student ; -- 如果不加条件则删除表中所有数据
DELETE FROM student ; -- 该中方式删除效率比较低,因为有多少条记录就会执行多少次
SELECT *FROM student;
INSERT INTO student VALUES(2,'张三丰',200,100.0,'1820-11-11',NULL);
SELECT *FROM student;
TRUNCATE TABLE student; -- 删除表再创建一个一模一样的新表
SELECT *FROM student;
-- 删除表中数据 结束
3.2.3 DML 数据查询语言
Data Query Language(DQL 数据查询语言),如:对表中的查询操作。关键字:select、where 。
语法 :
select 字段列表
from
表名列表
where 条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页
3.2.3.1 基础查询
备用表的sql
USE db1;
CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO student3(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);
SELECT *FROM student3;
- 多个字段查询:
-- 1. 查询姓名 和 年龄字段
SELECT NAME , age FROM student3;
-- 2. 查询地址字段
SELECT address FROM student3;
-- 3. 如果要查询所有字段可以使用 * 代替
select * from student3;
- 去除重复:
-- 3. 去除重复的结果集 : 只有全部字段的结果集全部一样才能去除
SELECT DISTINCT address FROM student3;
- 计算列: 当字段值中出现 null 时 需要注意 新函数 ifnull()
-- 4. 计算 math 和 english的和
SELECT NAME ,math , english , math + english FROM student3; -- 但是这样有个问题 : 如果数据中有 null 参与的运算计算的结果也是 null
-- 5. 处理 列中 可能为null的问题
SELECT NAME ,math ,english , math + IFNULL(english,0) FROM student3;
- 起别名 : 可以使用as 和空格 为 字段名称 起别名
-- 6. 为列起别名 可以 使用as 和空格
SELECT NAME 姓名 , math 数学 , english 英语 , math + IFNULL(english,0) AS 总分 FROM student3;
- 全部代码 :
-- 查询表中数据 开始
-- 建表语句
USE db1;
CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO student3(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);
SELECT *FROM student3;
-- 1. 查询姓名 和 年龄字段
SELECT NAME , age FROM student3;
-- 2. 查询地址字段
SELECT address FROM student3;
-- 3. 去除重复的结果集
SELECT DISTINCT address FROM student3;
TRUNCATE TABLE student3; -- 删除表中所有数据并创建一张新表
SELECT * FROM student3;
-- 4. 计算 math 和 english的和
SELECT NAME ,math , english , math + english FROM student3; -- 但是这样有个问题 : 如果数据中有 null 参与的运算计算的结果也是 null
-- 5. 处理 列中 可能为null的问题
SELECT NAME ,math ,english , math + IFNULL(english,0) FROM student3;
-- 6. 为列起别名 可以 使用as 和空格
SELECT NAME 姓名 , math 数学 , english 英语 , math + IFNULL(english,0) AS 总分 FROM student3;
-- 查询表中数据 结束
3.2.3.2 条件查询
- 语法 :
1. where 子句后跟条件 ;
2. 运算符 :
* > 、< 、<= 、>= 、= 、<>
* BETWEEN...AND
* IN( 集合)
* LIKE:模糊查询
* 占位符:
* _:单个任意字符
* %:多个任意字符
* IS NULL
* and 或 &&
* or 或 ||
* not 或 !
- 案例 :
-- where 条件查询 开始
SELECT * FROM student3;
-- 1. 查询大于年龄 20 岁的人
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age > 20;
-- 2. 查询年龄大于等于 20 岁的 人
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age >= 20;
-- 3. 查询年龄等于 20 岁的人
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age = 20;
-- 4. 查询年龄 不等于 20 岁的人
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age <> 20;
-- 5. 查询年龄 大于等于 20 小于等于 30 的人 两个条件中间使用 and 连接 或者使用 && (不推荐)
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age >= 20 AND age <= 30;
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age BETWEEN 20 AND 30; -- 相同写法
-- 6. 查询22, 18岁 ,25岁 岁的人的信息
SELECT NAME 姓名 ,age 年龄 FROM student3 WHERE age = 22 OR age = 18 OR age = 25;
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age IN (22,18,25); -- 相同写法
-- 7. 查询 谁的英语缺考了
SELECT NAME 姓名 , english 英语成绩 FROM student3 wher english = NULL ; -- 错误写法 null 值不能使用 = 或者 != 进行判断 需要使用 is null
SELECT NAME 姓名 , english 英语成绩 FROM student3 WHERE english IS NULL ;
-- 查询英语成绩不为 null 的人的信息
SELECT NAME 姓名 , english 英语成绩 FROM student3 WHERE english IS NOT NULL;
-- where 条件查询 结束
- 模糊查询 like
1. like 的占位符 : _ 下划线代表单个任意字符 ; % 多个任意字符 ;
- 模糊查询案例 :
-- where 查询条件 like 模糊查询 开始
-- 1. 查询姓马的人的信息
SELECT * FROM student3 WHERE NAME LIKE '马%';
-- 2. 查询姓名 第二个是化 的人
SELECT * FROM student3 WHERE NAME LIKE '_化%';
-- 3.查询姓名是三个字的人
SELECT * FROM student3 WHERE NAME LIKE '___';
TRUNCATE TABLE student3; -- 删除表中数据 并创建一个新的空表
-- 4. 查询姓名中包含马的人
SELECT * FROM student3 WHERE NAME LIKE '%马%';
-- 5. 查询姓名中包含德的人
SELECT * FROM student3 WHERE NAME LIKE '%德%';
-- where 查询条件 like 模糊查询 结束
4. 基础部分所有sql
-- mysql基础部分 语句
-- 向表中添加数据 开始
DESC student; -- 查看表信息
INSERT INTO student (id, NAME ,age) VALUES (1,'张无忌',17); -- 向表中插入一条数据
SELECT * FROM student; -- 查询表中所有数据
DESC student;
INSERT INTO student VALUES(1,'赵敏',16,99.9,NULL,NULL); -- 不指定列名 ,但是需要将全部列填上,不想填的列使用null替换
SELECT * FROM student;
INSERT INTO student VALUES(2,'张三丰',200,100.0,'1820-11-11',NULL); -- 插入值时除数字之外 都需要使用引号引起来,单引号双引号都可以‘
SELECT * FROM student;
-- 向表中添加数据 结束
-- 删除表中数据 开始
DELETE FROM student WHERE id = 1;
SELECT * FROM student ; -- 如果不加条件则删除表中所有数据
DELETE FROM student ; -- 该中方式删除效率比较低,因为有多少条记录就会执行多少次
SELECT *FROM student;
INSERT INTO student VALUES(2,'张三丰',200,100.0,'1820-11-11',NULL);
SELECT *FROM student;
TRUNCATE TABLE student; -- 删除表再创建一个一模一样的新表
SELECT *FROM student;
-- 删除表中数据 结束
-- 修改表中数据 开始
UPDATE student SET age = 20 WHERE NAME = '赵敏';
SELECT * FROM student;
UPDATE student SET score = 100.0 ; -- 如果不加 where 条件将修改表中全部对应的数据列
UPDATE student SET age = 20 WHERE NAME = '张无忌';
SELECT *FROM student;
SELECT *FROM student ;
-- 修改表中数据 结束
-- 查询表中数据 开始
-- 建表语句
USE db1;
CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO student3(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);
SELECT *FROM student3;
-- 1. 查询姓名 和 年龄字段
SELECT NAME , age FROM student3;
-- 2. 查询地址字段
SELECT address FROM student3;
-- 3. 去除重复的结果集
SELECT DISTINCT address FROM student3;
TRUNCATE TABLE student3; -- 删除表中所有数据并创建一张新表
SELECT * FROM student3;
-- 4. 计算 math 和 english的和
SELECT NAME ,math , english , math + english FROM student3; -- 但是这样有个问题 : 如果数据中有 null 参与的运算计算的结果也是 null
-- 5. 处理 列中 可能为null的问题
SELECT NAME ,math ,english , math + IFNULL(english,0) FROM student3;
-- 6. 为列起别名 可以 使用as 和空格
SELECT NAME 姓名 , math 数学 , english 英语 , math + IFNULL(english,0) AS 总分 FROM student3;
-- 查询表中数据 结束
-- where 条件查询 开始
SELECT * FROM student3;
-- 1. 查询大于年龄 20 岁的人
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age > 20;
-- 2. 查询年龄大于等于 20 岁的 人
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age >= 20;
-- 3. 查询年龄等于 20 岁的人
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age = 20;
-- 4. 查询年龄 不等于 20 岁的人
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age <> 20;
-- 5. 查询年龄 大于等于 20 小于等于 30 的人 两个条件中间使用 and 连接 或者使用 && (不推荐)
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age >= 20 AND age <= 30;
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age BETWEEN 20 AND 30; -- 相同写法
-- 6. 查询22, 18岁 ,25岁 岁的人的信息
SELECT NAME 姓名 ,age 年龄 FROM student3 WHERE age = 22 OR age = 18 OR age = 25;
SELECT NAME 姓名 , age 年龄 FROM student3 WHERE age IN (22,18,25); -- 相同写法
-- 7. 查询 谁的英语缺考了
SELECT NAME 姓名 , english 英语成绩 FROM student3 wher english = NULL ; -- 错误写法 null 值不能使用 = 或者 != 进行判断 需要使用 is null
SELECT NAME 姓名 , english 英语成绩 FROM student3 WHERE english IS NULL ;
-- 查询英语成绩不为 null 的人的信息
SELECT NAME 姓名 , english 英语成绩 FROM student3 WHERE english IS NOT NULL;
-- where 条件查询 结束
-- where 查询条件 like 模糊查询 开始
-- 1. 查询姓马的人的信息
SELECT * FROM student3 WHERE NAME LIKE '马%';
-- 2. 查询姓名 第二个是化 的人
SELECT * FROM student3 WHERE NAME LIKE '_化%';
-- 3.查询姓名是三个字的人
SELECT * FROM student3 WHERE NAME LIKE '___';
TRUNCATE TABLE student3; -- 删除表中数据 并创建一个新的空表
-- 4. 查询姓名中包含马的人
SELECT * FROM student3 WHERE NAME LIKE '%马%';
-- 5. 查询姓名中包含德的人
SELECT * FROM student3 WHERE NAME LIKE '%德%';
-- where 查询条件 like 模糊查询 结束