MYSQL
事务,
innoDB 存储引擎:提供一组用了记录事务性活动的日志文件

DML
DDL

提交事务: commit
回滚: rollback
事物:transaction
mysql 默认支持自动提交事物

关键字distinct, 去重复
//distinct 只能出现字段的前
distinct 出现在多个字段时表示(多个字段联合)去重复
单个字段
union all
union
连接查询:
select xxx,xx from table_A as A left join table_B as B on A.col=B.Id wwhere B.Id="ABVC"
优化点:
两张表优化查询,
匹配了次数没有减少,只是选择
连接查询起别名,为什么?
分类:
内连接之等值连接;
SQL92 结构不清晰,表的连接条件和连接后的过滤条件都放在where后面结构不清晰
内连接之非等值连接:
select e.name e.sal s.grade from emp as e join sal as s on e.sal betwween xx and xxx
内连接之自链接

完成能够匹配上这个条件的数据查询出来

外链接
left join 将左表视为主表
right join

子查询
select
..(select)
from
(select)
where
(select)

子查询和连接的性能

select后的子查询只能查询出一条记录
union 要求前后的结果集合要

笛卡尔积现象:

MYSQL 三大范式

MYSQL分析慢查询步骤

Mysqlleetcode

col !=2 可以表示为 col <>2,比较结果不包括值为NULL的列
可以用col IS NULL 判断该列值为NULL的记录
left join
func nop() {} 定义这个空函数的作用什么<br />

mysql安装

1、下载安装
推荐下载地址:https://mirrors-i.tuna.tsinghua.edu.cn/mysql/downloads/
下载mysql-5.7.35.zip并解压到电脑的指定安装目录
2、添加系统环境变量

  • 右键“我的电脑”选择属性
  • 最大化窗口,点击右侧“高级系统设置”
  • 点击“环境变量(N)…”
  • 新建用户变量 : 变量名:MYSQL; 变量值:Mysql的安装目录
  • 添加PATH信息: 点击新建并输入:%MYSQL%\bin

3、mysql 初始化并安装

  • 打开管理员cmd界面
  • 使用cd命令切换到%MYSQL%\bin 目录下
  • 初始化命令**mysqld --initialize --console**,%MYSQL%目录下会生成data文件,控制台生成初始密码。
  • 执行mysql安装命令mysqld -install

4、启动mysql

  • 使用net start mysql启动mysql服务,默认监听3306端口
  • 使用mysql -uroot -p"上一步控制台的初始密码"登陆mysql

5、修改密码

  • set password for root@localhost = password("新密码")

image.png

数据库增删改查

查看数据库;

  1. 命令show databases;#查看所有的数据库

image.png

  1. 相关问题

mysql中lower_case_table_names变量是控制mysql区分大小写的标志,其中0:区分大小写。1:不区分大小写;使用命令show variables like "%case%";可查看到该windows环境此变量值为1,表示不区分大小写。那么如何修改该值呢?链接,查询命令中的%的作用是什么呢?还有其他的特殊符号吗?待续!!
8E5N)K]MCUA98PT4I4ZIZ{S.png

order—limit—offset

排序:select * from table_name where condition(s) order by column asc limit offset_num limit_num

创建数据库

  1. 命令**create database 数据库名称;**

3RNFIE$(MR5V$]LBOLB1{(V.png

  1. 相关问题
  • 数据库名称可以用中文吗?**可以** 可以用那些字符呢?

  • 删除数据库

    删除数据库:drop database 数据库
    删除数据库中表数据drop table table_name;
    删除数据库中表满足条件的某些数据 delete from table_name [where clause]
    delete,用来从表中删除部分或者全部记录。可以与where子句一起使用,用于删除满足添加的某些记录。
    由于DELETE命令不删除表,因此不会释放任何空间;而drop命令会删除整个表,从而释放内存空间。

delete和truncate仅仅删除表数据,drop连表数据和表结构一起删除
delete是DML语言,可以回滚。
执行速度drop>truncate>delete

drop是一种数据定义命令,可以从数据库中删除一个或多个表,它将删除所有相关元素,如模式,域和约束中的所有表。无法回滚

修改数据库

数据库表修改:

alter table 表名称
添加唯一约束而不创建唯一索引,alter table students add constraint uni_name unique (name);
添加普通索引,alter table students add index index_name (column)

修改数据库表名称
alter table old_table_name rename [to|as] new_table_name
添加表中的列
alter table table_name add column_name datatype [约束条件] [first | after 已存在的字段]
删除表中的列
alter table table_name drop column_name
修改表中列的属性(类型和名称)
alter table table_name modify column_name varchar(1000)
alter table table_name change i j int(1)
添加索引
alter table table_name add primary key (i)
删除索引
alter table table_name drop primary key

数据库的非空约束not null
创建表时添加约束:create table stu(id int(2), name varchar(20) not null default '')
创建表后添加约束:alter table stu modify name varchar(2) not null
删除非空约束:alter table st modify name varchar92);

auto_increment
删除唯一约束:alter table stu drop index number;
删除主键约束:alter table stu drop primary key;

批量插入数据
inster into table_name (field1,field2,...,fieldN)values(value1,value2,...,valueN),(valueB1,valueB2,...,valueBN)....


数据库表增删改查CRUD

选中数据库use 数据库名称;

创建表结构

Create Table If Not existstbl_xxx(val varchar(32),.....)

![A@]4W7XQMI%9)1K(3T_6$E.png
drop table if exists tql_xxx ;
delete from table
truncate table

inster into tbl_xxx (字段1,字段2)values(val1,val2)
inster语句中的字段名可以省略吗?不可省略,不写相当于全字段
format(数字,‘格式’)
str_to_date(字符串,日期格式)

主键primary key \key\union key 的区别

  1. 普通索引key: 普通索引
  2. 主键索引primary key
  • 主键必须包含唯一的值,可以是多列组合使用primary key(id,age)
  • 主键不能为空;
  • 每个表最多有且只有一个主键;
  • 可以标识数据库表中的每条记录
  1. 唯一索引unique key
  • 一个表中可以有多个unique key
  • 可以唯一标识数据库表中的每条记录,为列或列集合提供了唯一性的保证
  • 防止数据插入是重复

union all 和union 的区别
union会自动压缩重复的结果,union all会把所有的结果全部显示出来。union会涉及排序所以性能较union all差一些。

1、 对OR语句求并集,如查询SELECT FROM TB1 WHERE c1=”xxx” OR c2=””xxx”时,如果c1和c2列上分别有索引,可以按照c1和c2条件进行查询,再将查询结果合并(union)操作,得到最终结果
2、 对AND语句求交集,如查询SELECT
FROM TB1 WHERE c1=”xxx” AND c2=””xxx”时,如果c1和c2列上分别有索引,可以按照c1和c2条件进行查询,再将查询结果取交集(intersect)操作,得到最终结果

查询表数据

select * from where
union /和 or的区别
union all 和 union的区别
HAVING
count
distinct

查看mysql的版本信息

mysql> status;
6G316]_2J(8OQ065@1O%6UU.png

MYSQL常见问题

https://runebook.dev/zh-CN/docs/mariadb/mariadb-error-codes/index
1、 delete\drop\alter table 卡住的问题

MYSQL登录方式

  1. mysql -u用户名 -p密码

MYSQL 修改用户密码

修改单个用户的密码
alter user 'root'@'localhost' identified by '新的密码'
set password for root@localhost = password('新的密码')

更新相同用户不同host的密码
update mysql.user set password=password('vnet2wsx!QAZ') where user='root';
flush privileges;
查看用户的用户和host和密码信息
image.png
问题:127.0.0.1和localhost的方式有什么不同

golang链接数据库