本章介绍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数据库安装

具体安装教程可以查看下面这篇博客,介绍的非常详细

https://blog.csdn.net/2301_78341216/article/details/138858042?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-138858042.142^v102^pc_search_result_base2&spm=1018.2226.3001.4187https://blog.csdn.net/2301_78341216/article/details/138858042?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-138858042.142^v102^pc_search_result_base2&spm=1018.2226.3001.4187

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安装教程

https://blog.csdn.net/2401_87463146/article/details/142530460?ops_request_misc=%257B%2522request%255Fid%2522%253A%252235444212a9e54e9e2904f2361d728e4b%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=35444212a9e54e9e2904f2361d728e4b&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-142530460-null-null.142^v102^pc_search_result_base2&utm_term=navicat%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187https://blog.csdn.net/2401_87463146/article/details/142530460?ops_request_misc=%257B%2522request%255Fid%2522%253A%252235444212a9e54e9e2904f2361d728e4b%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=35444212a9e54e9e2904f2361d728e4b&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-142530460-null-null.142^v102^pc_search_result_base2&utm_term=navicat%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187安装完成后,以管理员身份打开命令行,启动mysql,并登录数据库,然后打开navicat连接数据库

2、sqlyog安装教程

https://blog.csdn.net/weixin_39550091/article/details/114488314?ops_request_misc=&request_id=&biz_id=102&utm_term=sqlyog%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-114488314.142^v102^pc_search_result_base2&spm=1018.2226.3001.4187https://blog.csdn.net/weixin_39550091/article/details/114488314?ops_request_misc=&request_id=&biz_id=102&utm_term=sqlyog%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-114488314.142^v102^pc_search_result_base2&spm=1018.2226.3001.4187

5、SQL简介

1、sql:结构化查询语言,用来和数据库交互的语言

2、注意:

(1)、sql中,字符串要用‘’引起来

(2)、sql中,关键字大小写不敏感,字段大小写不敏感,表名大小写不敏感,数据大小写不敏感(Oracle是区分数据大小写的)

3、一些不值钱的概念:

SQL语言主要分为下面几种(了解一下即可)

分类

全称

说明

主要语句

​DDL​

数据定义语言 (Data Definition Language)

定义和管理数据库结构(库、表、索引等)

CREATEALTERDROPTRUNCATERENAME

​DML​

数据操作语言 (Data Manipulation Language)

对表中的​​数据​​进行增删改

INSERTUPDATEDELETESELECT ... INTO

​DQL​

数据查询语言 (Data Query Language)

查询表中的数据

SELECT(及其所有子句)

​DCL​

数据控制语言 (Data Control Language)

控制数据库访问权限

GRANTREVOKE

​TCL​

事务控制语言 (Transaction Control Language)

控制数据库事务

COMMITROLLBACKSAVEPOINT

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 '密码';

这章就更新到这里啦,下章是本章节的第二章,如果认为博主的文章有用的话,记得关注一下哟~

    Logo

    腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

    更多推荐