首页 > 数据库 >Mysql学习笔记(一)

Mysql学习笔记(一)

时间:2023-07-20 13:56:08浏览次数:37  
标签:Mysql 笔记 查询 学习 外键 表名 table 列表 字段名

一、基础概念

1.术语

  • 数据库(DB)
  • 数据库管理系统(DBMS)
  • SQL(Structured Query Language)

2.关系型数据库(二维表)

二、SQL

1.分类

  • DDL(Data Definition Language)数据定义语言(操作数据库、表、字段)
  • DML(Data Manipulation Language)数据操作语言(增删改)
  • DQL(Data Query Language)数据查询语言(查)
  • DCL(Data Control Language)数据控制语言(控制权限、用户)

2.DLL

*[...]为可选参数

操作数据库

  1)show databases;

  2)select database();

  3)create database [ if not exists] 数据库名[ default charset 字符集 ][ collate排序规则 ]

  e.g create database itNM default charset utf8mb4;

  4)delete database [ if exists ]数据库名;

  5)use database;

操作表(查询创建)

  1)show tables

  2)desc 表名;(查看表信息)

  3)show create talbe 表名;(查询制定表的建表语句)

  4)create table 表名( 字段1 字段1类型 [ COMMENT 字段1注释],....)[ COMMENT 表注释 ];

create table tb_item(
    id int comment '编号',
    tb_name varchar(18) comment '商品名称',
    tb_price double comment '商品价格',
    tb_time datetime comment'商品日期'
)comment '商品表';

操作表(修改)

  1)alter table 表名 add 字段名 类型(长度) [ COMMENT 注释 ][ 约束 ];

   e.g alter table tb_item add tb_user varchar(20) comment '生产厂商';

  2)alter table 表名 modify 字段名 新数据类型(长度);

  3)alter table 表名 change 旧字段名 新字段名 类型(长度)[ COMMENT 注释 ][ 约束 ];

  4)alter table 表名 drop 字段名;

  5)alter table 表名 rename to 新表名;

  6)drop table [ if exists ] 表名;

  7) truncate table 表名;

3.DML

  1)insert into 表名(字段名1,字段名2,...) values (值1,值2,...),(...);

  2)insert into 表名 values(值1,值2,...);

  3)update 表名 set 字段名= 值1,字段2=值2,... where[ 条件 ];

  4)delete from 表名 [ where 条件 ];

4.DQL

  1)select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数

  2)as 设置别名

  3)distinct

  4)<> 或!=

*where和having的区别

  • 执行时机:where在分组之前过滤,不满足where不参与分组;having在分组后过滤
  • 判断条件:where不能对聚合函数进行判断;having可以

  **分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

  **支持多字段分组

*排序查询

  **asc(升序)

  **desc(降序)

*分页查询

  **select 字段列表 from 表名 limit 起始索引,查询记录数;

  (起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。)

*执行顺序

  from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 select 字段列表 order by排序字段列表 limit 分页参数

5.DCL(Host如果是Localhost,则表示只能在本机访问)

  1)select * from mysql.user;

  2)create user '用户名@'主机名'' identified by '密码';

  3)alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';

  4)drop user '用户名'@'主机名';

  5)show grants for '用户名'@'主机名';

  6)grant 权限列表 on 数据库名.表名 to '用户名'@'主机名'

  7)revoke 权限列表 on 数据库.表名 from '用户名'@'主机名'

*主机名可以使用 % 通配。

e.g create user 'lijx'@'%' idenfied by '1234';(用户lijx可以在任意主机访问该数据库)

三、约束

  1)not nul

  2)unique

  3)primary key

  4)default

  5)check

  6)foreign key

*操作外键

  **create table 表名(...,[constraint] [外键名称] foreign key (外键字段名) references 主表(主表字段名));

  **alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表字段名);

  **alter table 表名 drop foreign key 外键名称;

*外键删除\更新 后行为

  1)no action\restrict(当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。)

  2)cascade(当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录)

  3)set null(当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null)

四、多表查询

  默认:笛卡尔积

  *内连接:查询交集(隐式内连接、显式内连接)

  *左外连接:查询左表所有数据,以及两张表交集部分数据

  *右外连接:查询右表所有数据,以及两张表交集部分数据

  *自连接:当前表与自身的连接查询,自连接必须使用表别名(在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底是哪一张表的字段。)

  *联合查询:Union all

  *子查询

    SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

    e.g select from t1 where column1 = (select column1 from t2);

    1)标量子查询

    子查询的结果是单个值

    2)列子查询

    查询结果是一列(常用in、not in、any、some、all)

    3)行子查询

    查询结果是一行

    4)表子查询

    查询结果是多行多列

六、事务

1.简介

事务是一组操作的集合,是不可分割的工作单位,操作要么同时成功,要么同时失败(Mysql执行一条DML,默认提交事务)

2.控制事务

1)select @@autocommit;(设置事务)

set @@autocommit=0;

2)COMMIT;(提交事务)

3)ROLLBACK;(回滚事务)

4)START TRANSACTION 或BEGIN(开启事务)

3.四大特性(ACID)

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么同时成功,要么同时失败
  • 一致性(Consistency):事务完成后,数据要保持一致
  • 隔离性(Isolation):数据库系统提供的隔离机制
  • 持久性(Durability):事务一旦提交和回滚,数据改变是永久的

4.并发事务问题

  • 脏读:一个事务读取到另一个事务没有提交的数据
  • 不可重复读:一个事务先后读取同一条数据,但两次读取数据不同
  • 幻读:一条事务按照条件查询数据时,没有对应的数据行,但是插入时,又发现数据已经存在

5.事务隔离级别

  1)select @@TRANSACTION_ISOLATION;

  2)set [ session|global ] transaction isolation level { read uncommitted | read committed | repeatable read | serializable }

标签:Mysql,笔记,查询,学习,外键,表名,table,列表,字段名
From: https://www.cnblogs.com/lijxqaq/p/17567487.html

相关文章

  • kubectl apply -f mysql.yaml error: the path "mysql.yaml" does not exist
    问题解决:kubectlapply-fmysql.yamlerror:thepath"mysql.yaml"doesnotexist在使用Kubernetes进行容器编排时,我们经常使用kubectl命令行工具与Kubernetes集群进行交互。其中,kubectlapply命令用于创建或更新Kubernetes资源的配置文件。然而,有时在执行kubectlapply-fmys......
  • kernel: mysqld invoked oom-killer: gfp_mask
    LinuxOOM-Killer:解释与代码示例引言当在运行中的Linux系统中内存不足时,操作系统会调用OOM-Killer(OutofMemoryKiller)来终止某些进程以释放内存。这通常发生在操作系统无法为新的进程或正在运行的进程分配所需的内存时。本文将介绍OOM-Killer的工作原理并提供相应的代码......
  • kali中安装mysql
    Kali中安装MySQL的步骤在本文中,我将向你展示如何在KaliLinux中安装MySQL。MySQL是一种流行的关系型数据库管理系统,用于存储和检索数据。以下是安装MySQL的步骤:步骤操作1更新软件包列表2安装MySQL服务器3启动MySQL服务4配置MySQL安全性5测试MySQL安装......
  • FedR代码的学习
    wwcnt_mat=sparse.csr_matrix((dat_values,(row_indxs,col_indxs)))这句代码创建了一个稀疏矩阵(sparsematrix)wwcnt_mat,其中dat_values是矩阵中非零元素的值,而(row_indxs,col_indxs)是对应的非零元素所在的行和列的索引。具体地说,sparse.csr_matrix((dat_values,(ro......
  • mysql bigint java 无符号
    如何在Java中实现MySQL的无符号bigint字段在本篇文章中,我将教你如何在Java中实现MySQL的无符号bigint字段。我们将分为以下几个步骤来实现这个目标:创建一个数据库表在Java中连接到MySQL数据库执行创建表的SQL语句插入数据到表中查询并展示数据下面是每个步骤需要执行的代......
  • mysql any some 区别
    MySQL中的any和some的区别在MySQL数据库中,我们经常会遇到使用any和some来比较子查询结果的情况。这两个关键词在功能上非常相似,但也有一些微小的区别。本文将介绍any和some的区别,并通过代码示例来说明它们的使用方法和效果。any和some的作用any和some的作用是用来比较子查询结果......
  • MySQL 查询按序累加数值
    Mysql假如我有一个表,有字段day,money,day记录我攒钱的第几天,money记录我当天攒的钱数,请写一个查询,返回我攒钱的天数,和这一天之前(包含这一天)一共攒的钱数SELECTday,money,(@cumulative_money:=@cumulative_money+money)AScumulative_moneyFROMyour_table_name,......
  • mysql ZIDONG备份
    MySQL自动备份流程为了确保数据库的安全和可靠性,我们需要定期对MySQL数据库进行备份。为了减少人工操作,我们可以通过编写脚本实现自动备份。下面是MySQL自动备份的流程:步骤描述1连接到MySQL数据库2创建备份文件夹3执行备份命令4关闭MySQL连接下面将详......
  • mysql NULL 索引
    实现MySQLNULL索引简介在MySQL中,NULL值表示一个字段没有被赋值,但是有时候我们需要对NULL值进行索引以提高查询性能。本文将介绍如何在MySQL中实现NULL索引。流程以下是实现MySQLNULL索引的步骤:步骤描述1创建一个包含NULL值的列2创建索引3......
  • mysql MGR
    使用MySQLMGR概述MySQLMGR(MySQLGroupReplication)是MySQL官方提供的一种高可用性和高性能的解决方案,它通过将数据库服务器组织成一个组来提供数据的复制和自动故障转移。在这篇文章中,我将向你介绍如何使用MySQLMGR。流程概览下面是使用MySQLMGR的一般流程:步骤描述......