MySQL常用基础 - 小白必看(二)

news2025/1/21 18:52:25

MySQL数据库基本操作

在这里插入图片描述

一、DDL

概念:是一个数据定义语言

该语言部分包括:

1、对数据库的常用操作

  • 创建数据库:

  • 1、create database 数据库名 (直接删除)

  • 2、create database if not exists 数据库名 (判断数据库是否存在,不存在则创建)

  • 3、create database if not exists 数据库名 charset =字符编码 (在2的基础上加上数据库的字符编码)

    create database if not exists demo charset =utf8
    
  • 切换数据库:use 数据库名

    use demo
    
  • 删除数据库:

    1、drop database 数据库 (直接删除)

    2、drop database if exists 数据库名(判断是否存在数据库,存在即删除)

    drop database if exists demo
    
  • 查看所有数据库

    show databases

  • 修改数据库编码

    ALTER DATABASE 数据库名 CHARSET 字符编码;

    ALTER DATABASE demo CHARSET utf8;
    

    ALTER DATABASE 数据库名 character set 字符编码;

    alter database newer2 character set utf8
    

2、对表结构的常用操作

  • 创建表:

格式:create table if not exists 表名(

字段名1 字段类型(长度)约束,

字段名2 字段类型(长度)约束,

字段名3 字段类型(长度)约束,

字段名4 字段类型(长度)约束

);

 create table if not exists 表名(

字段名1 类型 (长度) 约束条件 comment '字段说明' ,

字段名2 类型 (长度) 约束条件 comment '字段说明' ,

字段名3 类型 (长度) 约束条件 comment '字段说明' 

)表的一些设置;

数据类型:

数据类型关键字
整型int integer
浮点类型double, float
decimal(6,2)整个小数长5位,小数点不占位,小数是两位(9999.99)
字符串型char:定长,char(2)最长存储2个字符,无论有没有2个字符,都是占2个字符
varchar:可变长度,varchar(10) 最长可以保存10个字符
日期类型date(2010-10-11) 或time(19:22:22) 、datetime(2010-10-11 19:22:33)

对表的一些其他操作:

  • 查看当前数据库的所有表名称:
show tables;
  • 查看表结构:
desc 表格;
  • 删除表:
drop table 表名
  • 查询表创建语句:
show create table  表名
  • 修改表结构
alter table 表名
  • 添加列add
alter table 表名 add 字段名 数据类型;
  • 修改列数据类型 modify
alter table 表名 modify 字段名 数据类型;
  • 修改列名和类型 change
alter table 表名 change 旧字段名 新的字段名 数据类型;
  • 删除列
alter table 表名 drop 字段名;
  • 修改表名
rename table 旧的表名 to 新的表名;
  • 另一种修改表名写法
alter table 旧表名 rename 新表名;

二、DML

定义:指数据操作语言,用来对数据库中表的数据进行记录与更新

插入:insert

-- 插入全部字段
-- 写数据的时候,有多少列就有多少值
insert into 表名 values(列1的值,列2的值,……);
-- 只插入表中几列的值,其它列不写值
insert into 表名 (列名1,列名3)values(列1的值,列3的值);
insert into 表名 values
(列1的值,列2的值,……),
(列1的值,列2的值,……),
(列1的值,列2的值,……),
(列1的值,列2的值,……),
(列1的值,列2的值,……);

删除:delete

delete from 表名 where 条件; -- 带条件删除
delete from 表名 ; -- 删除整个表数据
truncate table 表名; -- 删除整个表数据
truncate  表名; -- 删除整个表数据

更新:update

update 表名 set 字段名=值,字段名=值,字段名=.....;-- 修改整个表名
update 表名 set 字段名=值,字段名=值,字段名=.....where 条件; -- 指定修改

三:约束

概念:实际上就是表中数据的限制条件

作用:表在设计的时候加入约束的目的,就是为了保证表中的记录完整性和有效性

约束分类:

主键约束(primary key) PK

概念:

  1. MySQL主键约束是一个列或多个列的组合,其值能唯一的标识表中的每一行,方便在RDBMS中尽快的找到某一个行。
  2. 主键约束相当于唯一约束+非空约束的组合,主键约束的列不允许重复,也不允许出现空值
  3. 每个表最多允许一个主键
  4. 主键约束的关键字:primary key
  5. 当创建主键的约束的时候,系统会默认在所在的列和列组合上建立对应的唯一索引

操作:

  1. 添加单列主键

    定义完字段之后指定主键:

    create table 表名(
        字段1 类型(长度) 约束,
        ...,
        constraint 约束名     primary key (字段名)
    );
    

    在定义字段的同时指定主键:

    create table 表名(
    字段1 类型(长度)  primary key
    );
    
  2. 添加多列的联合主键

    就是这个主键是由一张表中多个字段组成

    注意:当主键是由多个字段组成时,不能直接在字段名后面声明主键约束;

    一张表只能有一个主键,联合主键也是一个主键。

    create table 表名(
        ...
        primary key(字段1,字段2,字段3...)
    );
    
  3. 删除主键

    alter table 表名 drop primary key;
    
  4. 创建表完成之后,添加主键

    alter table 表名 add primary key(字段名);
    

自增长约束(auto_increment)

概念:

​ 在MySQL中,当主键定义为自增长后,这个主键的值就不需要用户输入数据了,而是由数据库系统根据定义自动赋值,每增加一条记录,主键就会自动以相同的步长进行增长,通过给字段添加auto_increment属性来实现主键自增长

create table 表名(
字段1 类型(长度) 约束 auto_increment
)auto_increment=100; -- 从100开始

特点:

  1. 默认情况下,auto_increment的初始值为1,每增加一条记录就字段值加一;

  2. 一个表中只能有一个字段使用auto_increment约束,且该字段必须有唯一索引,避免序号重复(主键或主键一部分)

  3. 自增长约束的字段必须具备not null 属性

  4. auto_increment约束的字段只能是整数类型(tinyint,int,BIGINT)等

  5. auto_increment约束字段的最大值是被该字段的数据类型约束,如果到达上限,auto_increment约束就会失效

指定自增字段的初始值

alter table 表名 auto_increment=初始值;

非空约束(not null)

概念:非空约束,指字段的值不能为空,对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错

字段名 数据类型 not null;

alter table 表名 modify 字段 类型 not null;

唯一性约束(unique key)

概念:指所有记录中字段的值不能出现重复,例如id字段加上唯一性约束以后,每一条记录的id值都是唯一的,不能重复出现。

字段名 数据类型 unique ;

alter table 表名 add constraint 约束名 unique (指定列);


alter table 表名 drop index (约束名)字段名;-- 删除约束

默认约束(default)

概念:MySQL默认值约束用来指定某列的默认值

字段名 类型 default 默认值;

alter table 表名 modify 列名 类型 default 默认值; -- 可以修改,也可以添加

alter table 表名 modify column 字段名 类型 default null; -- 删除默认约束

外键约束(foreign key) FK

定义:外键约束是表的一个特殊字段,经常和主键约束一起使用,对于两个具有关联关系的表来说,相关字段中主所在表就是主表(父表),外键所在表就是从表(子表)

特点(定义一个外键时,需要遵守的规则):

  1. 主表必须已经存在于数据库中,或者是当前正在创建的表
  2. 必须为主表定义主键
  3. 主键不能包含空值,但是允许在外键中出现空值,也就是说,只要外键的每个非空值出现在指定的主键中,那么这个外键的内容就是正确的
  4. 在主表的表名后面指定列名或列名的组合,那么这个列或列的组合必须是主表的主键或候选键
  5. 外键中列的数目必须和主表的主键中的列的数目相同
  6. 外键中列的数据类型必须和主表的主键中的列的数据类型相同

方式一:在创建表的时候设置外键约束

语法:
constraint 外键名  foreign key 字段名 [,字段名2,...] references 主表名 主键列  [,主键列2,...]

例子:

create database mydb3; 
use mydb3;
-- 创建部门表
create table if not exists dept(
  deptno varchar(20) primary key ,  -- 部门号
  name varchar(20) -- 部门名字
);
create table if not exists emp(
  eid varchar(20) primary key , -- 员工编号
  ename varchar(20), -- 员工名字
  age int,  -- 员工年龄
  dept_id varchar(20),  -- 员工所属部门
  constraint emp_fk foreign key (dept_id) references dept (deptno)    -- 外键约束
);

方式二:在创建表之后设置外键约束

语法:alter table <数据表名> add constraint <外键名> foreign key(<列名>) references <主表名> (<列名>);

例子:
alter table emp add constraint emp_fk foreign key (dept_id) references dept (deptno);

删除外键约束:

语法:alter table <表名> drop foreign key <外键约束名>;

例子:alter table emp drop foreign key emp_fk;

四:DQL

基本查询,单表查询

简单语法:
select * from 表名 where 条件;

-- 1.查询所有的商品
SELECT * FROM product;
-- 2查询商品名称和价格
SELECT pname,price FROM product;
-- 3.表别名
SELECT * FROM product AS p WHERE p.pname="美的冰箱";
-- 4.列别名
SELECT pname 商品名,price 价格 FROM product
-- 5.去掉重复值
SELECT DISTINCT price FROM product
-- 查询结果是表达式;将使用商品的价格+10进行显示
SELECT pname,price+10 FROM product;
-- 查询商品名称为“海尔洗衣机”的商品所有信息:
SELECT * FROM product  WHERE pname="海尔洗衣机";
-- 查询价格为800商品
SELECT * FROM product  WHERE price=800;
-- 查询价格不是800的所有商品
SELECT * FROM product  WHERE NOT(price=800);
-- 查询商品价格大于60元的所有商品信息
SELECT * FROM product  WHERE price>60;
-- 查询商品价格在200到1000之间所有商品
SELECT * FROM product  WHERE price>=200 AND price<=1000;
SELECT * FROM product  WHERE price BETWEEN 200 AND 1000;
-- 查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price = 200 OR price = 800;
SELECT * FROM product WHERE price IN(200,800);
-- 查询含有‘裤'字的所有商品
SELECT * FROM product WHERE pname LIKE '%裤%' ;
-- 查询以'海'开头的所有商品
SELECT * FROM product WHERE pname LIKE '海%';
-- 查询第二个字为'蔻'的所有商品
SELECT * FROM product WHERE pname LIKE '_蔻%';
-- 查询category_id为null的商品
SELECT * FROM product WHERE category_id IS NULL ;
-- 查询category_id不为null的商品
SELECT * FROM product WHERE category_id IS NOT NULL ;
-- 使用least求最小值
SELECT LEAST(10,20,NULL,40);
-- 使用greatest求最大值
SELECT GREATEST(10,20,40);



复杂语法:
select[all|distinct] 目标列的表达式 别名,目标列的表达式 别名,... from 表名或视图名 别名,表名或视图名 别名 
<where 条件表达式> 
<group by <别名>>  -- 分组查询
<having <条件表达式>> -- 分组之后的条件删选
select * from 表名 order by 列名 [asc|desc]; -- 排序
特点:
asc是升序(默认),desc是降序
order by 用于子句中可以支持单个字段,多个字段,表达式,函数,别名
order by 子句,放在查询语句的最后面,limit子句除外
<limit 数字或者列表> -- 分页

排序查询

select * from 表名 order by 列名 [asc|desc]; -- 排序

特点:
asc是升序(默认),desc是降序
order by 用于子句中可以支持单个字段,多个字段,表达式,函数,别名
order by 子句,放在查询语句的最后面,limit子句除外

聚合查询

聚合函数:

  • count( ) 统计指定列不为null的记录的行数
  • sum( ) 计算指定列的数值和,如果指定的列的类型不是数值类型,那么计算的结果是0
  • max( ) 计算指定列的最大值,如果指定的列的类型是字符串类型,那么就使用字符串排序运算
  • min( ) 计算指定列的最小值,如果指定的列的类型是字符串类型,那么就使用字符串排序运算
  • avg( ) 计算指定列的平均值,如果指定的列的类型不是数值类型,那么计算的结果是0

聚合函数–null值的处理:

  • count函数对null值的处理:如果count函数的参数为*,则统计所有记录的个数,如果参数为字段,则不统计含有null值的记录个数

  • sum和avg函数对null值的处理:这两个函数是没有null值的存在,就好像是该记录不存在

  • max和min函数对null值的处理:这两个函数是没有null值的存在,就好像是该记录不存在

分组查询 (group by) 分组后条件筛选(having)

  • 分组之后对统计结果进行筛选的话必须使用having不能使用where

  • where子句用来筛选from子句中指定的操作所产生的行

  • group by 子句用来分组where子句的输出

  • having子句是用来从分组的结果中进行筛选

select * from 表名 group by  分组的字段 having 分组条件;

分页查询:limit

-- 显示前n条
select * from 表名 limit 条数; 
-- 分页显示
select * from 表名 limit m,n;
-- m代表整数,表示第几条索引开始,计算方式=((当前页-1)*每页显示条数)
-- n表示查询多少数据,计算方式=(每页的条数*当前页数)

五、多表查询

多表操作:对两个或两个以上的表进行操作

多表之间的关系:MySQL中多表之间的关系可以概括为:一对一,一对多,多对一,多对多

一对一关系:

实现:在任意表中添加唯一外键,指向另一方主键,确保一对一关系(少见,遇见了就合并)

一对多/多对一关系:

例如:部门和员工

一个部门有多个员工,一个员工只能对应一个部门

实现:在多的一方建立外键,指向一的一方的主键

多对多关系

例如:学生和课程

实现:需要借助第三张中间表,中间表至少包含两个字段,将多对多的关系拆成一对多的关系,中间表至少有两个外键,分别指向原来两个表的主键

多表联合查询

介绍:多表查询就是同时查询两个或两个以上的表,因为有时候用户在查看数据的时候,需要显示的数据来自于多张表

多表查询的分类

1,交叉连接查询:select * from 表A,表B;

2,内连接查询:关键字(inner join)

隐式内连接:select * from 表a,表b where 条件;

显示内连接:select * from 表A inner join 表B on 条件;(在MySQL中,inner可以省略)

3,外连接查询:关键字(outer join)

  • 左外连接:left outer join
  • 右外连接:right outer join
  • 满外连接:full outer join

4,子连接查询:select的嵌套

5,表的自关联:将一张表当成多张表使用

查询种类特点关键字
全连接交叉连接(笛卡尔积),把两张表的数据进行交叉组合,A*B了解
内连接两表的交集部分inner join
外连接左外连接:取左表的全部数据+左右两表的交集
右外连接:取右表的全部数据+左右两表的交集
自然连接natural join
和内连接有些相似,它会自动去掉相同的字段
取两表的交集数据,并且去掉相同的列
了解natural join
自连接需要使用表别名,并且使用一个关键字段进行连接join 使用表别名
嵌套连接子查询
查询语句当中再嵌套查询语句
select中嵌套select

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频的水印怎样去掉?这些去水印的方法值得你试试看

喜欢视频剪辑的你会不会经常遇到这种情况&#xff1a;每次上网查找的视频素材&#xff0c;保存下来后总是带有一些水印&#xff0c;这些水印不仅不够美观&#xff0c;而且还会遮挡住视频的一些部分&#xff0c;实在是烦人。如果你遇到这种情况&#xff0c;会很想知道“给视频无…

86、【栈与队列】leetcode ——39. 滑动窗口最大值:单调队列+滑动窗口(C++版本)

题目描述 239. 滑动窗口最大值 一、单调队列滑动窗口方法 本题的特点是维护一个窗口&#xff0c;在窗口不断向前移动时&#xff0c;获取其中的最大值。由于窗口在向前移动过程中&#xff0c;元素存在着进入和出去的连续顺序&#xff0c;与FIFO的特点类似。 故可考虑用队列实…

【数据结构】初识数据结构,十分钟带你玩转算法复杂度

目录 &#x1f34a;前言&#x1f34a;&#xff1a; &#x1f95d;一、初识数据结构&#x1f95d;&#xff1a; 1.数据结构&#xff1a; 2.算法&#xff1a; &#x1f353;二、算法效率&#x1f353;&#xff1a; &#x1f348;三、算法复杂度&#x1f348;&#xff1a; 1.时…

4-1文件管理-文件系统基础

文章目录一.文件的基本概念二.文件的逻辑结构&#xff08;一&#xff09;无结构文件/流式文件&#xff08;二&#xff09;有结构文件1.顺序文件2.索引文件3.索引顺序文件4.直接文件/散列文件三.文件目录四.文件的物理结构/文件分配方式1.连续分配2.链接分配3.索引分配五.文件存…

数据结构与算法基础(王卓)(8)附:关于new的使用方法详解

part 1&#xff1a; C中new的用法&#xff08;不过就是&#xff09;如下&#xff08;几种用法&#xff09;&#xff1a; 1&#xff1a; new<数据类型> 分配&#xff1a; 指定类型的&#xff0c;大小为1的&#xff0c;内存空间&#xff1b; int *i new int;//注意&am…

13_3、Java的IO流之节点流的使用

一、FileReader和FileWriter的使用1、数据读入操作说明&#xff1a;①read():返回读入的第一个字符&#xff0c;当读到文档末尾&#xff0c;返回-1②异常的处理&#xff1a;为了保证流资源一定会执行关闭操作&#xff0c;要对异常进行try-catch-finally处理③对于读入操作&…

【PWA学习】1. 初识 PWA

什么是PWA PWA(Progressive Web Apps&#xff0c;渐进式 Web 应用)运用现代的 Web API 以及传统的渐进式增强策略来创建跨平台 Web 应用程序。这些应用无处不在、功能丰富&#xff0c;使其具有与原生应用相同的用户体验优势 我们需要理解的是&#xff0c;PWA 不是某一项技术&am…

MAC(m1)-VMWare Fusion CentOS8设置静态IP、SSH连接

在使用虚拟机的时候&#xff0c;默认情况下使用的DHCP协议&#xff08;根据网段自动分配ip&#xff09;分配的动态IP地址&#xff0c; 使得每次打开虚拟机后当前的IP地址都会发生变化&#xff0c;这样不方便管理。为了能够给当前虚拟机设置 一个静态IP地址&#xff0c;方便后…

Linux的开发工具——软件包管理器 yum

目录 1 查看 2 安装 3 卸载 4 常用软件 5 扩展细节 5.1 yum源 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成window…

【自学Python】Python标识符和保留字

Python标识符 Python标识符教程 Python 对各种 变量、方法、函数等命名时使用的字符序列称为标识符。 也可以说凡是自己可以起名字的地方都叫标识符&#xff0c;简单地理解&#xff0c;标识符就是一个名字&#xff0c;它的主要作用就是作为变量、函数、类、模块以及其他对象…

柱承重式钢模块建筑结构体系适用高度研究

作者&#xff1a;陈志华 冯云鹏 刘佳迪 刘洋 钟旭 模块建筑网 导语 摘要&#xff1a;模块建筑作为一种新兴的建筑体系&#xff0c;具有较高的预制化和装配化程度&#xff0c;符合建筑工业化以及绿色建筑的发展要求&#xff0c;但国内的模块建筑大多只应用于低多层&#xff0c;…

[付源码+数据集]Github星标上万,23 个机器学习项目汇总

在本文中分享了涵盖面向初学者&#xff0c;中级专家和专家的23种机器学习项目创意&#xff0c;以获取有关该增长技术的真实经验。这些机器学习项目构想将帮助你了解在职业生涯中取得成功、和当下就业所需的所有实践。 通过项目学习是你短期内能做的最好投资&#xff0c;这些项…

.NET 6结合SkiaSharp实现拼接验证码功能

从最初的滑动验证码&#xff0c;到实现旋转验证码&#xff01;不光实践了SkiaSharp的使用&#xff0c;也学到了很多东西。在网上看到一个拼接验证码功能&#xff0c;手痒了起来&#xff0c;结合前面实现的两种验证码&#xff0c;我们来学习一下如何实现拼接验证码功能&#xff…

流量路由技术解析

作者&#xff1a;十眠 流量路由&#xff0c;顾名思义就是将具有某些属性特征的流量&#xff0c;路由到指定的目标。流量路由是流量治理中重要的一环&#xff0c;本节内容将会介绍流量路由常见的场景、流量路由技术的原理以及实现。 流量路由的业务场景 我们可以基于流量路由…

aws sam 本地测试部署 lambda 和 apigateway

使用sam框架可以在部署serverless应用之前&#xff0c;在本地调试application是否符合预期 sam框架安装 serverless应用是lambda函数&#xff0c;事件源和其他资源的组合 使用sam能够基于docker容器在本地测试lambda函数 安装sam wget https://github.com/aws/aws-sam-cli…

ArcGIS基础实验操作100例--实验77按要素分区统计路网

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验77 按要素分区统计路网 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

ART-SLAM: Accurate Real-Time 6DoF LiDAR SLAM

IEEE Robotics and Automation Letters 意大利米兰理工学院 Abstract 地面车辆实时六自由度姿态估计&#xff0c;由于自动驾驶和三维建图等诸多应用&#xff0c;是机器人技术中一个相关和被研究广泛的课题。虽然有些系统已经存在&#xff0c;但它们要么不够准确&#xff0c;要…

Qt之标准对话框(QMessageBox、QFileDialog)

文章目录前言如何学习标准对话框QMessageBox消息对话框应用属性实操QFileDialog文件对话框应用属性实操前言 Qt为开发者提供了一些可复用的对话框&#xff0c;他对我们的开发是很重要的。下面我们就来学习 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考…

无监控,不运维!深入浅出介绍ChengYing监控设计和使用

监控系统俗称「第三只眼」&#xff0c;几乎是我们每天都会打交道的系统&#xff0c;它也一直是IT系统中的核心组成部分&#xff0c;负责问题的发现以及辅助性的定位。 ChengYing作为一站式全自动化全生命周期大数据平台运维管家&#xff0c;自然也提供大数据产品的监控服务。这…

力扣sql基础篇(二)

力扣sql基础篇(二) 1 每月交易I 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # sum函数如果需要筛选,可以考虑在里面嵌套if函数 SELECT DATE_FORMAT(trans_date,"%Y-%m") month,country,count(*) trans_count,COUNT(IF(state"appr…