目录
1.数据库简介
2.数据库分类
3.常用数据库简介
4.使用场景
关系型数据库
非关系型数据库(NoSQL)
5.MySql 的安装与配置(网上搜一下教程)
net start mysql
mysql -h主机IP -u用户名 -p密码
alter user 'root'@'localhost' identified by '密码';
exit
net stop mysql
6.数据库客户端工具
7.MySql 介绍
MySQL 目录结构:
数据库表简介
表:包含数据库中所有数据的数据库对象
8.SQL 简介
SQL 是什么?
通用语法:
# 单行注释,MySQL 特有的单行注释
-- 单行注释
/* 多行注释 */
分类
9.DDL 数据库操作-创建
创建数据库语法:
-- 创建数据库
CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] 数据库名 CHARACTER SET [=] 字符集
crete database if not exists test_db character set = utf8
创建数据库注意事项
创建基本数据库:
-- 创建名为 test_db 的数据库
CREATE DATABASE test_db;
创建指定字符集的数据库:
-- 创建名为 test_db2 的数据库,并指定字符集为 utf8
CREATE DATABASE test_db2 CHARACTER SET utf8;
创建数据库前判断是否存在同名数据库:
-- 如果数据库 test_db3 不存在,则创建名为 test_db3 的数据库
CREATE DATABASE IF NOT EXISTS test_db3 CHARACTER SET utf8;
10.DDL 数据库操作-查看
选择数据库语法:
-- 查看所有数据库
SHOW DATABASES;
查看数据库语法:
-- 选择数据库为当前数据库
USE 数据库名;
查看数据库的定义信息语法:
-- 查看数据库定义信息
SHOW CREATE DATABASE 数据库名
实例:
-- 查看当前所有数据库
SHOW DATABASES;
-- 选择数据库 test_db
USE test_db;
-- 查看 test_db 数据库的定义信息
SHOW CREATE DATABASE 数据库名
11.DDL 数据库操作-修改:
修改数据库语法:
-- 修改数据库相关参数
ALTER {DATABASE} [数据库名] CHARACTER SET [=] 字符集
修改数据库字符集:
-- 创建数据库 db1,指定字符集为 GBK
CREATE DATABASE db1 CHARACTER SET GBK;
-- 将数据库 db1 的字符集修改为 utf8
ALTER DATABASE db1 CHARACTER SET utf8;
12.DDL 数据库操作-删除
删除数据库语法
-- 删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
删除某个数据库
-- 查看当前所有数据库
SHOW DATABASES;
-- 删除某个数据库
DROP DATABASE test_db;
-- 如果某个数据库存在,则删除这个数据库
DROP DATABASE IF EXISTS test_db2;
13.DDL 数据库表操作简介
MySQL 的数据类型:
常用数据类型:
14.DDL 数据库表操作-创建
创建表语法:
-- 创建表
CREATE TABLE 数据表名 ( 列名1 属性, 列名2 属性… );
列属性:
列名 数据类型 [NOT NULL | NULL] [DEFAULT 默认值] [AUTO_INCREMENT] [PRIMARY KEY ] [注释]
创建学员表:
-- 切换到数据库 db1
USE db1;
-- 创建学员表
CREATE TABLE student( id INT, name VARCHAR(20) );
复制结构相同的表:
-- 复制表
CREATE TABLE 数据表名 LIKE 源数据表名
-- 创建一个表结构与 student 相同的 s2 表
CREATE TABLE s2 LIKE student;
15.DDL 数据库表操作-查看
查看表名语法:
-- 查看当前数据库中所有的表名
SHOW TABLES;
查看表结构语法:
-- 查看表结构
- DESCRIBE 数据表名;
- DESCRIBE 数据表名 列名;
-- 查看表结构简写
- DESC 数据表名;
- DESC 数据表名 列名;
实例:
-- 选择数据库
USE db1;
-- 查看数据库中的表
SHOW TABLES;
-- 查看学员表的表结构
DESC student;
-- 查看学员表中 name 列的信息
DESC student name;
16.DDL 数据库表操作-修改
添加新列:
-- 添加新列
ALTER TABLE 表名 ADD 列名 列属性;
# 实例
-- 选择数据库 db1
USE db1;
-- 添加新列
ALTER TABLE student ADD email varchar(50) NOT NULL;
-- 查看表结构
DESC student;
修改列定义:
-- 修改列定义
ALTER TABLE 表名 MODIFY 列名 列属性;
# 实例
-- 添加分数列,先定义为字符类型
ALTER TABLE student ADD score varchar(10);
-- 修改字段类型
ALTER TABLE student modify score int;
-- 查看表结构
DESC student;
修改列名:
-- 修改列名
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
# 实例
-- 修改列名并指定列的默认值
ALTER TABLE student CHANGE COLUMN name stu_name VARCHAR(30) DEFAULT NULL;
-- 查看表结构
DESC student;
删除列:
-- 删除列
ALTER TABLE 表名 DROP 列名;
# 实例
-- 将数据表 student 中的列 score 删除
ALTER TABLE student DROP score;
-- 查看表结构
DESC student;
修改表名:
-- 修改表名方式一
ALTER TABLE 旧表名 RENAME AS 新表名;
-- 修改表名方式二
RENAME TABLE 旧表名 To 新表名;
# 实例
-- 将数据表 student 更名为 stu ALTER TABLE student RENAME AS stu;
-- 将数据表 stu 更名为 stu_table RENAME TABLE stu TO stu_table;
-- 查看表名 SHOW TABLES;
17.DDL 数据库表操作-删除
删除表语法:
DROP TABLE [IF EXISTS] 数据表名;
实例:
-- 切换到数据库 db1
USE db1;
-- 创建 student 表
CREATE TABLE student( id INT, name VARCHAR(20) );
-- 直接删除 student 表
DROP TABLE student;
-- 先判断再删除 student 表
DROP TABLE IF EXISTS student;
18.DML 表数据操作-插入
表数据插入语法:
-- 插入数据
INSERT INTO 数据表名 (列名1, 列名2...) VALUES(值1, 值2...);
完整插入数据:
-- 选择数据库
USE db1;
-- 创建 user 表
CREATE TABLE user( id INT, name VARCHAR(20), age INT, sex CHAR(1), address VARCHAR(40) );
-- 插入一条完整数据,写出全部列名
INSERT INTO user (id,name,age,sex,address) VALUES(1,'张三',20,'男','北京');
-- 插入一条完整数据,不写列名
INSERT INTO user VALUES(2,'李四',22,'女','上海');
插入数据记录的一部分:
-- 插入表一行中的某几列的值
INSERT INTO user (id,name,address) VALUES (3,'王五','深圳');
插入多条记录:
-- 一次插入多条数据
INSERT INTO user (id,name,address) VALUES(4,'赵六','天津'),(5,'小红','成都'),(6,'小白','杭州');
注意事项:
19.DML 表数据操作-修改
表数据修改语法:
-- 修改表中数据
UPDATE 数据表名 SET 列名1=值1 [, 列名2=值2...] [WHERE 条件表达式]
实例:
-- 选择 db1 为当前数据库
USE db1;
-- 创建 student 表
CREATE TABLE student( id INT, name VARCHAR(20), sex CHAR(1), age TINYINT, city VARCHAR(50) );
-- 插入 5 条数据
INSERT INTO student VALUES(1,'小李','男', 18, '北京'), (2,'小白','女', 20, '成都'), (3,'小王','男', 23, '上海'), (4,'小赵','女', 21, '深圳'), (5,'小周','男', 25, '杭州');
-- 不带条件修改,将所有的性别改为女
UPDATE student SET sex = '女';
-- 带条件的修改,将 id 为 3 的学生,性别改为男
UPDATE student SET sex = '男' WHERE id = 3;
-- 一次修改多个列, 将 id 为 2 的学员,年龄改为 30,地址改为 北京
UPDATE student SET age = 30, city = '北京' WHERE id = 2;
20.DML 表数据操作-删除
通过 DELETE 语句删除数据:
-- 删除表中指定行的数据
DELETE FROM 数据表名 WHERE 条件表达式
通过 TRUNCATE TABLE 语句删除数据
-- 删除表中全部数据
TRUNCATE TABLE 数据表名
实例
-- 选择 db1 为当前数据库
USE db1;
# 数据准备
-- 创建 student 表
CREATE TABLE student( id INT, name VARCHAR(20), sex CHAR(1), age TINYINT, city VARCHAR(50) );
-- 插入 5 条数据 INSERT INTO student VALUES(1,'小李','男', 18, '北京'),(2,'小白','女', 20, '成都'),(3,'小王','男', 23, '上海'),(4,'小赵','女', 21, '深圳'),(5,'小周','男', 25, '杭州');
-- 删除 id 为 1 的数据
DELETE FROM student WHERE id = 1;
-- 删除 student 表中所有数据
DELETE FROM student;
-- 删除 student 表中所有数据
TRUNCATE TABLE student;
21.DQL 表查询操作-简介
单表查询:
-- 查询部门表中的信息
SELECT * FROM departments;
*
代表所有的列SELECT * FROM 表名;
字段查询:
-- 查询部门的名称
SELECT dept_name FROM departments;
,
对字段进行分隔SELECT 列名 FROM 表名;
起别名:
-- 查询员工信息,并将列名改为中文
SELECT emp_no AS '编号', first_name AS '名', last_name AS '姓', gender AS '性别', hire_date AS '入职时间' FROM employees emp;
SELECT 列名 FROM 表名 表别名;
SELECT 列名 AS 别名 FROM 表名;
去重:
-- 去掉重复职级信息
SELECT DISTINCT title FROM titles;
SELECT DISTINCT 列名 FROM 表名;
运算查询:
-- 所有员工的工资 +1000 元进行显示
SELECT emp_no , salary + 1000 FROM salaries;
SELECT (列名 运算表达式) FROM 表名;
22.DQL 表查询-条件查询
条件查询语法:
-- 条件查询
SELECT 列名 FROM 表名 WHERE 条件表达式
比较运算符:
比较大小:
-- 查询出生日期晚于 1965-01-01 的员工编号、姓名和生日
SELECT emp_no, first_name, last_name, birth_date FROM employees WHERE birth_date > '1965-01-01';
WHERE <列名> [> < <= >= = <> !=] <值>
使用 BETWEEN 进行模糊查询:
-- 查询年薪介于 70000 到 70003 之间的员工编号和年薪
SELECT emp_no, salary FROM salaries WHERE salary BETWEEN 70000 AND 70003;
WHERE <列名> [NOT] BETWEEN <起始表达式> AND <结束表达式>
<起始表达式>
和 <结束表达式>
的顺序不能颠倒使用 IN 进行模糊查询:
-- 查询入职日期为 1995-01-27 和 1995-03-20 日的员工信息
SELECT * FROM employees WHERE hire_date IN ('1995-01-27', '1995-03-20');
WHERE <列名> IN <(常量列表)>
(常量列表)
中各常量值用逗号隔开判断是否为空:
-- 选择 hog_demo 为当前数据库
USE hog_demo;
-- 更新 student 表中 id 为 2 的 age 值为 NULL
UPDATE student SET age = NULL WHERE id = 2;
-- 查询学生表中年龄为 NULL 的学生信息
SELECT * FROM student WHERE age IS NULL;
WHERE <列名> IS [NOT] NULL
逻辑运算符:
-- 查询名字为 Lillian 并且姓氏为 Haddadi 的员工信息
SELECT * FROM employees WHERE first_name = 'Lillian' AND last_name = 'Haddadi';
-- 查询名字为 Lillian 或者姓氏为 Terkki 的员工信息
SELECT * FROM employees WHERE first_name = 'Lillian' OR last_name = 'Terkki';
-- 查询名字为 Lillian 并且性别不是女的员工信息
SELECT * FROM employees WHERE first_name = 'Lillian' and not gender='F';
通配符:
-- 查询名字中包含 fai 的员工的信息
SELECT * FROM employees WHERE first_name LIKE '%fai%';
-- 查询名字中 fa 开头的名字长度为 3 位的员工信息
SELECT * FROM employees WHERE first_name LIKE 'fa_';
23.DQL 表查询操作-排序
排序语法:
-- 对查询结果进行排序
SELECT 列名 FROM 表名 [WHERE 条件表达式] ORDER BY 列名1 [ASC / DESC], 列名2 [ASC / DESC]
单列排序:
-- 使用 salary 字段,对 salaries 表数据进行升序排序
SELECT * FROM salaries ORDER BY salary;
-- 使用 salary 字段,对 salaries 表数据进行降序排序
SELECT * FROM salaries ORDER BY salary DESC;
-- 查询员工的编号和入职日期,按照员工入职日期从晚到早排序
SELECT emp_no, hire_date FROM employees ORDER BY hire_date DESC;
组合排序:
-- 在入职时间排序的基础上,再使用 emp_no 进行排序 -- 组合排序
SELECT emp_no, hire_date FROM employees ORDER BY hire_date DESC, emp_no DESC;
24.DQL 表查询操作-聚合函数
聚合函数:
聚合查询:
-- 查询职级名称为 Senior Engineer 的员工数量
SELECT COUNT(*) FROM titles WHERE title = 'Senior Engineer';
-- 查询员工编号为 10002 的员工的最高年薪
SELECT MAX(salary) FROM salaries WHERE emp_no = 10002;
-- 查询员工编号为 10002 的员工的最低年薪
SELECT MIN(salary) FROM salaries WHERE emp_no = 10002;
-- 查询员工编号为 10002 的员工的薪水总和
SELECT SUM(salary) FROM salaries WHERE emp_no = 10002;
-- 查询员工编号为 10002 的员工的平均年薪
SELECT AVG(salary) FROM salaries WHERE emp_no = 10002;
SELECT 聚合函数(列名) FROM 表名;
25.DQL 表查询操作-分组
分组查询语法:
-- 分组查询
SELECT 分组列/聚合函数 FROM 表名 GROUP BY 分组列 [HAVING 条件];
实例:
-- 查询每个员工的薪资和
SELECT emp_no, SUM(salary) FROM salaries GROUP BY emp_no;
-- 查询员工编号小于 10010 的,薪资和小于 400000 的员工的薪资和
SELECT emp_no, SUM(salary) FROM salaries WHERE emp_no < 10010 GROUP BY emp_no HAVING SUM(salary) < 400000;
子句区别:
26.DQL 表查询操作-limit 关键字
LIMIT 关键字:
-- 限制查询结果行数
SELECT 列名1, 列名2... FROM 表名 LIMIT [开始的行数], <查询记录的条数>
-- 使用 OFFSET 关键字指定开始的行数
SELECT 列名1, 列名2... FROM 表名 LIMIT <查询记录的条数> OFFSET <开始的行数>
实例:
-- 展示前 10 条员工信息
SELECT * FROM employees LIMIT 10;
SELECT * FROM employees LIMIT 0, 10;
SELECT * FROM employees LIMIT 10 OFFSET 0;
-- 显示年薪从高到低排序,第 15 位到第 20 位员工的编号和年薪
SELECT emp_no, salary FROM salaries ORDER BY salary DESC LIMIT 14, 6;
SELECT emp_no, salary FROM salaries ORDER BY salary DESC LIMIT 6 OFFSET 14;
单表查询总结:
-- 基础查询语法
SELECT DISTINCT <列名> FROM <表名> WHERE <查询条件表达式> GROUP BY <分组的列名> HAVING <分组后的查询条件表达式> ORDER BY <排序的列名> [ASC / DESC] LIMIT [开始的行数], <查询记录的条数>
SQL 语句执行顺序:
27.SQL 约束-主键约束
SQL 约束:
主键约束:
列名 字段类型 PRIMARY KEY
添加主键约束:
-- 创建一个带主键的表
CREATE TABLE emp1(
-- 设置主键 唯一 非空
eid INT PRIMARY KEY,
ename VARCHAR(20),
sex CHAR(1)
);
-- 给存在的表添加主键
CREATE TABLE emp2( eid INT , ename VARCHAR(20), sex CHAR(1) )
-- 通过 DDL 语句进行设置
ALTER TABLE emp2 ADD PRIMARY KEY(eid);
创建主键自增的表:
-- 创建主键自增的表
CREATE TABLE emp3( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), sex CHAR(1) );
修改主键自增的起始值:
-- 创建主键自增的表,自定义自增其实值
CREATE TABLE emp4( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), sex CHAR(1) )AUTO_INCREMENT=100;
删除主键约束:
-- 删除表中的主键
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 使用 DDL 语句删除表中的主键
ALTER TABLE emp2 DROP PRIMARY KEY;
-- 查看表结构
DESC emp2;
选择主键原则:
mysql设置主键的目的:
MySQL中设置主键的目的是为了确保表中每一行的唯一性。主键是表中的唯一标识符,它用于将表中的每一行与其他行区分开来。如果没有主键,则可能会出现重复的行,这可能会导致数据不一致或出现错误。主键可以是一个列,也可以是多个列的组合。在MySQL中,主键通常是一个整数类型的列,例如INT或BIGINT。主键可以自动生成,也可以手动指定。在MySQL中,主键通常用于连接多个表,以便在查询时能够准确地获取所需的数据。此外,主键还可以用于实现事务处理,以确保每个事务都包含了一组相关的操作,并且这些操作要么全部成功,要么全部失败。
28.SQL 约束-非空约束
非空约束:
列名 字段类型 NOT NULL
添加非空约束:
-- 添加非空约束
CREATE TABLE emp5(
eid INT PRIMARY KEY AUTO_INCREMENT,
-- ename 字段不能为空
ename VARCHAR(20) NOT NULL,
sex CHAR(1)
);
29.SQL 约束-唯一约束
唯一约束:
列名 字段类型 UNIQUE
添加唯一约束:
-- 创建带有唯一约束的表
CREATE TABLE emp6(
eid INT PRIMARY KEY AUTO_INCREMENT,
-- 为 ename 字段添加唯一约束
ename VARCHAR(20) UNIQUE,
sex CHAR(1)
);
主键约束与唯一约束的区别:
mysql唯一约束的作用:
MySQL唯一约束的目的主要是确保表中每一行的唯一性。在MySQL中,唯一约束可以用于一个或多个列上,以确保这些列中的每一行都是唯一的。这种约束可以用于避免重复数据的插入,从而减少数据不一致性的可能性。唯一约束通常用于具有唯一标识的表中,例如用户表、订单表等。通过在表中添加唯一约束,可以确保每一行数据的唯一性,从而避免重复数据的插入,并提高数据的一致性和可靠性。在MySQL中,唯一约束通常用于主键、外键、唯一索引等类型。主键用于确保表中每一行的唯一性,而外键用于建立表之间的关联关系,并确保关联表中的数据的一致性。唯一索引则是一种特殊的索引,它只能包含唯一的数据,通常用于快速查找和排序。总之,MySQL唯一约束的目的是确保表中每一行的唯一性,避免重复数据的插入,并提高数据的一致性和可靠性。
30.SQL 约束-默认值
默认值:
列名 字段类型 DEFAULT 默认值
字段指定默认值:
-- 创建带有默认值的表
CREATE TABLE emp7(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
-- 为 sex 字段添加默认值
sex CHAR(1) DEFAULT '女'
);