mysql数据库系列1(超全,超详细)
本章介绍mysql数据库
1、一些不值钱的数据库概念
1、数据库: 以一定方式组织在一起,能被多个用户共享的,具有尽量小的冗余度,与应用程序彼此独立的数据集合。
2、DBMS(database management system)数据库管理系统:常用的DBMS有很多,这里列举几个
关系型:Mysql, MSSqlserver, Oracle, DB2, Access等
非关系型: Redis, MongoDB, Hbase
关系型数据库最大的特点:数据是由行列对齐的二维表组成
3、关系型数据库通常由以下几个组件组成:
(1)、Server服务:是运行在服务器硬件上,为客户端提供特定功能的软件程序或系统,直观一点,可以打开服务管理器看一下,这些就是服务

(2)、Client客户端:用户与服务器之间的交互入口(图像界面)。比如sqlyog,navicat, mysql>命令
服务和客户端的关系(下图): 所以核心是Server

(3)、Data数据
(4)、DBA数据库管理员:负责数据库系统的设计、部署、维护、优化及安全管理,确保其稳定、高效、安全运行的专业技术人员。
(5)、各种关系型数据库的比较

2、mysql数据库安装
具体安装教程可以查看下面这篇博客,介绍的非常详细
3、常用命令
安装好mysql数据库后,还需要了解一些常用命令(需要以管理员身份打开命令提示符)
1、net start mysql //启动数据库
2、mysql -u 用户名 -p //登录
3、select vision(); //查看mysql版本
4、show databases; //查看有哪些库
5、create database 数据库名; //创建数据库
6、use test; //切换数据库
7、select database(); //查看当前使用的是哪个数据库
8、show tables; //查看当前使用的数据库中有哪些表
9、create table 表名 (字段1 数据类型 [约束],字段2 数据类型 [约束], ...); //在当前数据库中建表
10、drop table 表名; //删除表
11、drop database 库名 //删除库
12、exit;//退出数据库
13、mysqldump -u用户名 -p密码 数据库名>d:/导出的文件命名.sql //导出库 需要先退出数据库再执行
3.1、启动mysql数据库
net start mysql
如下图显示表示启动成功,每次使用数据库之前都需要启动

3.2、登录
mysql -u 用户名 -p
输入命令后,需要输入密码,如下图显示表示登录成功

3.3、查看mysql版本
登录mysql后,在mysql命令行下执行
select vision();

3.4、查看有哪些库
show databases;
查看成功,显示建立了哪些数据库

3.5、创建数据库
create database 数据库名;
3.6、切换数据库
use test;
输入显示数据库切换成功
3.7、查看当前用的是哪个数据库
select database();
3.8、查看当前数据库中有哪些表
show tables;
3.9、在当前数据库中建表
create table 表名 (
字段1 数据类型 [约束],
字段2 数据类型 [约束],
...
);
3.10、删除表
drop table 表名;
3.11、删除库
不要轻易使用这个命令,一不小心删错库的话真的会吓死人.......!!!!!
drop database 库名;
3.12、退出登录
执行exit;就可以退出mysql数据库

3.13、导出一个库
导库的时候不能再mysql命令下导,需要先退出mysql,然后输入以下命令
mysqldump -u用户名 -p密码 数据库名>d:/导出的文件命名.sql

3.14 、导出全部库
mysqldump -u用户名 -p密码 --all-databases>d:/导出的文件命名.sql
//这个命令也需要退出mysql后再执行
4、mysql客户端工具
博主推荐navicat、sqlyog、idea自带的图形化工具(需要旗舰版),博主个人比较喜欢navicat和idea自带的图形化工具,下面是navicat、sqlyog两个工具的安装教程
1、navicat安装教程

2、sqlyog安装教程
5、SQL简介
1、sql:结构化查询语言,用来和数据库交互的语言
2、注意:
(1)、sql中,字符串要用‘’引起来
(2)、sql中,关键字大小写不敏感,字段大小写不敏感,表名大小写不敏感,数据大小写不敏感(Oracle是区分数据大小写的)
3、一些不值钱的概念:
SQL语言主要分为下面几种(了解一下即可)
|
分类 |
全称 |
说明 |
主要语句 |
|---|---|---|---|
|
DDL |
数据定义语言 (Data Definition Language) |
定义和管理数据库结构(库、表、索引等) |
|
|
DML |
数据操作语言 (Data Manipulation Language) |
对表中的数据进行增删改 |
|
|
DQL |
数据查询语言 (Data Query Language) |
查询表中的数据 |
|
|
DCL |
数据控制语言 (Data Control Language) |
控制数据库访问权限 |
|
|
TCL |
事务控制语言 (Transaction Control Language) |
控制数据库事务 |
|
5.1 表的创建和管理
数据库的核心是表,下面介绍和表相关的几个概念、以及和表相关的操作。
1、主键: 表中唯一标识(比如你的身份证号可以唯一标识你的身份)一行数据的列,可以定义为主键(主键也可以是多个复合列),主键不能为null,主键不能重复。mysql和sqlserver支持自增主键,但oracle不支持
最好使用没有意义的列做主键,比如设置一个id是最好的(当然这只是博主的个人建议啦)。
比如下面这张表中,我的主键是Id,但是能不能用admin_name做主键呢? 当然不能,因为不能保证用户名不重复。

2、创建表
这里使用navicat示例(需要先连接上数据库哦,上文已经说怎么连接啦),有的小伙伴可能是第一次使用,所以这里先从建数据库说起吧
(1)、新建数据库

(2)、在数据库中建表(navicat中)

创建完成后,就长这样

用建表语句创建(这里以创建一个教师信息表为例)

mysql建表语句
-- 创建表
CREATE TABLE table_name (
column1 datatype [constraints], //元素 数据类型 约束
column2 datatype [constraints],
column3 datatype [constraints],
...
PRIMARY KEY (column_name),
FOREIGN KEY (column_name) REFERENCES other_table(column_name)
);
示例
create table teacherInf(
id int primary key auto_increment,#设置id为主键,并且自动增长
teacherName varchar(20),
age int,
sex int #1表示女性,2表示男性
)
写完建表语句后,点击运行即可创建表
(3)、查看表结构

---查看表结构
desc 表名;
(4)、删除表
---会把表结构和数据一起删除,慎用
drop table 表名;
(5)、修改表
-- 修改表 (ALTER TABLE)
-- 添加列
ALTER TABLE 表名 ADD 列名 数据类型 [约束];
-- 修改列数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
-- 修改列名和类型
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型;
-- 删除列
ALTER TABLE 表名 DROP COLUMN 列名;
-- 添加主键
ALTER TABLE 表名 ADD PRIMARY KEY (列名);
-- 删除表
DROP TABLE 表名;
DROP TABLE IF EXISTS 表名;
-- 清空表 (删除所有数据,但保留结构)
TRUNCATE TABLE 表名;
5.2、数据插入语句(insert)
insert语句的基本形式是指定表名和要插入的值
(1)、基本语法:
1、INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
如果打算为表的所有列都插入数据,可以更改为
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
示例

(2)、几点说明
自增主键,在添加数据时不用管理,比如,你把id设置成了primary key auto_increment 的话,在添加数据时,不用添加这一列
字符串,日期类等,一定要用' '引起来
5.3、数据更新语句(update)
(1)、基础语法
UPDATE [LOW_PRIORITY] [IGNORE] 表名
SET column1 = value1, column2 = value2, ...
[WHERE condition]
[ORDER BY ...]
[LIMIT row_count];
示例: 将 students表中 id为 101 的学生的分数改为 100
UPDATE students SET studentScore = 100 WHERE id = 101;
5.4、数据删除语句(delete、truncate)
(1)、delete
DELETE语句用于删除表中的部分或全部数据,但会保留表结构
DELETE FROM [表名] WHERE [条件];
示例:删除 students表中 id为 5 的记录。
DELETE FROM students WHERE id = 5;
注意: 用delete删除数据以后,自增主键是不会重新复位的
(2)、truncate
TRUNCATE用于快速删除表中的所有数据,并重置自增计数器,但保留表结构
TRUNCATE TABLE [表名];
示例: 删除atudent表
TRUNCATE TABLE students;
5.5、数据查询语句(select)
(1)、基础查询
SELECT 列名1, 列名2, ... FROM 表名;
示例:查询user表中所有数据
SELECT * FROM users;
示例:查询 users 表中的 name 和 age 列
SELECT name, age FROM users;
(2)、用于过滤满足特定条件的记录
SELECT 列名 FROM 表名 WHERE 条件;
示例:查询年龄大于 18 的用户
SELECT * FROM users WHERE age > 18;
(3)、多条件组合(and,or,not)
SELECT 列名 FROM 表名 WHERE 条件1 AND 条件2;
SELECT 列名 FROM 表名 WHERE 条件1 OR 条件2;
SELECT 列名 FROM 表名 WHERE NOT 条件;
示例:查询年龄大于 18 且性别为男的用户
SELECT * FROM users WHERE age > 18 AND gender = 'male';
(4)、order by子句
SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];
ASC:升序(默认)
DESC:降序
示例:按年龄降序查询用户
SELECT * FROM users ORDER BY age DESC;
(5)、group by子句
用于将结果集按列分组,并可配合聚合函数使用
SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名;
常用聚合函数: COUNT()(计数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值)
示例:将用户按性别分组,统计每组人数
SELECT gender, COUNT(*) FROM users GROUP BY gender;
(6)、having子句
用于过滤分组后的结果(与 WHERE 不同,HAVING 可使用聚合函数)
SELECT 列名, 聚合函数 FROM 表名 GROUP BY 列名 HAVING 条件;
示例:查询人数大于 10 的性别分组
SELECT gender, COUNT(*) FROM users GROUP BY gender HAVING COUNT(*) > 10;
(7)、模糊查询
模糊查询主要通过 LIKE 关键字实现,通常与通配符配合使用,用于查找符合特定模式的字符串数据。
常用通配符:
%:匹配任意长度的字符串(包括 0 个字符)
_:匹配单个字符,_代表一个字符
基本语法:
SELECT 列名 FROM 表名 WHERE 列名 LIKE '模式';
示例:
以特定字符开头
-- 查询名字以"张"开头的用户
SELECT * FROM users WHERE name LIKE '张%';
以特定字符结尾
-- 查询邮箱以".com"结尾的用户
SELECT * FROM users WHERE email LIKE '%.com';
包含特定字符
-- 查询地址中包含"北京"的用户
SELECT * FROM users WHERE address LIKE '%北京%';
匹配特定长度的字符:
-- 查询名字是3个字符且以"李"开头的用户("李_"匹配2个字符,加上"李"共3个)
SELECT * FROM users WHERE name LIKE '李__';
(7)、其他
1、SELECT 列名 FROM 表名 LIMIT 数量; ---用于限制返回的记录数
---示例:查询前 10 条用户记录:
SELECT * FROM users LIMIT 10;
2、join子句
SELECT 列名 FROM 表1 JOIN 表2 ON 表1.列 = 表2.列;
---INNER JOIN:只返回两个表中匹配的记录
---LEFT JOIN:返回左表所有记录,以及右表中匹配的记录
---RIGHT JOIN:返回右表所有记录,以及左表中匹配的记录
---FULL JOIN:返回两个表中所有记录(MySQL 不直接支持,可通过 UNION 实现)
---示例:查询用户及其订单信息 两个表,一个用户(users)表,一个订单(orders)表
SELECT users.name, orders.order_id
FROM users
INNER JOIN orders
ON users.id = orders.user_id;
5.6、空值处理
(1)、任何数和null相加的值都为null
(2)、聚合函数SUM() 、MAX()、MIN()等:均忽略null
示例:
-- 统计所有用户(包括 age 为 NULL 的)
SELECT COUNT(*) FROM users;
-- 统计 age 不为 NULL 的用户数
SELECT COUNT(age) FROM users;
-- 计算 age 的平均值(自动忽略 NULL)
SELECT AVG(age) FROM users;
(3)、使用ifnull()可以替换空值
-- 将 age 为 NULL 的记录显示为 0
SELECT name, IFNULL(age, 0) AS age FROM users;
(4)、空值查询
示例:
-- 查询 age 为 NULL 的记录
SELECT * FROM users WHERE age IS NULL;
-- 查询 age 不为 NULL 的记录
SELECT * FROM users WHERE age IS NOT NULL;
(5)、更新空值
将字段更新为 NULL 时,直接赋值 NULL
示例:
-- 将 id=5 的用户 age 设为 NULL
UPDATE users SET age = NULL WHERE id = 5;
(6)、常用sql语句总结
博主把常用的sql语句都列到下面啦
数据查询语言:主要用于从表中检索数据,核心是SELECT语句
-- 基础查询
SELECT 列1, 列2 FROM 表名; -- 查询指定列
SELECT * FROM 表名; -- 查询所有列
-- 条件查询
SELECT * FROM 表名 WHERE 列名 = 值; -- 等于
SELECT * FROM 表名 WHERE 列名 > 值 AND 列名 < 值; -- 多条件
SELECT * FROM 表名 WHERE 列名 IN (值1, 值2); -- 在范围内
SELECT * FROM 表名 WHERE 列名 LIKE '张%'; -- 模糊查询(%匹配任意字符)
-- 排序与限制
SELECT * FROM 表名 ORDER BY 列名 ASC; -- 升序(默认)
SELECT * FROM 表名 ORDER BY 列名 DESC; -- 降序
SELECT * FROM 表名 LIMIT 10 OFFSET 5; -- 从第5条开始取10条
-- 聚合与分组
SELECT COUNT(*) AS 总数 FROM 表名; -- 计数
SELECT AVG(列名) AS 平均值 FROM 表名; -- 平均值
SELECT 分组列, SUM(数值列) FROM 表名 GROUP BY 分组列; -- 分组统计
SELECT 分组列, COUNT(*) FROM 表名 GROUP BY 分组列 HAVING COUNT(*) > 10; -- 分组筛选
-- 多表连接
SELECT a.列, b.列 FROM 表1 a INNER JOIN 表2 b ON a.关联列 = b.关联列; -- 内连接
SELECT a.列, b.列 FROM 表1 a LEFT JOIN 表2 b ON a.关联列 = b.关联列; -- 左连接
SELECT a.列, b.列 FROM 表1 a RIGHT JOIN 表2 b ON a.关联列 = b.关联列; -- 右连接
数据操纵语言:添加、删除、修改表中的数据
-- 插入数据
INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2); -- 指定列插入
INSERT INTO 表名 VALUES (值1, 值2, ...); -- 按表结构顺序插入
INSERT INTO 表名 SELECT 列1, 列2 FROM 另一表; -- 从其他表插入
-- 更新数据
UPDATE 表名 SET 列1 = 新值 WHERE 条件; -- 带条件更新
UPDATE 表名 SET 列1 = 列1 + 10; -- 全表更新(谨慎使用)
-- 删除数据
DELETE FROM 表名 WHERE 条件; -- 带条件删除
DELETE FROM 表名; -- 删除所有数据(保留表结构)
TRUNCATE TABLE 表名; -- 清空表(效率更高,不可回滚)
数据控制语言:用于管理数据库权限
-- 授权
GRANT SELECT, INSERT ON 表名 TO 用户名; -- 授予指定权限
GRANT ALL PRIVILEGES ON 数据库名.* TO 用户名; -- 授予所有权限
-- 撤销权限
REVOKE DELETE ON 表名 FROM 用户名; -- 撤销指定权限
-- 创建用户
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
这章就更新到这里啦,下章是本章节的第二章,如果认为博主的文章有用的话,记得关注一下哟~
更多推荐







所有评论(0)