mysql基础记录
1. 概念介绍
数据库:专门存储数据,存储数据的仓库,同时提供了对数据的操作方法,增删改查的方法
事务
事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个操作执行失败,则事务执行失败,回滚操作。
四大特性 ACID
并发操作,一个事务的操作以及操作的数据对另一个事务是隔离的,通过锁的机制实现的
并发 并行?
并发 交替做不同的事情 不同的代码块交替执行
并行 同时做不同的事情 不同的代码块同时执行
原子性:事务包含的所有操作全部成功,要么全部失败回滚;成功必须完全应用到数据库,失败则不能不能对数据库产生影响。
一致性:事务执行前和执行后必须处于一致状态。
隔离性:当多用户并发访问数据库时候,数据库为每一个用户开启一个事务,这个事务不被其他事务操作干扰,多个并发事务直接互相隔离。
持久性:一旦事务被提交了,那么数据库当中的数据改变是永久性的,即便数据库系统发生故障,也不会丢失事务操作。
事务回滚 rollback
用户定义操作,当事务全部成功的时候,当事务某一条操作失败的时候,回滚 将之前以及成功的操作 撤销。
2. 事务隔离级别
如果不考虑隔离级别会出现的问题
脏读
读取到脏数据,读取到别的事务未提交的数据
A找B买鞋子,A发起转账,通知b去查看账户,b账户上面看到了金额,a转账事务发生了问题,b账户没有转账, b 读取到了a事务未提交的数据。
不可重复读
一个事务在执行的过程当中,多次读取数据,但是结果不一样(update,delete)
幻读
一个事务对自己之前的操作产生质疑,仿佛出现了幻觉(insert)
有了隔离级别,能够避免这几种情况
读未提交 最低的级别 什么问题都可能发生
读已提交 解决的是一个脏读的问题
可重复读 解决 脏读 不可重复读的问题
串行 解决 脏读,不可重复读,幻读
具体选择哪种隔离级别?
两方面考虑: 安全性 效率
安全性: 串行 》 可重复读》读已提交》读未提交
效率 : 串行< 可重复读《读已提交《读未提交
数据库分类
关系型数据库:采用关系模型来组织数据的,已行列存储数据
mysql,orcle,PostgreSQL
非关系型数据库: nosql(not only sql) 是以 key-value 形式存储的,有很多结构
nosql {'name':'tangwei','img':[1.jpg,2.jpg,3.jpg]}
三范式 数据库优化相关的
设计表的时候 要遵循一个规则,三范式
第一范式(1NF):
数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。
第二范式(2NF):
要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识
第三范式(3NF):
满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)。
数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c ?属性之间含有这样的关系,是不符合第三范式的。
数据库引擎
数据库用来存储数据,处理数据,保护数据的核心
innodb mysql默认引擎,支持事务,事务型首选引擎,行锁,外键,
Myisam 是对Isam升级,不支持事务,表锁,在查询,或者插入的时候效率很高,
选择:
提供事务支持,回滚,崩溃恢复这些能力,选择innodb
针对单纯用来查询,插入的,不要求事务的 选择 Myisam
一个数据库中有多张表,每张表可以拥有自己独立的引擎,提供数据库的性能
使用数据库
数据库是一个服务,需要开启,暂停,关闭这些状态
sql语句语法
以分号结尾
不区分大小写
select show insert 尽量大写
1.连接mysql
mysql -h主机地址 -u用户名 -p用户密码
退出 exit
2.创建数据库,数据表,删除数据库,数据表
show databases;#展示所有数据库
use stu;#使用一个数据库
show tables;# 展示当前数据库下的表
show create table tableName;# 展示表的创建命令
create database testdb charset=utf8;;# 创建testdb数据库,并指定字符集
create table class(id int primary key auto_increment,name char(10))# 创建数据表class指定主键自增 drop database 数据库名;# 删除数据库
drop table 表名;# 删除数据表
3.插入数据
insert into 表名 ( 字段名1,···, 字段名n ) values ( 值1, ···, 值n );# 插入单条数据
insert into class(name,sex,degree) values('charles','1','80.5'),('tom','1','80.5');# 插入多条数据 4.查询数据
格式: select 字段1, ···, 字段n from 表名 where 表达式
select 字段1, ···, 字段n
from 表名或视图名
[where <条件>]
[group by <分组表达式>]
[having <条件>]
[order by <排序表达式>[ASC|DESC]] select * from class limit 2; # 查看前两行
select * from class limit 5,10; # 查看6-15行,10为查看多少行
1.AS子句的格式为:列名或计算表达式 [AS] 列标题
模板:select <字符型字段> as 列标题1,<字符型字段> as 列标题2, <字符型字段> as 列标题3 from bt_name;
2.消除查询结果中的重复行
select distinct <字符型字段>[,<字符型字段>,...] from tb_name;
3.使用比较运算符:
模板:select * from tb_name where <字符型字段> >= n ;
1.指定范围:
用于指定范围的关键字有两个:between...and和 not between...and。
格式为:select * from tb_name where [not] between <表达式1> and <表达式2>;
其中:between关键字之后的是范围的下限(即低值),and关键字之后的是范围的上限(即高值)
用于查找字段值在(或不在)指定范围的行。
2.使用列举:
使用in关键字可以指定一个值的集合,集合中列出所有可能的值,当表达式的值与集合中的任一元素个匹配时,即返回true,否则返回false。
模板:select * from tb_name where <字符型字段> [not] in(值1,值2,...,值n);
3.使用通配符进行模糊查询:
可用like 子句进行字符串的模糊匹配查询,like子句将返回逻辑值(true或False)。
like子句的格式: select * from tb_name where <字符型字段> [not] like <匹配串>;
其含义是:查找指定字段值与匹配串相匹配的记录。匹配串中通常含有通配符%和_(下划线)。
其中: %:代表任意长度(包括0)的字符串
4.使用null的查询
当需要判定一个表达式的值是否为空值时,使用 is null关键字。
当不使用not时,若表达式的值为空值,则返回true,否则返回false;当使用not时,结果刚好相反。
模板:select * from tb_name where <字符型字段> is [not] null;
5.多重条件查询:使用逻辑运算符
逻辑运算符and(与:两个条件都要满足)和or(或:满足其中一个条件即可)可用来联接多个查询条件。and的优先级高于or,但若使用括号可以改变优先级。
模板:select * from tb_name where <字符型字段> = 'volues' and <字符型字段> > n;
4.对查询结果排序
order by子句可用于对查询结果按照一个或多个字段的值(或表达式的值)进行升序(ASC)或降序(DESC)排列,默认为升序。
格式:order by {排序表达式[ASC|DESC]}[,...n];
其中:排序表达式既可以是单个的一个字段,也可以是由字段、函数、常量等组成的表达式,或一个正整数。
模板:select * from tb_name order by <排序表达式> <排序方法>;
5.使用统计函数:又称集函数,聚合函数
在对表进行检索时,经常需要对结果进行计算或统计,T-SQL提供了一些统计函数(也称集函数或聚合函数),用来增强检索功能。统计函数用于计算表中的数据,即利用这些函数对一组数据进行计算,并返回单一的值。
常用统计函数表
函数名 功能
AVG 求平均值
count 求记录个数,返回int类型整数
max 求最大值
min 求最小值
sum 求和
1. SUM和AVG
功能:求指定的数值型表达式的和或平均值。
模板:select avg(<字符型字段>) as 平均数,sum(<字符型字段>) as 总数 from tb_name where <字符型字段> ='字符串';
2. Max和Min
功能:求指定表达式的最大值或最小值。
模板:select max(<字符型字段>) as 最大值,min(<字符型字段>) as 最小值 from tb_name;
3. count
该函数有两种格式:count(*)和count([all]|[distinct] 字段名),为避免出错,查询记录个数一般使用count(*),而查询某字段有几种取值用count(distinct 字段名)。
(1).count(*):
功能:统计记录总数。
模板:select count(*) as 总数 from tb_name;
(2).count([all]|[distinct] 字段名)
功能:统计指定字段值不为空的记录个数,字段的数据类型可以是text、image、ntext、uniqueidentifier之外的任何类型。
6.对查询结果分组
group by子句用于将查询结果表按某一列或多列值进行分组,列值相等的为一组,每组统计出一个结果。该子句常与统计函数一起使用进行分组统计。
格式为:group by 分组字段[,...n][having <条件表达式>];
1.在使用group by子句后
select列表中只能包含:group by子句中所指定的分组字段及统计函数。
2.having子句的用法
having子句必须与group by 子句配合使用,用于对分组后的结果进行筛选(筛选条件中常含有统计函数)。
3. 分组查询时不含统计函数的条件
通常使用where子句;含有统计函数的条件,则只能用having子句。
模板:select <字符型字段>,count(*) as 列标题 from tb_name where <字符型字段>='字符串' group by <字符型字段>;
5.修改数据(Update) Update 语句用于修改表中的数据。
格式:update tb_name set 列名称 = 新值 where 列名称 = 某值;
6.删除数据(Delete) 删除单行
格式:delete from tb_name where 列名称 = 某值;
删除所有行
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
格式:delete * from tb_name 或 delete from tb_name;
7.alter 修改表结构 alter add命令用来增加表的字段。
alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0:
alter table MyClass add passtest int(4) default '0';
添加两个字段
alter table Person add age int,add address varchar(11);
删除两个字段
alter table Person drop column age,drop column address;
修改字段的注释
alter table `student` modify column `id` comment '学号';
1) 加索引
alter table 表名 add index 索引名 (字段名1[,字段名2 …]);
alter table employee add index emp_name (name);
2) 加主关键字的索引
alter table 表名 add primary key (字段名);
alter table employee add primary key(id);
3) 加唯一限制条件的索引
alter table 表名 add unique 索引名 (字段名);
alter table employee add unique emp_name2(cardnumber);
4) 删除某个索引
alter table 表名 drop index 索引名;
alter table employee drop index emp_name;
5) 增加字段
ALTER TABLE table_name ADD field_name field_type;
6) 修改原字段名称及类型
ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
7) 删除字段
ALTER TABLE table_name DROP field_name;
8) 重命名表
ALTER TABLE table_name rename table_name_new;
9) 修改字段类型
ALTER TABLE table_name modify field_name new_field_type;
10) 添加外键
alter table table_name add foreign key(table_name.column) references 表名(字段)
11) 删除外键
alter table 表名 drop foreign key 外键名
12)删除主键自增
先删除自增,再删除字段
ALTER TABLE table_name modify field_name field_type;
alter TABLE table_name drop primary key
13) 删除|添加外键字段
添加时先添加字段,后设置外键
alter table 表名 add 字段 类型
alter table 表名 add foreign key(字段)references 表名(字段)
删除时先删除外键,后删除字段
alter table 表名 drop foreign key 外键名
alter table 表名 drop 字段
8.创建视图,触发器,索引 索引高效获取数据的存储结构
alter table 表名 drop index 索引名;# 添加索引
alter table employee drop index emp_name;# 删除索引 视图:只保存语句,不保存数据,类似虚表
create view view_name as (select * from students);# 创建视图
drop view view_name# 删除视图 触发器:执行插入删除修改时制动触发,激活此对象
create trigger trigger_name after/before insert on tb1 for each row
bengin
insert into tb2 values()
end
9.用户授权
1、将root密码改为newroot。
alter user root@localhost identified by ‘newroot’
2、新增用户
create user ‘用户名’@’主机地址’ identified by ‘密码’;
3.授权
grant select/insert/delete/Update on database.table to user@host;
mysql基础记录的更多相关文章
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- mysql 基础篇5(mysql语法---数据)
6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...
- MySQL 基础语句
MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...
- MySQL:基础—数据分组
MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...
- MySQL基础学习总结
1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...
- MySQL基础(三)——约束
MySQL基础(三)--约束 约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除. 根据约束对列的限制,可以划分为:单列约束(只约束一 ...
- MySQL基础(二)——DDL语句
MySQL基础(二)--DDL语句 1.什么是DDL语句,以及DDL语句的作用 DDL语句时操作数据库对象的语句,这些操作包括create.drop.alter(创建.删除.修改)数据库对象. 2.基 ...
- 【转载】20分钟MySQL基础入门
原文:20分钟MySQL基础入门 这里持续更新修正 开始使用 MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格 ...
随机推荐
- 2-sat——hdu3062
对于怎么建边还是不太清楚 选了a,那么b c不选,所以连边 选了b或c,那么a必定不选 /* 每个点拆成i*2,i*2+1 队长选,那么队友不选 队长不选,那么队友必定要选 */ #include&l ...
- Excel 2016在大数据分析领域有了很多的改善
Excel 2016在大数据分析领域有了很多的改善 通常,我们会把大数据分析的整个过程分为五个阶段: 获取获取,数据分析,可视化,发布报告,应用报告. 在获取数据方面,Excel 2016相对Exce ...
- 在ALV点击Key值调用TCode,跳过初始屏幕
在开发ALV报表时,通常业务部门会要求在ALV中点击单据号,屏幕跳转到具体业务凭证中查看业务明细,效果如下图: 点击销售销售订单号或者交货单号可传入单据号直接打开销售订单或交货单,实现方式如下: 一. ...
- elasticsearch 中文API 基于查询的删除(九)
基于查询的删除API 基于查询的删除API允许开发者基于查询删除一个或者多个索引.一个或者多个类型.下面是一个例子. import static org.elasticsearch.index.que ...
- HandlerInterceptorAdapter或HandlerInterceptor的使用
Spring拦截器 HandlerInterceptorAdapter需要继承,HandlerInterceptor需要实现 可以作为日志记录和登录校验来使用 建议使用HandlerIntercept ...
- mysql系统变量与状态变量
一.系统变量分为全局系统变量和会话系统变量:有些变量既是全局系统变量,有些变量只有全局的,有些变量只有会话的. .变量的查询: show global variables like 'log' \G; ...
- List--列表合成
1,基本规则是,一对中括号里面包含一个表达式,表达式里可以有for语句,还可以有分支的for或者if语句. 2,例如: 3,列表合成可以快速地合并多个列表. 例如: 当然还可以直接加:[1, 2, 3 ...
- 释放内存触发断点及数组、指针的NULL初始化
Visual Studio调试时,出现“触发一个断点”内存释放出现异常 数组和对应指针的NULL初始化 数组使用之前要先对其初始化 char Outi[4] = { NULL }; char Outj ...
- Python pylint的安装和使用
Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准和有潜在问题的代码. Pylint 是一个 Python 工具,除了平常代码分析工具的作用之 ...
- NMS 和 Soft-NMS
转自https://zhuanlan.zhihu.com/p/42018282 一 NMS NMS算法的大致思想:对于有重叠的候选框:若大于规定阈值(某一提前设定的置信度)则删除,低于阈值的保留.对于 ...