Mysql笔记

数据库

数据库(DB DataBase)

概念:数据仓库、软件、安装在操作系统(window,linux,mac,…)之上!SQL,可以存储大量数据

作用:存储数据 管理数据

数据库分类

关系型数据库 SQL
  • Mysql Oracle SqlServer DB2 SQLite
  • 通过表和表之间,行和列之间的关系进行数据库存储,学员信息表 考勤表…
非关系型数据库 NoSQL Not Only
  • ​ Redis MongDB
  • 非关系型数据库 对象存储 通过对象自身属性来决定。

DBMS(数据库管理系统)

  • 数据库管理软件,科学有效的管理我们的数据,维护和获取数据;
  • MySQL,本质是数据库管理系统

连接数据库

命令行连接

mysql -uroot -p(密码) --注释 连接数据库
update mysql.user set authentication_string = password('123456') where user='root' and Host = 'localhosrt';
--修改用户密码
flush privileges; --刷新权限
-------------------------------------------------
--所有的语句都使用;结尾
			基本语句
show databases; --查看所有数据库
use 表名; --使用数据库

show tables; 查看数据库中表
describe 表名;查看表

create database 表名; --创建一个数据库
exit; --退出
--单行注释(sql注释)
/**/多行注释

CRUD增删改查 CV程序员 API程序员

DDL 定义

DML 查询

DQL 查询

DCL 控制

2.操作数据库

操作数据库》操作数据库表》 操作数据库中的表

关键字不区分大小写

1.创建数据库

create database if not exists 表名;

2.删除数据库

drop database if exists 表名;

3.使用数据库

table上面的一个键``如果你的表字段名是特殊字符
use `数据库`;

4.查看所有数据库

show databases --查看所有数据库

数据库的列类型

数值

tinyint 	十分小的数据  1个字节

smallint   较小的数据 2个字节

mediumint  中等大小的数据 3字节

int            标准的整数 4个字节

bigint       较大的数据  8字节

float         浮点数         4字节

double      浮点数         8字节

decimal      字符串形式浮点数 金融计算  一般使用decimal

字符串

char 字符串固定大小  0-255
varchar 可变字符串   0-65535 对应string
tinytext 微型文本    2^8 -1
text	文本串		  2^16 -1 保存大文本

时间日期

java.util.Date
date YYYY-MM-DD日期
time HH:mm:ss时间
datetime YYYY-MM-DD-HH:mm:ss 最常用时间格式
timestamp 时间戳 1970.1.1到现在毫秒数较长使用
year 年份表示

null

没有值 未知
注意 不用使用null进行运算 结果一定为null

数据库字段属性

Unsifned:
无符号整数
声明该列不能为负数

zerofill:
0填充  如5-----005
10 不足位数用零填充

自增:
在上一条记录基础上+1
可以自定义设置主键自增

not null:
假设设置为not null 不给其赋值就会报错

默认值:
设置默认值
每一个表必须存在一下五个字段
id 主键
`version` 乐观锁
is_delete 创建时间
gnt_update 修改时间

sql创建一张表

目标:创建一个school数据库
创建学生(类,字段) 使用SQL创建
学号int,登录密码varchar(20)姓名,性别varchar(2),出生日期(datatime),家庭住址,email
 create table if exists `student`(
 	`id` int(4) not null auto_increment comment '学号',
 	`name` varchar(30) not null default '匿名' comment '姓名',
 	`pwd` varchar(20) not null default '123456' comment '密码',
 	`sex` varchar(2) not null default '女' comment '性别',
 	`birthday` datetime default not null comment '出生日期',
 	`address` varchar(100) default not null comment '家庭住址',
 	`email` varchar(50) default null comment '邮箱'
 	primary key `id`
 )

添加字段语句

ALTER TABLE `student` add(
`sex` VARCHAR(2) not NULL DEFAULT '男' COMMENT '性别'
)

查看数据库表定于的语句

show CREATE DATABASE test
show CREATE TABLE item
CREATE TABLE `item` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(50) DEFAULT NULL,
  `sell_point` varchar(100) DEFAULT NULL,
  `price` bigint DEFAULT NULL,
  `num` int DEFAULT NULL,
  `update` datetime DEFAULT NULL,
  `cid` int DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `cid` (`cid`),
  CONSTRAINT `cid` FOREIGN KEY (`cid`) REFERENCES `item_cat` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

关于数据库引擎

INNODN:默认使用
MYISAM:早些年使用的
INNODNMYISAM
事务支持(要么都成功要么都失败)不支持支持
数据行锁不支持支持
外键不支持支持
全文索引支持不支持
表空间大小较小较大约为两倍

常规使用操作

INNODN :安全性高,事务处理 多表多用户操作

MYISAM :节约空间 速度快

在物理空间存在的位置

所有的数据库文件都存在data目录下,一个文件夹对应一个数据库

MySQL 引擎在物理文件上的区别

  • InnoDB在数据库表中只有一个 *.frm文件,以及上级目录下的ibdata1文件
  • MYISAM对应文件
    • *.frm -表结构的定义文件
    • *.MYD 数据文件data
    • *.MYI索引文件index

设计数据表的字符集编码

charset=utf8

不设置的话,会是mysql默认字符集编码(不支持中文)

在my.ini中配置默认编码

修改和删除表

增加

ALTER TABLE `student` add(
`sex` VARCHAR(2) not NULL DEFAULT '男' COMMENT '性别'
)								--增加字段

修改

alter table 表名 rename as 新表名  --修改表名

--ALTER TABLE 表名 MODIFY 字段名 列属性[]
ALTER TABLE student1 MODIFY sex VARCHAR(3); 	--修改约束

--ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE student1 CHANGE sex sex1 VARCHAR(2); --字段重名名

删除

删除字段:ALTER TABLE 表名 DROP 字段名
ALTER TABLE student1 DROP age1  --删除字段
删除表:DROP TABLE IF EXISTE 表名
DROP TABLE IF EXISTS student1	--删除表

所有的创建和删除操作尽量加判断以免报错

注意:

  • 所有字段加上 ``
  • 注释 – /**/
  • sql建议写小写
  • 所有符合用英文

MySQL数据管理

外键(了解即可)

方式一:在创建表的时候增加约束(比较复杂)

–学生表的gradeid 字段 要去引用年级表的gradeid
–定义外键key
–给这个外键添加约束(执行引用) reference 引用

KEY FK_gradeid(gradeid),
CONSTRAINT FK_gradeid FOREIGN KEY (gradeid) REFERENCES grade(gradeid)

CREATE TABLE `grade` (
  `gradeid` int NOT NULL AUTO_INCREMENT COMMENT '学号',
  `gradename` varchar(50) DEFAULT NULL COMMENT '年级名称',
  PRIMARY KEY (`gradeid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

--学生表的gradeid 字段 要去引用年级表的gradeid
--定义外键key
--给这个外键添加约束(执行引用) reference 引用
CREATE TABLE if not EXISTS `student`(
`id` int(4) NOT NULL auto_increment COMMENT '学号',
`name` VARCHAR(30) not NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) not null DEFAULT '123456' COMMENT '密码',
`gradeid` INT(10) not NULL COMMENT '学号',
PRIMARY KEY(`id`),
-- 外键
KEY `FK_gradeid`(`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)

)ENGINE=INNODB CHARSET=utf8

删除有外键关系的表必须删除被引用的表(从表) 再删除被引用的表(主表)

方式二:在创建完成后添加外键约束

ALTER TABLE 表 add constraint 约束名 foreign key(作为外键的列) references 引用哪个表(哪个字段)

use test;
CREATE TABLE if not EXISTS `student`(
`id` int(4) NOT NULL auto_increment COMMENT '学号',
`name` VARCHAR(30) not NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) not null DEFAULT '123456' COMMENT '密码',
PRIMARY KEY(`id`)
)ENGINE=INNODB CHARSET=utf8
show  CREATE TABLE grade;
CREATE TABLE `grade` (
  `gradeid` int NOT NULL AUTO_INCREMENT COMMENT '学号',
  `gradename` varchar(50) DEFAULT NULL COMMENT '年级名称',
  PRIMARY KEY (`gradeid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
--创建表的时候没有外键关系
ALTER TABLE `student`
ADD `gradeid` int(10) not null COMMENT '学生年级';

--ALTER TABLE 表 add constraint 约束名 foreign key(作为外键的列) references 引用哪个表(哪个字段)
ALTER TABLE `student`
ADD CONSTRAINT `FK_grandeid` FOREIGN KEY(`gradeid`) REFERENCES 	`grade` (`gradeid`);

以上是数据库级别外键,不建议使用

最佳实践

  • 数据库就是单纯的表,只是用来存储,只有行(字段)和列(数据)
  • 我们想使用多张表,想使用外键(程序添加)
DML语言

数据库管理:数据库存储,数据管理

DML:语言数据操作语言

  • insert
  • update
  • delete
添加
插入语句
insert into 表名({字段名1},{字段名2}) values('值1','值2')
要是主键自增则可以不写
--插入多个字段
insert into 表名 ({字段1},{字段2}) values('值1' '值2'),('值1' '值2')

注意事项:

1、字段和字段之间用英文

2、字段之间可以一一省略,但必须和后面的值一一对应,不能少

3、可以同时插入多条数据 values后面值要用逗号,隔开

修改
修改语句
update 修改谁 (条件) set 原来值=新值
update 表名 set '原来值' = '新值' where id = 要修改的id --要是不指定id就会全部修改

条件:where子句运算符id等于某一个值,大于某个值,在某个区间内修改

操作符会返回boolean值

操作符含义范围结果
=等于5=6false
<> !=不等于5<>6true
>大于
<小于
>=大于等于
<=小于等于
between[2,5]闭合区间between 2 and 5
and我和你 &&5>1and1>2false
or我或你 ||5>1or1>2true
  • 注意colnum_name 是数据库的列,尽量带上``
  • 条件,筛选条件如果没有指定,会修改所有列
  • value 也可以是变量
  • 多个设置的属性用英文隔开
update `student` set `birthday` = current_time where `name`='名字'  and set='女'
删除
delete 命令
delete from 表名 where id = 要删除的id
清空表
truncate 命令
完全清空一个数据库表,表的结果和索引约束

delete和truncate区别

  • 相同点:都能删除数据,都不会删除表结构
  • 不同点:
    • truncate 重新设置自增列计数器会归零
    • truncate 不会影响事务 自增归零
    • delete不会影响自增自增不会归零

了解即可:delete删除问题,重启数据库,现象

InnoDB:自增类会重1开始(存在内存当中,断电即失)

MyISAM:继续从上一个自增量开始(存在文件中,不会丢失)

DQL

DQL(Data Query LANGUAGE数据库查询语言)

  • 所有的查询操作都用它 Select
  • 简单的查询 复杂的查询都能做
指定查询字段
--查询全部的学生 select 字段 from 表
select * from student
--查询指定字段
select `字段名1`,`字段名2` from 表名
--起别名	as 可以给字段名起别名 可以以给表起别名
select `StudentNo` as 学号 `StudentName` as 学生姓名 from student as s
--函数 Concat(a,b)
select concat('姓名:',StudentName) as 新名字 from student

语法:select 字段,…from 表

去重distinct
--查询哪些同学有成绩
select * from result 查询全部考试成绩
--查询有哪些同学参加了考试
select `StudentNo` from result
--去重
select distinct `StudentNo` from result
数据库的列(表达式)
查看系统版本
select version()

用来计算
select 100*3-1 as 计算结果

查询自增的步长
select @@auto_increment increment

所有学员考试成绩+1分
select `StudentNo`,`StudentResult`+1 as '提分后' from result

数据库表达式:文本值 列 null 函数 计算表达式 系统变量

select 表达式 from 表

where条件

作用:检索数据中符合条件的值

逻辑运算符
运算符语法描述
and &&a and b a&&b逻辑与 两个结果为真结果为真
or ||a or b a||b逻辑或 其中一个结果为真,则结果为真
not !not a !a逻辑非 真为假,假为真
--查询考试成绩在95-100之间的
select `studentNo`,`StudentResult` from result where StudentResult>=95 and StudentResult<=100
使用符号
select `studentNo`,`StudentResult` from result where StudentResult>=95 && StudentResult<=100

模糊查询
select `studentNo`,`StudentResult` from result where StudentResult between 95 and 100

--处理100号学生之外的同学成绩
select studentNo,`StudentResult` from result where studentNo != 1000;
-- != not
select studentNo,`StudentResult` from result where studentNo not 1000;
模糊查询
运算符语法描述
is nulla is null如果操作符为null结果为真
is not nulla is not null如果操作符不为null,结果为真
betweena between b and c如果a匹配到b和c结果为真
likea like bSQL匹配,如果a匹配b结果为真
ina in (a1,a2,a3…)假设a在a1,或者a2…其中某一个值中,结果为真
Like
--查询关键字--
SELECT `name` from item where `name` like '面%'
--查询后面有一个字符的字--
SELECT `name` from item where `name` like '面_'
--查询后面有两个字符的字--
SELECT `name` from item where `name` like '面__'
--查询中间有嘉字的
SELECT `name` from item where `name` like '%嘉%'
In(具体的一个或多个值)
查询id为 29 37 4的
SELECT `id`,`code` FROM `item` WHERE `id` in (29,37,4)

null 和not null

查询地址为空的学生
select `StudentNo`,`StudentName`from `student` where address='' or addres is null
查询不为空
select `StudentNo`,`StudentName`from `student` where address!='' or addres is  null
联表查询

Left Join Right Join inner join

关系表

t_user表

在这里插入图片描述

t_user_role

在这里插入图片描述

t_role

在这里插入图片描述

--join(连接的表) on 连接查询
-- where 等值查询
innser join
select u.id,u.username FROM t_user as u
INNER JOIN t_user_role as ur
where u.id= ur.user_id
right join
select u.id,u.username FROM t_user as u
RIGHT JOIN t_user_role as ur
on u.id= ur.user_id
left join
select u.id,u.username FROM t_user as u
LEFT JOIN t_user_role as ur
on u.id= ur.user_id
操作描述
innser join如果表中至少有一个匹配,就返回行
left join即使右表中没有匹配,也会从左表中返回null值
right join即使左表中没有匹配,也会从右表中返回null值
查询id为1用户有哪些权限
SELECT u.id, r.role_cn_name, r.role_name FROM t_user u
RIGHT JOIN t_user_role ur
on u.id = ur.user_id
INNER JOIN t_role r
on ur.role_id = r.id

查询技巧

我要查询哪些数据select …

从那几个表查from 表 join 连接的表 on 交叉条件

假设还存在一张多张表查询、慢慢来,先查询两张表然后慢慢增加

自连接

自己的表和自己的表连接 核心:一张表拆为两种一样的表即可

父类

idparent_iddescription
10系统管理
110订单管理
80统计分析

子类

idparent_iddescription
21用户管理
31角色管理
41权限管理

在这里插入图片描述

父类子类
系统管理用户管理
系统管理角色管理
系统管理权限管理

查询id与parent_id相同的

SELECT a.`name` as '名字', b.`description` AS '权限名'
FROM `t_permission` as a,`t_permission` as b
where a.id = b.parent_id
分页和排序

排序

在这里插入图片描述

-- 排序:升序ASC 降序DESC--
根据价格排序
SELECT * from `item` ORDER BY price ASC

分页

为什么要分页
缓解数据库压力
给用户很好体验 瀑布流 分页
sql的0-5 是显示1-5数据
1-5			2-6
网页一般显示当前页,总的页数,页面大小
SELECT * from `item` LIMIT 0,5
第一页  limit 0,5	(1-1)*5
第二页	 limit 5,5  (2-1)*5
第三页  limit 10,5 (3-1)*5
第n页   limit (n-1)*pageSize,pageSize
--pageSize:页面2大小
--(n-1)*pageSize 起始值
--n当前页
--数据总数/页面大小 = 重页数
select语法顺序
select 字段 from 表名
left|right|innser join table  on
where   and or
group by
having
order by
limit

子查询

where(这个只是计算出来的)

本质:在where语句中嵌套

where(select * from)

SELECT * from t_user
WHERE t_user.id in(
SELECT user_id FROM t_user_role where t_user.username='admin' )

函数

常用函数(不常用)

数学运算

绝对值计算
SELECT ABS(-8)
向上取整
SELECT CEILING(9.4)
向下
SELECT FLOOR(9.4)
返回一个0-1之间随机数
SELECT RAND()
判断一个数的符合 负数返回-1 正数返回1
SELECT SIGN(10)
字符串函数 
返回字符长度
select char_length('字符串')
拼接字符串
select concat('h','e','l')
查询替换 从某个位置替换某个长度
select insert('我爱编程',1,2,'超级热爱') 
转换小写
select lower('kaungshen')
转换大写
select upper('KUANGSHEN')
返回定义成出现的子串索引
select instr('kuangshen','h')
替换出现的字符串
select replace('狂神说坚持就能成功','坚持','努力')
返回指定的字符串
select substr('狂神说坚持就能成功',4,6)
反转
select reverse('清晨我马上')
获取时间日期
select current date()
select curdate() 获取当前日期
select now() 获取当前时间
select sysdate() 系统时间
select year(now())
select Month(now())
select Day(now())
select hour(now())
select minute(now())
select second(now())

select system_user()
select user()
select version()
聚合函数(常用)

函数名称描述
count()计数
sum()求和
avg()平均数
max()最大值
min()最小值

count

count(字段) 会忽略所有的null值 效率最高
select count(code) from item
一下不会忽略null值
select count(*) from item 本质计算行数
SELECT count(1) FROM item

sum

select sum(`字段`) as 求和 from 表名
select avg(`字段`) as 平均数 from 表名
select max(`字段`) as 最大值 from 表名
select min(`字段`) as 最小值 from 表名

group by

group by 通过什么分组

数据库级别加密

什么是MD5

主要增强算法复杂度和不可逆性,具体的MD5值是一样的

CREATE TABLE `testmd5`(
`id` INT(4) NOT NULL,
`name` VARCHAR(20) not null,
`pwd` VARCHAR(50) not null,
PRIMARY key(`id`)
)engine=INNODB DEFAULT charset = utf8
--明文密码
insert into testmd5 VALUES(1,'zhangsan','123456'),(2,'lisi','123456'),(3,'wangwu','123456')
--加密
update testmd5 set pwd=md5(pwd)
SELECT * FROM testmd5
--一般插入的时候加密
INSERT into testmd5 VALUES(4,'xioaming',md5('123456'))
--如何效验:将用户传递进来的进行md5加密,然后对比即可

事务

什么是事务

要么都成功,要么失败

SQL执行 A给B转账 A 1000 --》200 B200(失败)
SQL执行 B收到A的钱 A 800 --》B400 (成功)
将一组SQL放在一个批次执行

事务原则

ACID 原子性 一致性 隔离性 持久性
原子性:针对同一个事务,要么一起成功,要么一起失败

一致性:针对事务操作钱和操作后状态一致最终值不变

持久性:事务的结束不会随着外界原因导致数据丢失 事务没有提交:恢复到原状 提交了:持久化到数据库

隔离性:多个用户操作,互不影响(一旦隔离失败)
	脏读:一个事务读取了另一个事务没有提交的数据
	
	不可重复读:在一个事务读取某一行数据,多次读取结果不同(这个不一定是错误,只是场合不对)
	
	幻读(虚读):是指一个事务读取到了别的事务插入的数据,导致读取不一致。(一般是行影响,多了一行)

执行事务

mysql 是默认开启事务自动提交的
set autocommit = 0 关闭
set autocommit = 1 开启

---手动处理事务
set autocommit = 0 -关闭自动条件
--开启事务
start transaction --标记一个事务的开始,从这个之后sql都在同一个事务内

insert xx
insert xx
--提交 持久化(成功!)
commit
--回滚:回到原来的样子(失败!)
rollback
--事务结束
set autocommit = 1 --开启自动提交

--了解即可
savepoint 保存点名 --设置一个事务的保存点
rollback to savepoint 保存点名 --回滚到保存点
release savepoint --删除保存点

事务执行

CREATE DATABASE shop CHARACTER set = utf8 collate utf_8_general_ci
USE shop
CREATE TABLE `account`(
`id` int(3) not null auto_increment,
`name` VARCHAR(30) not null,
`money` DECIMAL(9,2) not null,
PRIMARY KEY (`id`)
)engine = INNODB DEFAULT charset = utf8

insert into `account`(`name`,`money`)
VALUES ('A',2000.00),('B',10000.00)

-- 模拟转账 --
set autocommit = 0; -- 关闭事务提交
start transaction  -- 开启事务
update account set money = money-500 where `name` = 'A' -- A减500
update account set money = money+500 where `name` = 'B' -- B加500

COMMIT; -- 提交事务,事务一旦被提交就被持久化了
ROLLBACK; -- 回滚

set autocommit = 1; -- 恢复默认值

索引

MySQL官方的定义:索引就是帮助Mysql高效的获取数据的数据结构
索引分类
在一个表中,主键索引只能有一个,唯一索引可以有多个
  • 主键索引 perimary key
    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引 unique key
    • 避免重复的列出现,唯一索引可以重复,多个列都可以标识唯一索引
  • 常规索引 key/index
    • 默认的 index,key关键字来设置
  • 全文索引 fulltext
    • 在特定数据库引擎下才有,MyLSAM
    • 快速定位数据
-- 索引的使用
-- 1、在创建表的时候给字段增加索引
-- 2、创建完毕后,增加索引

-- 显示索引信息
show index FROM item

-- 增加以个索引
alter TABLE item add fulltext index `name`(`name`)
-- explain 分析sql执行状况

EXPLAIN SELECT * FROM item; -- 非全文索引

EXPLAIN SELECT * FROM item WHERE MATCH(name) against('面')

测试索引

--创建数据库--
CREATE TABLE `app_user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT '' COMMENT '用户昵称',
`email` varchar(50) NOT NULL COMMENT '用户邮箱',
`phone` varchar(20) DEFAULT '' COMMENT '手机号',
`gender` tinyint(4) unsigned DEFAULT '0' COMMENT '性别(0:男;1:女)',
`password` varchar(100) NOT NULL COMMENT '密码',
`age` tinyint(4) DEFAULT '0' COMMENT '年龄',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='app用户表'
-- 插入100万条数据

另外:运行的时候有可能报错
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

需要在运行函数前运行
set global log_bin_trust_function_creators=TRUE;

DELIMITER $$  -- 写函数之前必须要写,标志
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 0;
WHILE i < num DO
  INSERT INTO app_user(`name`, `email`, `phone`, `gender`, `password`, `age`)
   VALUES(CONCAT('用户', i), '24736743@qq.com', CONCAT('18', FLOOR(RAND()*(999999999-100000000)+100000000)),FLOOR(RAND()*2),UUID(), FLOOR(RAND()*100));
  SET i = i + 1;
END WHILE;
RETURN i;
END;
SELECT mock_data();

索引

SELECT * from app_user where `name` = '用户9999';
SELECT * from app_user where `name` = '用户9999'
> OK
> 时间: 1.008s
可以发现普通查询时间之久
这时候可以创建索引
--创建索引
-- create index 索引名 on 表(字段)
CREATE index id_app_user_name on app_user(`name`);
--创建完之后查询
SELECT * from app_user where `name` = '用户9999';
SELECT * from app_user where `name` = '用户9999'
> OK
> 时间: 0.01s

索引在小数据量的时候不大,但是再大数据的时候,十分明显

索引原则

  • 索引不是越多越好
  • 不要对经常变动的数据加索引
  • 小数据的表不需要加索引
  • 索引一般加在常用来查询字段上

索引数据结构:

​ Hasn:类型索引

​ Btree:InnoDB的默认数据结构

数据库备份

mysqkl数据库备份方式
	1.直接拷贝物理文件
	2.在Navicat右键转存储数据文件 数据和结构
	3.使用命令行 mysqldump
		一个表
		mysqldump -hlocalhot -u用户名 -p密码 数据库 表名 >物理磁盘位置/文件名(你药存放的位置)
		mysqldump -hlocalhost -uroot -p123456 medical item >D:a.sql
		多个表
		mysqldump -hlocalhot -u用户名 -p密码 数据库 表名1 表2 >物理磁盘位置/文件名(你药存放的位置)
		mysqldump -hlocalhost -uroot -p123456 medical item item2 >D:b.sql
		库
		mysqldump -hlocalhot -u用户名 -p密码 数据库 >物理磁盘位置/文件名(你药存放的位置)
		mysqldump -hlocalhost -uroot -p123456 medical >D:c.sql

导入

mysql -u用户名 -p密码
在登录情况下
source 备份的文件(也就是文件的位置)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏来梦栀子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值