当前位置: 首页 > news >正文

MySQL入门级操作

一、数据库理论基础

1、什么是数据库

存储数据的仓库,是长期存放在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按照一定数据模型组织、描述和存储,具有较小的冗余度,较高的独立性和易扩展性,并为各种用户共享,总结为以下几点:

  • 数据结构化

  • 数据的共享性高,冗余度低,易扩充

  • 数据独立性高

  • 数据由 DBMS 统一管理和控制(安全性、完整性、并发控制、故障恢复)

2、常见数据库

关系型数据库:Oracle、DB2、Microsoft SQL Server、MicrosoftAccess、MySQL、浪潮K-DB 、武汉达梦、南大通用、人大金仓等

非关系型数据库:NoSQL(Not Only SQL )

3、MySQL数据库概述

DB-Engines Ranking - popularity ranking of database management systems

MySQL是一个中小型关系数据库管理系统

3.1 MySQL特性

  1. 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。

  2. 支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。

  3. 为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。

  4. 支持多线程,充分利用CPU资源,支持多用户。

  5. 优化的SQL查询算法,有效地提高查询速度。

  6. 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。

  7. 提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。

  8. 提供TCP/IP、ODBC和JDBC等多种数据库连接途径。

  9. 提供用于管理、检查、优化数据库操作的管理工具。

  10. 可以处理拥有上千万条记录的大型数据库。

二、安装MySQL(见上一个博客)

三、MySQL数据库和表操作

1、SQL语句

SQL:结构化查询语言,在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。

2、SQL分类

DDL:数据定义语言,定义对数据库对象(库、表、列、索引)的操作。 create、drop、alter、rename、 truncate等

DML:数据操作语言,定义对数据库记录的操作。 insert、delete、update、select等

DQL:数据查询语言,select

DCL:数据控制语言,定义对数据库、表、字段、用户的访问权限和安全级别,grant

3、SQL语句的书写规范

在数据库系统中,SQL语句不区分大小写(关键字建议用大写) ,但字符串常量区分大小写。

SQL语句可单行或多行书写,以“;”结尾。

关键词不能跨多行或简写。

SELECT * FROM tb_table

注释: SQL标准: /**/。

多行注释 “-- ”

单行注释 MySQL注释: “#”

4、MySQL自带数据库

Information_schema: 主要存储了系统中的一些数据库对象信息:如用户表信息、列信息、权限信 息、字符集信息、分区信息等。(数据字典表)

performance_schema: 主要存储数据库服务器的性能参数

mysql: 存储了系统的用户权限信息及帮助信息。

sys: 5.7新增,之前版本需要手工导入。这个库是通过视图的形式把information_schema

performance_schema结合起来,查询出更加令人容易理解的数据

5、utf8和utf8mb4的区别

utf8:只支持基本多语言平面(BMP)的字符(最多3字节)

uft8mb4:支持完整的Unicode字符集,包括补充字符(如emoji、某些罕见汉字等,最多四字节)

修改为utf8

修改my.cnf配置文件,可修改MySQL默认的字符集,修改完毕重启MySQL
1.在[mysqld]下添加
    default-character-set=utf8 #适合5.1及以前版本
    (mysql 5.5及以后版本添加character-set-server=utf8)
    init_connect = 'SET NAMES utf8'
2.在[client]下添加
    default-character-set=utf8
3. 5.8开始,官方建议使用utf8mb4。

6、数据类型

Text类型

Number类型

data类型

常用数据类型

7、数据库约束

1、主键约束

主键从功能上看相当于非空且唯,一个表中只允许一个主键,主键是表中唯一确定一行数据的字段。一般建议主键采用“int类型”,一般建议由数据库自身维护这个字段的值。当建立主键约束时,MySQL为主键创建对应的索引——主键索引,主键约束名总为primary。

四、SQL之DML

有关数据表的DML操作:INSERT INTO、DELETE、TRUNCATE、UPDATE、SELECT

条件查询、查询排序、聚合函数、分组查询

1、insert

insert INTO table_name[(field1 [, field2 ……]) values(value1 [, vaule2 ……])  [,()]];
mysql> INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区'); 

2、update

update table_name set 字段1=新值 [, 字段2=新值, 字段3=字段3 + 1]   [where 条件];
update student set age=20 where id=1;

3、replace

当表里面没有这条数据时,则执行行插入,否则执行更新

注意:replace本质是先删除,再插入

replace into student(id,name,password) values(100,"hql","123")

4、select

select *|字段1 [, 字段2 ……] from 表名称 [, 表名称2……] [where 条件] [group by 字段 [having 分组后的筛选]] [order by 字段 [desc|asc] [字段2 [desc|asc] ……]] [limit 分页]

4.1 简单的SQL查询

-- 查询表中所有数据
select * from student;

-- 查询所需要的字段信息
select id,name from student;

-- 根据条件来查询信息
select name from student where id=1;
select password from student where name="hql";

4.2 条件查询

条件判断

  • = 判断两次的值是否相等

  • is 判断空null

  • is not null来判断不为空

  • <=> 可以判断null或者普通值    

  • != 不等于

  • <>也是不等于

  • 4.4 逻辑运算符

逻辑运算符是多条件关联的一种方式。(与或非)

and、or、not

注意:在sql中,如果要提升条件的运行顺序,或者提高条件的优先级别,则需要使用括号来提升。

-- 等值查询
select uname,age from student where age=20;


-- NULL不能用=判断
select * from student where age is NULL;

-- 逻辑运算符
select * from student where age<=20;
select * from sutdent age>=20 and age<=30;

-- and运算符(类似还有or)
select uname,age from student where uname="黄%" and age>=18;


-- 别名
select uname as "名字",age as "年龄" from student where age between 20 and 30;

-- IN
select uname,age from student where age in (18,20,30);

-- not
select uname,age from student where age not in (18,20,30);

-- like (%) 可表示零或多个字符、( _ ) 可表示一个字符
select uname from student where uname like "黄%";


4.3 分组统计与筛选

-- 分组(group by)
select gender as "性别" from student group by gender;

-- 统计(count(*))
select gender as "性别",count(*) as "人数" from student group by gender;

-- 分组后的条件筛选
select gender as "性别",count(*) as "人数" from student group by gender having count(gender)>4;

4.4 排序

-- 默认升序(asc)
select * from student order bby age;

-- 设置降序
select * from student order by desc;

--当存在多字段排序时,根据顺序依次排序
select * from student order by age asc,id desc;

4.5 分页

-- 显示前两条数据
select * from student limit 2;

-- 显示第6条数据到第9条数据
select * from student limit 6,4;

4.6 多表关联查询

多表关联

外键:指的是两张或者多张表之间关联关系的字段。

外键约束:是表的约束,是约束表在插入外键数据时能够正确的插入。

外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
外键确保了相关的两个字段的两个关系:
子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。
当主表的记录被子表参照时,主表记录不允许被删除。
外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录。

表与表之间的关联

当表与表之间存在了外键,这就意味着,这两张表之间存在某种关联关系。

一旦表存在了关联关系,则会进行外键设计,如果设计外键,将外键设计在哪张表中?

  • 一对一 :外键可以设计在任意一张表中

  • 一对多 :外键必须设计在多方

  • 多对多 :创建第三张表,来专门描述两张表的关联关系

-- 先看两张表的结构
mysql> select * from t_stu;
+----+--------+------+
| id | sname  | c_id |
+----+--------+------+
|  1 | 张三   |    1 |
|  3 | 李四   |    2 |
|  4 | 王五   |    3 |
|  5 | 老六   |    4 |
+----+--------+------+
4 rows in set (0.00 sec)
 
mysql> select * from t_class;
+----+-----------------------+
| id | cname                 |
+----+-----------------------+
|  1 | MYSQL                 |
|  2 | Python                |
|  3 | JAVA                  |
|  4 | 计算机网络基础        |
+----+-----------------------+
4 rows in set (0.00 sec)
 
-- 直接查询两张表(引发笛卡尔积现象)
mysql> select * from t_stu,t_class;
+----+--------+------+----+-----------------------+
| id | sname  | c_id | id | cname                 |
+----+--------+------+----+-----------------------+
|  5 | 老六   |    4 |  1 | MYSQL                 |
|  4 | 王五   |    3 |  1 | MYSQL                 |
|  3 | 李四   |    2 |  1 | MYSQL                 |
|  1 | 张三   |    1 |  1 | MYSQL                 |
|  5 | 老六   |    4 |  2 | Python                |
|  4 | 王五   |    3 |  2 | Python                |
|  3 | 李四   |    2 |  2 | Python                |
|  1 | 张三   |    1 |  2 | Python                |
|  5 | 老六   |    4 |  3 | JAVA                  |
|  4 | 王五   |    3 |  3 | JAVA                  |
|  3 | 李四   |    2 |  3 | JAVA                  |
|  1 | 张三   |    1 |  3 | JAVA                  |
|  5 | 老六   |    4 |  4 | 计算机网络基础        |
|  4 | 王五   |    3 |  4 | 计算机网络基础        |
|  3 | 李四   |    2 |  4 | 计算机网络基础        |
|  1 | 张三   |    1 |  4 | 计算机网络基础        |
+----+--------+------+----+-----------------------+
16 rows in set (0.00 sec)
 
-- 给上条件可以解决
mysql> select * from t_stu,t_class where t_stu.c_id = t_class.id;
+----+--------+------+----+-----------------------+
| id | sname  | c_id | id | cname                 |
+----+--------+------+----+-----------------------+
|  1 | 张三   |    1 |  1 | MYSQL                 |
|  3 | 李四   |    2 |  2 | Python                |
|  4 | 王五   |    3 |  3 | JAVA                  |
|  5 | 老六   |    4 |  4 | 计算机网络基础        |
+----+--------+------+----+-----------------------+
4 rows in set (0.00 sec)
 
-- 使用join(没有条件时引发笛卡尔积)
mysql> select * from t_stu join t_class;
+----+--------+------+----+-----------------------+
| id | sname  | c_id | id | cname                 |
+----+--------+------+----+-----------------------+
|  5 | 老六   |    4 |  1 | MYSQL                 |
|  4 | 王五   |    3 |  1 | MYSQL                 |
|  3 | 李四   |    2 |  1 | MYSQL                 |
|  1 | 张三   |    1 |  1 | MYSQL                 |
|  5 | 老六   |    4 |  2 | Python                |
|  4 | 王五   |    3 |  2 | Python                |
|  3 | 李四   |    2 |  2 | Python                |
|  1 | 张三   |    1 |  2 | Python                |
|  5 | 老六   |    4 |  3 | JAVA                  |
|  4 | 王五   |    3 |  3 | JAVA                  |
|  3 | 李四   |    2 |  3 | JAVA                  |
|  1 | 张三   |    1 |  3 | JAVA                  |
|  5 | 老六   |    4 |  4 | 计算机网络基础        |
|  4 | 王五   |    3 |  4 | 计算机网络基础        |
|  3 | 李四   |    2 |  4 | 计算机网络基础        |
|  1 | 张三   |    1 |  4 | 计算机网络基础        |
+----+--------+------+----+-----------------------+
16 rows in set (0.00 sec)
 
-- 带上条件
mysql> select * from t_stu join t_class where t_stu.c_id = t_class.id;
+----+--------+------+----+-----------------------+
| id | sname  | c_id | id | cname                 |
+----+--------+------+----+-----------------------+
|  1 | 张三   |    1 |  1 | MYSQL                 |
|  3 | 李四   |    2 |  2 | Python                |
|  4 | 王五   |    3 |  3 | JAVA                  |
|  5 | 老六   |    4 |  4 | 计算机网络基础        |
+----+--------+------+----+-----------------------+
4 rows in set (0.00 sec)
 

5、SQL中的函数

5.1 聚合函数

除了COUNT()以外,聚合函数都会忽略NULL值。

5.2 数字型函数

5.3 字符串函数

5.4 日期和时间函数

5.5 流程控制函数

相关文章:

  • Ubuntu服务器中Swapper如何与虚拟内存配合
  • 【八股】未知宽高元素水平垂直居中的三种方法
  • CNN基础考点
  • 【C++ Linux编程进阶 从0实现muduo库系列】第五讲:实现C++日志库
  • system V 消息队列信息量(了解)
  • 基于MoE架构的AIGC引擎:海螺AI重新定义人机协同新范式
  • 青柠视频云支持808协议和1078协议,支持SIP信令日志追踪
  • C++ queue容器总结
  • Android系统的安全问题 - Linux的能力模型(Capability)和 SELinux 的区别
  • MarkLogic索引详解
  • C++20 中的std::c8rtomb和 std::mbrtoc8
  • LangChain开发(六)多模态输入与自定义输出
  • 国外计算机证书推荐(考证)(6 Sigma、AWS、APICS、IIA、Microsoft、Oracle、PMI、Red Hat)
  • Vue 把 Echarts 图传给后端:文件流信息方式传递
  • BFS专项练习 —— 蓝桥杯刷题
  • Java基础 3.26
  • uniapp主题切换功能,适配H5、小程序
  • PyCharm操作基础指南
  • 智能科技与美学融合,赵伟辰荣膺 2025 iF 设计大奖
  • Redis Stack 基础知识-构建现代实时数据平台
  • 气急败坏!20多名台湾艺人被台当局列为“重点核查对象”
  • 工人日报:应对“职场肥胖”,健康与减重同受关注
  • 商务部:长和集团出售港口交易各方不得规避审查
  • 南京江宁区市监局通报:盒马一批次猕猴桃检出膨大剂超标
  • 宜昌谱写新叙事:长江大保护与高质量发展如何相互成就
  • 沙青青评《通勤梦魇》︱“人机组合”的通勤之路