当前位置:网站首页>MySQL learning
MySQL learning
2022-08-05 01:29:00 【Wavelet (Learning Edition)】
一、MySQL安装和卸载
For detailed steps, please refer to the detailed steps in the blog resource
详细安装教程
完全卸载教程
1.安装完毕之后:Boot into a black window in administrator modemysql
2.用命令 mysql -u root -p 进入mysql管理界面
3.进入界面后更改root密码
update mysql.user set authentication_string=password(‘123456’) where user=‘root’ and Host = ‘localhost’;
4.刷新权限
flush privileges;
5.修改mysql安装目录下的my.ini文件删除最后一句skip-grant-tables
6.配置好环境之后,不需要进入mysqlThe installation directory can be started anywhere
7.重新启动mysql即可正常使用
net start mysql // 启动
net stop mysql //结束
8.安装工具SQLyog
二、MySQL语法
1.数据库操作
创建数据库 : create database [if not exists] 数据库名;
删除数据库 : drop database [if exists] 数据库名;
查看数据库 : show databases;
使用数据库 : use 数据库名;
创建数据表
语法:
create table [if not exists] `表名`(
`字段名1` 列类型 [属性][索引][注释],
`字段名2` 列类型 [属性][索引][注释],
`字段名3` 列类型 [属性][索引][注释],
#...
`字段名n` 列类型 [属性][索引][注释],
)[表类型][表字符集][注释];
说明:反引号用于区别MySQL保留字与普通字符而引入的(键盘esc下面的键)
数据值和列类型
列类型:规定数据库中该列存放的数据类型
数值类型
tinyint: 非常小的数据 1字节
smallint : 较小的数据 2字节
mediumint:中等大小的数据 3字节
int: 标准整数 4字节
字符串类型
char[]: 固定长字符串,Fast retrieval but waste space M字符
varchar[]: 可变字符串 变长度
tinytext: :微型文本串
text: 文本串
Date and time data types
DATE: YYYY-MM-DD,日期格式
TIME: Hh:mm:ss, era format
DATETIME: YY-MM-DD hh:mm:ss
TIMESTAMP:YYYYMMDDhhmmss 格式表示的时间戳
YEAR: YYYY格式的年份值
Null值
未知值/没有值 不要用Null进行算术运算,结果仍未Null
数据字段属性:
Unsigned:无符号 声明该数据列不允许负数
ZEROFILL:0填充的 不足位数的用0来填充,如int(3),则为005
Auto_inCrement:
自动增长的,每添加一条数据,自动在上一个记录数上加1(默认)
通常用于设置主键,且为整数类型,可定义起始值和步长,When the current table sets the step size,只影响当前表,[email protected]@auto_increment_increment=5;影响所有使用自增的表(全局)
NULL和NOT NULL:默认为null,如果设置为not null,则该列必须有值
DEFAULT:默认的;用于设置默认值
例如:性别字段:默认‘男’,否则为‘女;若无指定该列的值,则默认值为‘’男’的值
例题:创建一个school数据库,创建学生表(列,字段) ,学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email 创建表之前 , 一定要先选择数据库
show create database wei //查看数据库的定义
show create table student // 查看数据表的定义
desc student //显示表的结构
USE wei
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 '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '生日',
`address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
DESC student
数据表的类型:
设置数据表的类型:
create table 表名(
省略一些代码 MySQL注释 #单行注释 /**/ 多行注释)engine = myisam(or innodb)
show engines #查看mysql所支持的引擎类型(表类型)
适用场合:
节约空间及相应速度–MyISAM
安全性,事务处理及多用户操作数据表=InnoDB
数据表的存储位置
MySQLData tables are stored on disk as files,包括表文件,数据文件,and an options file in the database
位置:Mysql安装目录\data\下存放数据表,目录名对应数据库名,该目录下文件名对应数据表
*.frm - 表结构定义文件
*.MYD - 数据文件(data)
*.MYI - 索引文件(index)
设置数据表字符集
We can do it for the database,数据表,数据列设定不同的字符集,设定方法为:
创建时通过命令来设置,如果:create table 表名() charset = uft8
如无设定,根据MySQL数据库配置文件my.ini中的参数设定
2.修改数据库
修改表:alter table
修改表名:alter table 旧表名 rename as 新表名
添加字段:alter table 表名 add字段名 列属性[属性]
修改字符:alter table 表名 modify 字段名 列类型[属性] /alter table 表名 change 旧字段名 新字段名 列属性[属性]
删除字符:alter table 表名 drop 字段名
删除数据表
语法:drop table if exists 表
- if exist 为可选,判断是否存在该数据表
- 如删除不存在的数据表会抛出错误
其他
1.每个库目录存在一个保存当前数据库的选项文件dp.opt
2.注释:#单行 /**/多行
3.SQL对大小写不敏感
4.清除已有语句:\c
外键:
将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值,此时,The property in the second table that holds these values becomes the foreign key
作用:保持数据一致性,完整性,The main purpose is to control data constraints stored in foreign key tables,使两张表形成关联,A foreign key can only refer to the value of a column in the foreign table or a null value applies
创建外键
建表时指定外键约束:
创建外键的方式一:创建子表同时创建外键
//年级表
CREATE TABLE `grade`(
`gradeid`INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID',
`gradename`VARCHAR(50) NOT NULL COMMENT '年级名称' ,
PRIMARY KEY(`gradeid`)
)ENGINE= INNODB DEFAULT CHARSET=utf8
//学生信息表(学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (
`studentno` INT(4) NOT NULL COMMENT '学号',
`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',
`gradeid` INT(10) DEFAULT NULL COMMENT '年级',
`phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`borndate` DATETIME DEFAULT NULL COMMENT '生日',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
PRIMARY KEY (`studentno`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
创建外键方式二:创建子表完毕后,修改子表添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
删除外键
操作:删除grade表,删除具有主外键关系的表时,要先删子表,后删主表
删除外键:later table student drop foreign key FK_gradeid;
索引还在,So drop the index : alter table student drop index FK_gardeid;
3.DML语言
数据库的意义:数据存储,数据管理
1.通过sqlyog等管理工具管理数据库数据 -
2.同通过DML语句管理数据库数据
DML:数据库操作语言 用于操作数据库对象中所包含的数据
包括:inset(添加数据语句) updata(Update the data statement) delete(删除数据语句)
添加数据
语法:insert into 表名[(字段1,字段2,字段3…)]VALUES(值1
,值2
…)
注意:可同时插入多条数据,values后用英文逗号隔开
USE wei
INSERT INTO grade(gradename) VALUES('大二');
//The added value MUST match the table structure,数据列,顺序相对应,且数量一致
//一次插入多条数据
INSERT INTO grade(gradename) VALUES('大四'),('研究生');
修改数据
语法:update 表名 set column_name=value[,column_name2 = value2,…][where condition];
注意:column_name为要更改的数据列 condition为筛选条件,如不指定则修改该表的所有列数据
where条件子句
Modify grade grade information
UPDATE grade SET gradename = '高中' WHERE gradeid = 1;
删除数据
语法:delete from 表名[where condition];
注意:condition为筛选条件,如不指定则删除该表的所有列数据
删除最后一个数据
DELETE FROM grade WHERE gradeid = 5
TRUNCATE命令
作用:用于完全清空表数据,但表结构,索引,约束等不变
语法:TURNCATE [table] table_name;
清空年级表
TRUNCATE grade
Note the difference with delete命令:
相同:都能删除数据,不删除表结构,但truncate速度更快
不同:适用truncate table重新设置atuo_increment计时器,适用truncate table不会对事务有影响
测试:
//创建一个测试表
CREATE TABLE `test` (
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
//插入几个测试数据
INSERT INTO test(coll) VALUES('row1'),('row2'),('row3');
//删除表数据(不带WHERE条件的DELETE)
DELETE FROM test;
//结论:如不指定WHEREthen delete all data in the table,The auto-incrementing current value can still be carried out from the original basis,会记录日志
//删除表数据(TRUNCATE)
TRUNCATE TABLE test;
DESC test
//结论:TRUNCATE删除数据,自增当前值会恢复到初始值重新开始,不会记录日志
//同样适用DELETEClear the database data of different engines
4.DQL语言
DQL(数据查询语言)
1.查询数据库数据,如select语句
2.Simple single table queries or outright complex and nested queries
3.It is the core and most important statement in the database language
4.使用频率最高的语句
select语法
SELECT [ALL | DISTINCT]
{
* | table.* | [table.field1[AS alias1][,table.field2[AS alias2]][,...]]}
FROM table_name [AS table_alias]
[LEFT | RIGHT | INNER JOIN table_name2] -- 联合查询
[WHERE ...] -- 指定结果需满足的条件
[GROUP BY ...] -- 指定结果按照哪几个字段来分组
[HAVING] -- 过滤分组的记录必须满足的次要条件
[ORDER BY ...] -- 指定查询记录按一个或多个条件排序
[LIMIT {
[OFFSET,]ROW_COUNT | row_countOFFSET OFFSET}];
-- 指定查询的记录从哪条至哪条
[]代表可选,{}代表必选
指定查询字段
查询所有学生信息:
SELECT * FROM student;
SELECT studentno,studentname FROM student;
AS子句作为别名
作用:A new alias can be given to the data column,Give the table a new alias,The calculated or aggregated result can be replaced by another new name
SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;
SELECT CONCAT('姓名',studentname)AS 新姓名 FROM student;
distinct关键词使用
作用:去掉select查询返回的记录结果中重复的记录(返回所有列的值都相同,只返回一条)
# 查看哪些同学参加了考试(学号) 去除重复项
SELECT * FROM result; -- 查看考试成绩
SELECT studentno FROM result; -- 查看哪些同学参加了考试
SELECT DISTINCT studentno FROM result; -- 了解:DISTINCT 去除重复项 , (默认是ALL)
使用表达式的列
数据库中的表达式:一般由文本值,列值,null,函数和操作符等组成
where条件语句
作用:用于检索数据表中符合条件的记录
搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
逻辑操作符
-- 满足条件的查询(where)
SELECT Studentno,StudentResult FROM result;
-- 查询考试成绩在95-100之间的
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 AND StudentResult<=100;
-- AND也可以写成 &&
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult>=95 && StudentResult<=100;
-- 模糊查询(对应的词:精确查询)
SELECT Studentno,StudentResult
FROM result
WHERE StudentResult BETWEEN 95 AND 100;
-- 除了1000号同学,要其他同学的成绩
SELECT studentno,studentresult
FROM result
WHERE studentno!=1000;
-- 使用NOT
SELECT studentno,studentresult
FROM result
WHERE NOT studentno=1000;
模糊查询:比较操作符
-- LIKE
-- 查询姓刘的同学的学号及姓名
-- like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符)
SELECT studentno,studentname FROM student
WHERE studentname LIKE '刘%';
-- 查询姓刘的同学,后面只有一个字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '刘_';
-- 查询姓刘的同学,后面只有两个字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '刘__';
-- 查询姓名中含有 嘉 字的
SELECT studentno,studentname FROM student
WHERE studentname LIKE '%嘉%';
-- 查询姓名中含有特殊字符的需要使用转义符号 '\'
-- 自定义转义符关键字: ESCAPE ':'
-- IN
-- 查询学号为1000,1001,1002的学生姓名
SELECT studentno,studentname FROM student
WHERE studentno IN (1000,1001,1002);
-- 查询地址在北京,南京,河南洛阳的学生
SELECT studentno,studentname,address FROM student
WHERE address IN ('北京','南京','河南洛阳');
-- NULL 空
-- 查询出生日期没有填写的同学
-- 不能直接写=NULL , 这是代表错误的 , 用 is null
SELECT studentname FROM student
WHERE BornDate IS NULL;
-- 查询出生日期填写的同学
SELECT studentname FROM student
WHERE BornDate IS NOT NULL;
-- 查询没有写家庭住址的同学(空字符串不等于null)
SELECT studentname FROM student
WHERE Address='' OR Address IS NULL;
连接查询
join对比:
inner join:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集
left join:The records in the left table will all be displayed,而右表只会显示符合搜索条件的记录,右表记录不足的地方均为null
right join: Only records matching the search criteria will be displayed on the left,The table on the right will be displayed in full,左表记录不足的地方均为null
全连接union:通过union连接的sqlThe number of columns they take out separately must be the same;When the merged column names are not required to be the same,以第一个sql表列名为准
/* 连接查询 如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询 内连接 inner join 查询两个表中的结果集中的交集 外连接 outer join 左外连接 left join (以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充) 右外连接 right join (以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充) 等值连接和非等值连接 自连接 */
-- 查询参加了考试的同学信息(学号,学生姓名,科目编号,分数)
SELECT * FROM student;
SELECT * FROM result;
/*思路: (1):分析需求,确定查询的列来源于两个类,student result,连接查询 (2):确定使用哪种连接查询?(内连接) */
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
-- 右连接(也可实现)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
RIGHT JOIN result r
ON r.studentno = s.studentno
-- 等值连接
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s , result r
WHERE r.studentno = s.studentno
-- 左连接 (查询了所有同学,不考试的也会查出来)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
LEFT JOIN result r
ON r.studentno = s.studentno
-- 查一下缺考的同学(左连接应用场景)
SELECT s.studentno,studentname,subjectno,StudentResult
FROM student s
LEFT JOIN result r
ON r.studentno = s.studentno
WHERE StudentResult IS NULL
-- 思考题:查询参加了考试的同学信息(学号,学生姓名,科目名,分数)
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON sub.subjectno = r.subjectno
自连接
数据表与自身进行连接,需求:从一个包含栏目ID , 栏目名称和父栏目ID的表中 查询父栏目名称和其他子栏目名称
排序和分页
语法 : ORDER BY
ORDER BY 语句用于根据指定的列对结果集进行排序.
ORDER BY 语句默认按照ASC升序对记录进行排序.
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字.
-- 查询 数据库结构-1 的所有考试结果(学号 学生姓名 科目名称 成绩)
-- 按成绩降序排序
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='数据库结构-1'
ORDER BY StudentResult DESC
分页:
-- 每页显示5条数据
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='数据库结构-1'
ORDER BY StudentResult DESC , studentno
LIMIT 0,5
-- 查询 JAVA第一学年 课程成绩前10名并且分数大于80的学生信息(学号,姓名,课程名,分数)
SELECT s.studentno,studentname,subjectname,StudentResult
FROM student s
INNER JOIN result r
ON r.studentno = s.studentno
INNER JOIN `subject` sub
ON r.subjectno = sub.subjectno
WHERE subjectname='JAVA第一学年'
ORDER BY StudentResult DESC
LIMIT 0,10
子查询
什么是子查询?
在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句,嵌套查询可由多个子查询组成,求解的方式是由里及外;子查询返回的结果一般都是集合,故而建议使用IN关键字;
-- 查询 数据库结构-1 的所有考试结果(学号,科目编号,成绩),并且成绩降序排列
-- 方法一:使用连接查询
SELECT studentno,r.subjectno,StudentResult
FROM result r
INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`
WHERE subjectname = '数据库结构-1'
ORDER BY studentresult DESC;
-- 方法二:使用子查询(执行顺序:由里及外)
SELECT studentno,subjectno,StudentResult
FROM result
WHERE subjectno=(
SELECT subjectno FROM `subject`
WHERE subjectname = '数据库结构-1'
)
ORDER BY studentresult DESC;
5.MySQL函数
数据函数
SELECT ABS(-8); //绝对值
SELECT CEILING(9.4); //向上取整
SELECT FLOOR(9.4); //向下取整
SELECT RAND(); //随机数,返回一个0-1之间的随机数
SELECT SIGN(0); //符号函数: 负数返回-1,正数返回1,0返回0
字符串函数
SELECT CHAR_LENGTH(‘狂神说坚持就能成功’); //返回字符串包含的字符数
SELECT CONCAT(‘我’,‘爱’,‘程序’); //合并字符串,参数可以有多个
SELECT INSERT(‘我爱编程helloworld’,1,2,‘超级热爱’); //替换字符串,从某个位置开始替换某个长度
SELECT LOWER(‘KuangShen’); //小写
SELECT UPPER(‘KuangShen’); //大写
SELECT LEFT(‘hello,world’,5); //从左边截取
SELECT RIGHT(‘hello,world’,5); //从右边截取
SELECT REPLACE(‘狂神说坚持就能成功’,‘坚持’,‘努力’); //替换字符串
SELECT SUBSTR(‘狂神说坚持就能成功’,4,6); //截取字符串,开始和长度
SELECT REVERSE(‘狂神说坚持就能成功’); /*反转
日期和时间函数
SELECT CURRENT_DATE(); //获取当前日期
SELECT CURDATE(); //获取当前日期
SELECT NOW(); //获取当前日期和时间
SELECT LOCALTIME(); //获取当前日期和时间
SELECT SYSDATE(); //获取当前日期和时间
– 获取年月日,时分秒
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());
聚合函数
COUNT() 返回满足Select条件的记录总和数,如 select count(*) 【不建议使用 *,效率低】
SUM() 返回数字字段或表达式列作统计,返回一列的总和.
AVG() 通常为数值字段或表达列作统计,返回一列的平均值
MAX() 可以为数值字段,字符字段或表达式列作统计,返回最大的值.
MIN() 可以为数值字段,字符字段或表达式列作统计,返回最小的值
MD5加密
1.简介:MD5是计算机广泛使用的杂凑算法之一,是杂凑算法的基础原理
2.实现数据加密
//创建一个新的表bo
CREATE TABLE `bo` (
`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 bo VALUES(1,'wuhu','123456'),(2,'aha','456789')
//对pwdThese columns of data are encrypted
update testmd5 set pwd = md5(pwd);
//Encrypt a user's password individually
INSERT INTO bo VALUES(3,'yahu','123456')
update bo set pwd = md5(pwd) where name = 'yahu';
//Insert new data for encryption
INSERT INTO bo VALUES(4,'aha',md5('123456'));
//查询登录用户信息(md5对比使用,View the mask after the user enters the password for comparison)
SELECT * FROM testmd5 WHERE `name`='aha' AND pwd=MD5('123456');
数值函数:
abs(x) – 绝对值 abs(-10.9) = 10
format(x, d) – 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46
ceil(x) – 向上取整 ceil(10.1) = 11
floor(x) – 向下取整 floor (10.1) = 10
round(x) – 四舍五入去整
mod(m, n) – m%n m mod n 求余 10%3=1
pi() – 获得圆周率
pow(m, n) – m^n
sqrt(x) – 算术平方根
rand() – 随机数
truncate(x, d) – 截取d位小数
时间日期函数:
– 时间日期函数
now(), current_timestamp(); – 当前日期时间
current_date(); – 当前日期
current_time(); – 当前时间
date(‘yyyy-mm-dd hh:ii:ss’); – 获取日期部分
time(‘yyyy-mm-dd hh:ii:ss’); – 获取时间部分
date_format(‘yyyy-mm-dd hh:ii:ss’, ‘%d %y %a %d %m %b %j’); – 格式化时间
unix_timestamp(); – 获得unix时间戳
from_unixtime(); – 从时间戳获得时间
字符串函数:
length(string) – string长度,字节
char_length(string) – string的字符个数
substring(str, position [,length]) – 从str的position开始,取length个字符
replace(str ,search_str ,replace_str) – 在str中用replace_str替换search_str
instr(string ,substring) – 返回substring首次在string中出现的位置
concat(string [,…]) – 连接字串
charset(str) – 返回字串字符集
lcase(string) – 转换成小写
left(string, length) – 从string2中的左边起取length个字符
load_file(file_name) – 从文件读取内容
locate(substring, string [,start_position]) – 同instr,但可指定开始位置
lpad(string, length, pad) – 重复用pad加在string开头,直到字串长度为length
ltrim(string) – 去除前端空格
repeat(string, count) – 重复count次
rpad(string, length, pad) --在str后用pad补充,直到长度为length
rtrim(string) – 去除后端空格
strcmp(string1 ,string2) – 逐字符比较两字串大小
聚合函数:
count()
sum();
max();
min();
avg();
group_concat()
其他常用函数:
md5();
default();
6.事务和索引
事务:将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,then all in the batchSQL都将被取消执行,MySQLTransaction math is only supportedInnoDB和BDB数据表类型
事务的原则:
原子性:要么全部完成,要么全部不完成
一致性:事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少
隔离性:隔离状态执行事务,is that they appear to be the only operations the system performs at a given time
持久性:在事务完成以后,The changes made by the transaction to the database are persisted in the database,并不会被回滚
基本语法
-- 使用set语句来改变自动提交模式
SET autocommit = 0; /*关闭*/
SET autocommit = 1; /*开启*/
-- 注意:
--- 1.MySQL中默认是自动提交
--- 2.使用事务时应先关闭自动提交
-- 开始一个事务,标记事务的起始点
START TRANSACTION
-- 提交一个事务给数据库
COMMIT
-- 将事务回滚,数据回到本次事务的初始状态
ROLLBACK
-- 还原MySQL数据库的自动提交
SET autocommit =1;
-- 保存点
SAVEPOINT 保存点名称 -- 设置一个事务保存点
ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点
RELEASE SAVEPOINT 保存点名称 -- 删除保存点
测试:
A在线买一款价格为500元商品,网上银行转账.
A的银行卡余额为2000,然后给商家B支付500.
商家B一开始的银行卡余额为10000
//创建数据库shop和创建表account并插入2条数据
CREATE DATABASE `shop`CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `shop`;
CREATE TABLE `account` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
`cash` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO account (`name`,`cash`)
VALUES('A',2000.00),('B',10000.00)
//转账实现
SET autocommit = 0; //关闭自动提交
START TRANSACTION; //开始一个事务,标记事务的起始点
UPDATE account SET cash=cash-500 WHERE `name` = `A`;
UPDATE account SET cash=cash+500 WHERE `name` = `B`;
COMMIT; //提交事务
SET autocommit = 1; //恢复自动提交
索引
索引的作用:提高查询速度,确保数据的唯一性,可以加速表和表之间的连接,实现表与表之间的参照完整性,使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间,全文检索字段进行搜索优化
分类
主键索引,唯一索引,常规索引,全文索引
主键索引:某一个属性组能唯一标识一条记录,The most common index type,确保数据记录的唯一性
唯一索引:避免同一个表中某数据列中的值重复,A primary key index can only consist of one,唯一索引可能有多个
常规索引:快速定位特定数据,index和keyKeywords can be set to regular indexes
全文索引:快速定位特定数据
备份
– 导出 -wPortable backup conditions
- 导出一张表 – mysqldump -uroot -p123456 school student >D:/a.sql mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)
- 导出多张表 – mysqldump -uroot -p123456 school student result >D:/a.sql mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)
- 导出所有表 – mysqldump -uroot -p123456 school >D:/a.sql mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)
- 导出一个库 – mysqldump -uroot -p123456 -B school >D:/a.sql mysqldump -u用户名 -p密码 -B 库名 > 文件名(D:/a.sql)
如有错误,请及时指正!如有侵权,联系删除
参考文章:狂神说
边栏推荐
猜你喜欢
深度学习训练前快速批量修改数据集中的图片名
Exploding the circle of friends, Alibaba produced billion-level concurrent design quick notes are too fragrant
快速批量修改VOC格式数据集标签的文件名,即快速批量修改.xml文件名
A new technical director, who calls DDD a senior, is convinced
10年测试经验,在35岁的生理年龄面前,一文不值
MySQL学习
金九银十面试跳槽季;你准备好了吗?
Introduction to JVM class loading
1349. 参加考试的最大学生数 状态压缩
Gartner Hype Cycle:超融合技术将在2年内到达“生产力成熟期”
随机推荐
软件测试技术之最有效的七大性能测试技术
OPENWIFI实践1:下载并编译SDRPi的HDL源码
二叉树[全解](C语言)
5. PCIe official example
Knowledge Points for Network Planning Designers' Morning Questions in November 2021 (Part 2)
C# const readonly static 关键字区别
EL定时刷新页面中的皕杰报表实例
MySQL学习
(十七)51单片机——AD/DA转换
汇编语言之源程序
硬实力和软实力,哪个对测试人来说更重要?
手把手基于YOLOv5定制实现FacePose之《YOLO结构解读、YOLO数据格式转换、YOLO过程修改》
JUC thread pool (1): FutureTask use
After the staged testing is complete, have you performed defect analysis?
Kubernetes 网络入门
如何创建rpm包
The method of freely controlling concurrency in the sync package in GO
PCIe 核配置
数仓4.0(三)------数据仓库系统
torch.autograd.grad finds the second derivative