MySQL基础总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL基础总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含20304字,纯文字阅读大概需要30分钟。
内容图文
这里写自定义目录标题
有话说
这篇文章只是本人在学习过程中做一记录(记性不太好),若有朋友发现问题还望提醒指正
连接登陆 MySQL
Windows系统启动本机MySQL:
打开命令窗口(window键+R:cmd),进入MySQL安装的bin目录
启动:mysqld --console
或 net start mysql (mysql 是启动的服务名,不一定都是mysql,具体服务名查看服务列表,我的为mysql80)
关闭:mysqladmin -uroot shutdown (root 默认用户名)
或 net stop mysql
连接MySQL:
打开命令窗口(window键+R:cmd),进入MySQL安装的bin目录
命令:mysql -h 主机地址 -u 用户名 -p 用户密码
(用户密码有两种输入方式:1.-p 直接回车 输入用户密码 2.-p 后面直接跟用户密码)
实例:mysql -h127.0.0.1 -uroot -psyy123456 (当连接本地mysql服务器时,可以省略 -h主机地址 eg:mysql -uroot -p123456)
mysql -h127.0.0.1 -uroot -p
退出MySQL命令:exit/quit (回车)
MySQL用户设置
添加用户:
第一种方式:使用insert命令
在mysql数据库中的mysql库的user表添加新用户(user表中具体字段参考表信息)
INSERT INTO user(host,user,password/authentication_string,select_priv,insert_priv,update_priv.....)
values('host‘,'用户名','密码','Y/N'.......);
重新载入授权表:FLUSH PRIVTLEGES;
ps:在添加用户时,可以使用PASSWORD()函数对密码进行加密(8.0.11版本级以上版本已经移除了,可以使用MD5()函数替换),MySQL5.7版本及以上中的user表的password字段换成了authentication_string
在创建用户指定权限时,在对应的权限列中(具体权限列查看user表),设置 'Y'即可:
Select_priv 查询数据
Insert_priv 插入数据
Update_priv 更新数据
Delete_priv 删除数据
Create_priv 创建表
Alter_priv 更新表
Grant_priv 授权
Index_priv 索引
第二种方式:使用 GRANT 命令
GRANT ALL|权限1,权限2.... ON 数据库.表 TO '用户名'@'登录主机' identified by '密码' [WITH GRANT OPTION]
用户名:你将创建或赋予权限的用户名
登录主机:指定该用户在那个主机上可以登陆,本地用户可以用localhost,%指该用户可以在任意远程主机登陆。
密码:该用户登陆密码,可以为空,如果为空则用户登陆是不需要密码
数据库:指明该用户可以操作的数据库
表:指定该用户可以操作的数据库中指定的表,所有数据库中所有表可以用*.* 表示
**示例:为test用户分配可对所有数据库中所有表进行所有操作,并设置验证密码**
grant all privileges on *.* to 'test'@'%' identified by '1234';
(mysql8.0及以上版本将创建用户和赋予权限的这种方式分开了,执行这句sql会提示:
)
第三种方式:CREATE USER 方法
此种方式是将第二种grant方法拆分处理,将创建用户和对用户赋权的操作分开
创建用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password'
username:创建的用户名
host:指定该用户在那个主机上可以登陆,本地用户可以用localhost,%指该用户可以在任意远程主机登陆。
password:该用户登陆密码,可以为空,如果为空则用户登陆是不需要密码
授权:
GRANT privileges ON database.tablename TO 'username’@‘host'
privileges:用户的操作权限,如select,insert,update.....授予全部权限则直接指定 ALL
示例:创建test用户允许在本机使用1234验证登陆,并授予test库中所有表的select,update权限
create user 'test'@’localhost' identified by '1234';
grant select,update on test.* to 'test'@'localhost';
ps:用以上命令授权的用户不能给其他用户授权,如果想让该用户可以授权,使用 with grant option
GRANT privileges ON databalse.tablename TO ‘username’@‘host’ WITH GRANT OPTION;
完成用户创建后,一定一定一定要记得刷新重新加载系统权限表,不刷新的话用户无法生效登陆:flush privileges;
设置或更改用户密码:
第一种方式:使用 set password 命令
SET PASSWORD FOR 'username'@'host' = 'newpassword';
如果要修改当前登陆用户密码:SET PASSWORD = 'newpassword';
示例:修改test用户密码为123456
set password for 'test'@'%' = '123456';
第二种方式:用update直接编辑user表
用户登陆后切换到mysql库:
use mysql;
update user set password = 'newpassword' where user = 'username';(在 MySQL5.7 及以上版本中 user 表的 password 字段已换成了authentication_string)
示例:修改用户test密码为123:
use mysql;
update user set authentication_string = '123' where user = 'test';
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190627101312581.png)
也可以在不切换到mysql库的时候使用 database.talbename 方式指定修改表:
update mysql.user set passwrod/authentication_string = 'newpassword' where user = 'username';
示例:修改用户test密码为123:
update mysql.user set authentication_string = '123' where user = 'test';
第三种方式:使用mysqladmin 命令
格式:mysqladmin -h登陆主机 -u用户名 -p旧密码 password 新密码
用户创建时没有设置密码,-p旧密码 可以省略
示例:mysqladmin -uroot -p123456 password 123
第四种方式:忘记密码时
关闭正在运行的MySQL服务
打开命令窗口 进入mysql的bin目录
命令:mysqld --skip-grant-tables 回车(在mysql8.0及以上版本中此命令失效,可以使用:
mysqld --console --skip-grant-tables --shared-memory)
--skip-grant-tables:启动mysql服务的时候跳过权限表认证
再开一个命令窗口(保持上个服务启动窗口不动),进入mysql的bin目录,直接输入mysql 回车,成功则出现 mysql> 提示,
可以使用直接更新user表的方式修改密码,无法使用set password命令修改
撤销用户权限
命令:REVOKE 权限 ON 数据库.表 FROM ’用户‘@’登陆主机';
SHOW GRANTS FOR '用户’@'登陆主机‘ 查看指定用户授权信息
撤销用户权限时,数据库,表 都要和授权时相同,撤回的权限必须是授权的权限
示例:撤回 test 用户的update权限
查看test用户的授权信息
SHOW GRANTS FOR 'test'@'localhot'
撤回update权限:
revoke update on *.* to 'test'@'localhost';
或直接更新user表信息 :
update mysql.user set update_priv = 'N' where user = 'test';
删除用户:
命令一:DROP USER '用户’@'登陆主机';
示例:删除test用户
drop user 'test'@'%';
命令二:delete from mysql.user where user = '用户’;
数据定义语言DDL(Data Definition Language)
操作对象:数据库和表
数据库相关
创建数据库:create database 数据库名;
删除数据库:drop database 数据库名;
切换数据库: use 数据库名;
ps:创建和删除数据库也可以使用mysqladmin 命令来实现,不过普通用户的话需要指定特定的权限,root用户有权限执行(此命令语句执行时打开命令窗口进入mysql\bin目录下执行):
创建数据库:mysqladmin -u用户名 -p密码 create 数据库名
删除数据库:mysqladmin -u用户名 -p密码 drop 数据库名 (执行删除命令时会出现提示,确认是否删除,输入y则确认删除)
示例:创建test_student数据库
create database test_student;
或:
切换到test_student库
use test_student;
删除test_student库
drop database test_student;
或
表相关
MySql数据类型
数据类型分类:
1).数值类型:tinyint,smallint,mediumint,int,bigint,float,double,decimal
数值类型分为有符号位和无符位
2).日期类型:date,time,year,datetime,timestamp
date : YYYY-MM-DD
time : HH:mm:SS
year : YYYY
datetime : YYYY-MM-DD HH:mm:SS
timestamp : YYYYMMDD HHmmSS
3).字符串类型: char,varchar,tinyblob,tinytext,blob,text,mediumblob,mediumtext,longblob,longtext
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 可变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 可变长度,长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
ps:_blob类型的数据以二进制方式存储,英文存储不区分大小写
_text类型的数据以文本方式存储,区分大小写,不能指定默认值,可以指定字符集(编码格式如:utf-8)
4).枚举类型:enum
查看字段长度:select length(字段名) from 表名;
创建表
查看数据库中存在的表:
show tables;
创建表:create table 表名(
字段名 类型 约束,
.....
);
创建表时,可以为字段指定一些属性:
NULL 数据列可以包含NULL 值
NOT NULL 数据列不能为NULL值
DEFAULT 用于指定默认值,DEFAULT 默认值
PRIMARY KEY 标明此列为主键
AUTO_INCREMENT 列值自动递增,用于整数型类型
UNSIGNED 数值类型为无符号位
CHARACTER SET 指定字符集(编码格式),使用时紧跟在类型之后
COMMENT 注解,帮助理解的 COMMENT '解释说明'
UNIQUE 唯一,列值不能重复
示例:创建student表,编号,姓名,年龄,出生日期,班级,且编号主键自增
create table student(
id int(60) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '编号',
name varchar(50) NOT NULL COMMENT '姓名',
age int(10) NOT NULL COMMENT '年龄',
birthday datetime NULL DEFAULT NULL COMMENT '出生日期,默认为null',
classroom varchar(10) NOT NULL COMMENT '班级',
del_flag enum('1','0') CHARACTER SET utf8 DEFAULT '0' COMMENT '删除标志,1为删除'
);
其中主键指定方式也可以放在创建之后,使用 PRIMARY KEY (id,..)可以有多个主键列,形成联合主键,使用 , 隔开 列1,列2...
删除表
格式:drop table 表名;删除表数据,表结构,属性及索引,立即释放磁盘空间,不可回滚,速度最快
truncate table 表名; 删除表数据,保留表结构,立即释放磁盘空间,不可回滚,速度快于delete语句
delete from 表名; 删除表数据,表结构不变,对于MyISAM存储引擎不会立即释放磁盘空间,可是使用 optimize table 表名; 释放磁盘空间,这种情况虽不会释放空间,但下次插入数据时仍可使用这部分空间
示例:删除student表
drop table student;
修改表 ALTER
使用ALTER命令修改表的列属性,名称,表名。。。
查看表信息:show columns from 表名; (新版本失效)
或: desc 表名;
查看数据表类型信息: show table status;
增加列:alter table 表名 add 列名 类型 其他;
使用alter增加列时,默认加在原始表的最后一列,可以使用FIRST(设置位于第一列),AFTER 指定列名(设置位于指定列之后)
删除列:alter table 表名 drop 列名; 如果表中值剩余一个字段则无法用此语句删除
修改字段类型及名称:MODIFY 或 CHANGE
modify: alter table 表名 modify 列名 类型 其他; FIRST或AFTER 也可用
change: alter table 表名 change 旧列名 新列名 类型 其他; 新列名和旧列名可以相同,类似 modify 的效果
修改字段默认值:
除了使用 modify 和change 语句外,还可以使用 ALTER - SET 语句
增加/修改默认值: ALTER TABLE 表名 ALTER 字段名 SET DEFAULT 默认值;
删除默认值: ALTER TABLE 表名 ALTER 字段名 DROP DEFAULT;
删除主键:ALTER TABLE 表名 DROP PRIMARY KEY;
修改表类型: ALTER TABLE 表名 ENGINE = 表类型;(MyISAM|InnoDB....)
修改表名: ALTER TABLE 旧表名 RENAME TO 新表名;
添加普通索引: ALTER TABLE 表名 ADD INDEX 索引名 (字段名1【,字段名2.....】);
添加主键索引:ALTER TABLE 表名 ADD PRIMARY KEY (字段名1【,字段名2...】);该语句会添加一个主键,索引值必须是唯一的
添加唯一索引: ALTER TABLE 表名 ADD UNIQUE 索引名(字段名);除null之外的索引值必须是唯一的
添加全文索引:ALTER TABLE 表名 ADD FULLTEXT 索引名(字段名1...);指定索引为全文索引
删除索引: ALTER TABLE 表名 DROP INDEX 索引名;
添加外键约束:ALTER TABLE 表名 ADD FOREIGN KEY 外键别名(外键字段名) REFERENCES 外表表名(外表主键字段名) ; (外键别名可有可无,有外键的为子表,给一张表添加外键,即给子表的外键添加父表的主键规则,外键必须是另一张表的主键)
ALTER TABLE 表名 ADD CONSTRAINT 外键别名 FOREIGN KEY (外键字段名) REFERENCES 外表表名(外键主键字段名);(外键涉及问题在最后进行补充)
删除外键约束: ALTER TABLE 表名 DROP FOREIGN KEY 外键字段名/外键别名;
索引相关语句 INDEX
索引的建立对于提高MySQL语句的运行效率有很大影响,好的可以大大提高SQL语句的检索速率,一张表可以有多个索引,但索引会占用磁盘空间的索引文件,同事也会减低表 的 update,insert,delete 操作,因为在做这些操作是MySQL不仅要根据索引保存数据,还要保存索引文件。
查看索引信息: SHOW INDEX FROM 表名;
索引的创建
普通索引:【】为可选标识,当不指定索引名时,默认为字段名
CREATE INDEX 索引名 ON 表名(字段名【(长度)】);
如果是char varchar 类型,长度可以小于字段实际长度(不指定则默认为创建长度);如果是BLOB和TEXT类型,必须指定长度
ALTER TABLE 表名 ADD INDEX 索引名(字段名列表);
或是建表时直接指定:create table 表名(
column type other,...
index 【索引名】(字段名【(长度)】)
.....
);
唯一索引: CREATE UNIQUE INDEX 索引名 ON 表名(字段名【(长度)】);
ALTER TABLE 表名 ADD UNIQUE 【索引名】(字段名【(长度)】);
或: CREATE TABLE 表名(
username varchar(20) NOT NULL...,
....
UNIQUE 【索引名】(字段名【(长度)】)
);
主键索引:建表时指定
ALTER TABLE 表名 ADD PRIMARY KEY (字段名1【,字段名2...】);
全文索引:
ALTER TBALE 表名 ADD FULLTEXT 【索引名】(字段名列表);用于全文索引
示例:为student表中的name加普通索引
create index name on student(name);
或 alter table student add index name(name);/alter table student add index (name);
删除索引
命令:DROP INDEX 【索引名】ON 表名;当不指定索引名时,删除表中所有索引
ALTER TABLE 表名 DROP INDEX 索引名;
删除主键索引也可以使用:ALTER TABLE 表名 DROP PRIMARY KEY; 删除其他索引时必须指定索引名
示例:删除student表中的索引名为name的索引
drop index name on student;/alter table student drop name;
数据操纵语言DML(Database Munipulation Language)
数据操纵语言:主要是对表数据的操作,分为 INSERT,UPDATE,DELETE三种指令,分别代表插入,更新与删除。
以下示例都以 user表为准,有 id,name,age 三个字段
插入语句 INSERT
语法:
方式一:INSERT INTO 表名(列名1,列名2.....) values(值1,值2.....)【,(值1,值2,....)....】;
插入的值的类型要与列类型一致或兼容,列插入的顺序可以调换,插入的列的个数必须要值的个数一致,当插入列名和表中列名一致可以省略,默认是所有列,此时插入的值的顺序必须和表中列的顺序一致:insert into 表 values(..);,当列值为空时,可以用NULL 填充
方式二: INSERT INTO 表名 SET 列1 = 值1,列2 = 值2 ........;
不常用,不支持插入多条数据,不支持子查询
比较:
方式一支持多条数据的插入,方式二不支持
insert into user(id,name,age)
values(1,'lia',18),
(2,'john',20)...;
insert into user set id = 1,name = 'mary',age = 12;
方式一支持子查询方式插入数据,方式二不支持
insert into user (id,name,age) select 3,'name',13;/ select id,name,age from 指定表 where 条件;
修改语句 UPDATE
语法: update 表名 【,表2....】set 列名= 新值,列名= 新值.....【where 筛选条件】;
不指定where条件则对全表数据进行更新
可以同时更新一个或多个字段,不同字段之间用,号隔开
可以通过指定多个表,修改多个表中的字段
示例:修改user表中ID为1的用户的用户名为张三,年龄为20
update user set name = '张三',age = 20 where id = 1;
删除语句 DELETE
语法:DELETE FROM 表名 【WHERE 筛选条件】;
如果没有指定WHERE字句,将删除表中所有的记录
可以在WHERE字句中指定任何条件进行过滤
ps: delete drop truncate 都有删除表的作用:delete和truncate只删除表中的数据,drop是将表结构和表数据全部删除,drop和truncate操作不能回滚,delete可以回滚,delete可以对删除记录进行过滤,truncate对全表数据进行删除,若删除的数据主键是自增的,delete删除后在插入数据,自增长列从断点开始计数,truncate从1开始,在执行速度上drop>truncate>delete
示例:删除user表中ID为3的记录
delete from user where id = 3;
数据查询语言 DQL (Database Query Language)
语法:SELECT 列1,列2.....
FROM 表1【,表2...】
【WHERE 条件】
【GROUP BY 分组字段】
【HAVING 条件】
【ORDER BY 排序字段】
【LIMIT n OFFSET m】
SELECT : 后跟要查询的字段,查询全部字段可以用 * ,
FROM : 后跟查询的表,可以指定一个或多个表,表之间用,号隔开,或用连接关键字 INNER JOIN | LEFT JOIN | RIGHT JSON
INNER JOIN:内连接或等值连接,连接的两张表都为主表,当连接字段在两表中都匹配时,才输出记录行,否则不输出
LEFT JOIN : 左连接,即左表为主表,获取左表中所有记录,右边符合连接条件的才会显示
RIGHT JOIN : 右连接,即右表为主表,获取右表所有记录,左表符合连接条件才显示
WHERE : 可以在WHERE字句中一个或多个条件,条件之间用and或or连接,也可用于update 或delete命令中
GROUP BY : 用于分组
HAVING : 对分组数据进行过滤
ORDER BY : 对查询出的记录进行排序,可以指定多个字段,字段间用,号隔开,可以指定ASC 升序或DESC 降序排列,默认升序
LIMIT n OFFSET m : 分页显示,显示第m页一页显示 n条记录 简写:LIMIT m,n
执行顺序: FROM -> WHERE -> GROUP BY -> HAVING ->ORDER BY -> LIMIT -> SELECT
HAVING 语句跟在 GROUP BY 语句之后,HAVING 语句作用与分组后的记录,用于筛选满足条件的组
HAVING 和 WHERE:两者作用地方不同,where作用于表或试图,是表和试图的查询条件,HAVING 作用于分组后的记录。
示例:查询student表中班级人数大于等于30的班级的按照班级升序排列的前十个班级
select id,name,class from student group by class having count(*)>=30 order by class asc limit 10 offset 1;
WHERE 字句 常用操作符
常用操作符:
= : 等号,判断=两侧值是否相等,相等返回true
!=,<> : 不等号,判断左右两侧值是否相等,不等返回true
> : 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true
< : 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true
>= : 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true
<= : 小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true
between 值1 and 值2 : 字段值介于 值1 和值2 之间,相当于 max>=x>=min
not between 值1 and 值2 : 不在两值之间
like : 用于模糊查询,通常与通配符一同使用,不使用通配符时则与 = 号作用相同
% : 表示0或多个字符,可匹配任意类型和长度的字符
_ : 表示任意单个字符,匹配单个任意字符
[] : 表示括号内所列字符中的一个(类似正则表达式),指定一个字符,字符串或范围,匹配对象为它们中的任意一个
[^] : 表示不在括号所列之内的字符,取值和[]相同,但匹配对象为指定字符为的任一字符
ps:当查询内容包含通配符是,会导致查询特殊字符 %,_ ,[ 的语法无法正常实现,可以将特殊字符用[]括起来则可正常查询
in : 查询字段值在指定列表中的记录: where 字段 in (值1,.....);
not in : 查询字段值不在指定列表中的记录 : where 字段 not in (值1,....);
is null : 查询列值是NULL 的记录,当列值为 NULL 返回true
is not null : 查询列值不为 NULL 的记录,当列值不为NULL 返回true
ps: NULL值的判断不能使用 =NULL 或 !=NULL 来比较,在MySQL中NULL值与其它任何值比较(即使是NULL)永远返回false,即 NULL = NULL 返回false
<=> : 比较两个NULL 值是否相等,相等返回true,否则返回false
regexp 或 rlike : 正则表达式匹配
^ : 匹配字符串开始的位置
$ : 匹配字符串结束的位置
. : 匹配除了 \n 之外的任何单个字符,如要匹配\n在内的任意字符,使用[.\n]
[.....] : 字符集合,匹配所包含的任意一个字符 如: [abc] 可以匹配 plan 中的 a
[^.....] : 不匹配字符集合,匹配任意未包含在内的字符 如:[^abc]可以匹配plan中的p
* : 匹配前面的子表达式0次或多次 如 zo* 能匹配 z 或 zoo
+ : 匹配前面的子表达式一次或多次 如 zo+ 能匹配 zo 及 zoo,但不能匹配 z
{n} : n为非负整数,匹配确定的n次,如 o{2} 能匹配 food 但不能匹配 bob
{n,m} : m和 n 均为非负整数,其中 n<=m ,最少匹配n次且最多匹配m次
示例:查询student表中id值为1,2,4的记录中姓名name姓张的年龄在12到16之间的学生
select id,name,age,class from student
where id in (1,2,4) and name like '张%' and age between 12 and 16;
示例:使用正则表达式,查询name 中以 w开头名字或含有两个a或以 t结尾的同学
select id,name,age from student
where name REGEXP '^w|a{2}|t$';
UNION操作符
UNION 操作符用于连接两个以上的select语句,将查询结果组合到一个结果集中。
语法:
select 列1,列2.....列n
from tables
【where 条件】
UNION 【ALL | DISTINCT】
select 列1,列2.....列n
from tables
【where 条件】
...
列1,列2.. 列n : 要查询的列
tables: 要查询的表
where 条件:查询是的过滤条件,可选
UNION : 用于将不同表中相同列查询的数据展示出来,后可跟 ALL 或DISTINCT ,ALL :将不同表中相同列查询的数据全部展示出来,包含重复数据,DISTINCT将不同表中相同列查询的结果展示出来,不包括重复数据,UNION默认删除重复数据
示例:现有user表和student表,两张表都有name字段,使用union连接符,查询两张表中不重复的所有name值
user.name: join,tom,jerry,hary,lisa
student.name: tom,john,lisa,monkey
select name from user
union
select name from studen;
结果:join,tom,jerry,hary,lisa,john,monkey
MySQL 事务控制
什么是事务:事务就是一组不可分割的SQL语句集合,这组SQL语句要么全部执行,要么全部不执行;
事务用来管理DML(insert,update,delete)操作,用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
事务的四大特征:ACID
A: Atomicity 原子性 或称不可分割性,一个事物中的所有操作,要么全 部完成,要么全部不完成,不会结束在中间的某条语句,事务在执行过程中发生错误则回滚所有执行过的操作,回到事务开始之前的状态,就像从没执行过一样
C: Consistency 一致性,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作
I: Isolation 隔离性,数据库允许多个并发事务同事对其数据进行读写和修改操作,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致
D: Durability 持久性,事务处理结束后,事务执行成功将缓存区的操作结果提交到数据库,写到磁盘,事务执行失败则回滚
事务控制语句
默认情况下,MySQL中事务的自动提交是默认开启的,任何一条DML语句(insert,update,delete)执行,就表示开启了事务并提交了事务
开启事务: BEGIN | START TRANSACTION
显式开启事务
提交事务: COMMIT | COMMIT WORK (两者等价)
COMMIT会提交事务,将对数据库进行的所有修改进行持久化
回滚事务: ROLLBACK | ROLLBACK WORK (两者等价)
ROLLBACK回滚事务,并撤销此事务下所有正在进行的未提交的的操作
创建保存点: SAVEPOINT 保存点名称
SAVEPOINT 可以在十五中创建一个保存点,一个事物中可以有多个保存点,在回滚时可以指定会滚到某一保存点,保存点在事务处理完成后(rollback或commit)后会自动释放
删除保存点: RELEASE SAVEPOINT 保存点名称
当删除的保存点名称不存在时会抛出异常
回滚到某一保存点: ROLLBACK TO 保存点
把事务回滚到保存点
设置事务的隔离级别: SET TRANSACTION ISOLATION LEVEL 隔离级别
用来设置事务的隔离级别,InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
设置事务提交模式: SET AUTOCOMMIT = 0|1
0:禁止自动提交 1: 开启自动提交 (mysql默认自动提交)
未完待续…
内容总结
以上是互联网集市为您收集整理的MySQL基础总结全部内容,希望文章能够帮你解决MySQL基础总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。