MySQL,ODBC 数据库事务
多事务同时执行:彼此之间互不影响的方式进行并行;事务之间交互,通过数据集。
START TRANSACTION; 启动事务命令 数据库只有启动了事务才允许回滚撤销等操作。
且数据的engine引擎必须是innodb,才支持事务
ROLLBACK 回滚事务,mysql只要没有提交开启了事务都可以进行回滚操作。
COMMIT:事务提交,事务提交后无法进行回滚操作。
如果没有明确启动事务: autocommit能实现自动提交,每一个操作都直接提交;
所以建议:明确使用事务,否则所有操作都被当成一个事务来处理,并关闭自动提交。
否则会浪费mysql很多IO操作,每写一条语句都执行提交至持久性存储,很浪费资源
事务的特性:
Atomicity:原子性,事务所引起的数据库操作,要不都完成,要么都不执行;
Consistency: 一致性,
Isolation:隔离性
事务调度:事务之间影响最小
MVCC:多版本并发控制
Durability:持久性 ,一旦事务成功完成,系统必须保证任何故障都不会引起事务表示出不一致性;
1、事务提交之前就已经写出数据至持久性存储;
2、结合事务日志完成;
事务日志:顺序IO
数据文件:随机IO
事务的状态: 活动的:active
部分提交的:最后一条语句执行后
失败的:
终止的:
提交的:
及状态间的转换过程:
事务并发执行的优势:1、提高吞吐量和资源利用率 2、减少等待时间
事务调度:1、可恢复调度 2、无极联调度
实例:
mysql> SELECT @@AUTOCOMMIT; #查询自动提交的状态1为开启,0为关闭;
+--------------+
| @@AUTOCOMMIT |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)
mysql> SET AUTOCOMMIT=0; #设定自动提交关闭
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @@AUTOCOMMIT; #查询自动提交的状态1为开启,0为关闭;
+--------------+
| @@AUTOCOMMIT |
+--------------+
| 0 |
+--------------+
1 row in set (0.00 sec)
mysql> DELETE FROM student WHERE Name LIKE ‘Li%‘; #删除Name字段包含Li的行
Query OK, 1 row affected (0.03 sec)
mysql> SELECT * FROM student; #Li哪行已经被删除
+-----+------------+-----+-----+
| SID | Name | Age | CID |
+-----+------------+-----+-----+
| 2 | Cheng Long | 0 | 2 |
| 3 | Yang Guo | 0 | 3 |
| 4 | Guo Jing | 0 | 4 |
+-----+------------+-----+-----+
3 rows in set (0.00 sec)
mysql> ROLLBACK; #回滚事务,自动提交关闭后,默认就开启了事务,可以实现回滚等操作
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT * FROM student; #删除的哪行恢复了
+-----+------------+-----+-----+
| SID | Name | Age | CID |
+-----+------------+-----+-----+
| 1 | Li Lianjie | 0 | 1 |
| 2 | Cheng Long | 0 | 2 |
| 3 | Yang Guo | 0 | 3 |
| 4 | Guo Jing | 0 | 4 |
+-----+------------+-----+-----+
4 rows in set (0.00 sec)
保存点:恢复到所定义的那个保存点SAVEPOINT,保存点名称不能为数字。
保存点:SAVEPOINT savepoint_name; 保存以上操作为该保存点名称
回滚保存点:ROLLBACK TO savepoint_name; 回滚到该保存点之前的状态
Usage:
mysql> START TRANSACTION; #启动事务
Query OK, 0 rows affected (0.00 sec)
mysql> select * FROM student;
+-----+------------+-----+-----+
| SID | Name | Age | CID |
+-----+------------+-----+-----+
| 1 | Li Lianjie | 0 | 1 |
| 2 | Cheng Long | 0 | 2 |
| 3 | Yang Guo | 26 | 3 |
| 4 | Guo Jing | 53 | 4 |
+-----+------------+-----+-----+
4 rows in set (0.00 sec)
mysql> SAVEPOINT a; #该保存点student表数据都存在
Query OK, 0 rows affected (0.00 sec)
mysql> select * FROM student;
+-----+------------+-----+-----+
| SID | Name | Age | CID |
+-----+------------+-----+-----+
| 1 | Li Lianjie | 0 | 1 |
| 2 | Cheng Long | 0 | 2 |
| 3 | Yang Guo | 26 | 3 |
| 4 | Guo Jing | 53 | 4 |
+-----+------------+-----+-----+
4 rows in set (0.00 sec)
mysql> DELETE FROM student WHERE SID=4; #删除student表的SID为4的行
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM student;
+-----+------------+-----+-----+
| SID | Name | Age | CID |
+-----+------------+-----+-----+
| 1 | Li Lianjie | 0 | 1 |
| 2 | Cheng Long | 0 | 2 |
| 3 | Yang Guo | 26 | 3 |
+-----+------------+-----+-----+
3 rows in set (0.00 sec)
mysql> SAVEPOINT b; #该保存点student表数据的SID为4的行不存在了
Query OK, 0 rows affected (0.00 sec)
mysql> DELETE FROM student WHERE SID=3;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM student;
+-----+------------+-----+-----+
| SID | Name | Age | CID |
+-----+------------+-----+-----+
| 1 | Li Lianjie | 0 | 1 |
| 2 | Cheng Long | 0 | 2 |
+-----+------------+-----+-----+
2 rows in set (0.00 sec)
mysql> SAVEPOINT c; #该保存点student表的SID为3和4的行都不存在
Query OK, 0 rows affected (0.00 sec)
mysql> ROLLBACK TO b; #回滚至保存点b,即student表,SID为4的行不存在的行
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM student;
+-----+------------+-----+-----+
| SID | Name | Age | CID |
+-----+------------+-----+-----+
| 1 | Li Lianjie | 0 | 1 |
| 2 | Cheng Long | 0 | 2 |
| 3 | Yang Guo | 26 | 3 |
+-----+------------+-----+-----+
3 rows in set (0.00 sec)
mysql> ROLLBACK TO a;#即所有数据都存在的那个点
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM student;
+-----+------------+-----+-----+
| SID | Name | Age | CID |
+-----+------------+-----+-----+
| 1 | Li Lianjie | 0 | 1 |
| 2 | Cheng Long | 0 | 2 |
| 3 | Yang Guo | 26 | 3 |
| 4 | Guo Jing | 53 | 4 |
+-----+------------+-----+-----+
4 rows in set (0.00 sec)
本文出自 “学linux历程” 博客,请务必保留此出处http://woyaoxuelinux.blog.51cto.com/5663865/1924030
Linux命令:MySQL系列之八--MySQL事务相关内容
标签:start transaction savepoint rollback to
小编还为您整理了以下内容,可能对您也有帮助:
Mysql中的事务是什么如何使用
什么是事务?
事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务
注意:mysql数据支持事务,但是要求必须是innoDB存储引擎
解决这个问题:
mysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全
如何使用:
(1)在执行sql语句之前,我们要开启事务 start transaction;
(2)正常执行我们的sql语句
(3)当sql语句执行完毕,存在两种情况:
1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ
2,某些sql语句失败,我们执行rollback(回滚),将对数据库操作赶紧撤销
(注意:mysql数据支持事务,但是要求必须是innoDB存储引擎)
mysql> create table bank(name varchar(20),money decimal(5,1))engine=innodb defau
lt charset=utf8;
mysql> inset into bank values('shaotuo',1000),('laohu',5000);
mysql> select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1000.0 |
| laohu | 5000.0 |
+---------+--------+
------没有成功“回滚”执行rollback
mysql> start transaction; //开启事务
Query OK, 0 rows affected (0.00 sec)
mysql> update bank set money=money+500 where name='shaotuo';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update bank set moey=money-500 where name='laohu';
ERROR 1054 (42S22): Unknown column 'moey' in 'field list'
mysql> rollback; //只要有一个不成功,执行rollback操作
Query OK, 0 rows affected (0.01 sec)
mysql> select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1000.0 |
| laohu | 5000.0 |
+---------+--------+
------成功之后 进行commit操作
mysql> start transaction; //开启事务
Query OK, 0 rows affected (0.00 sec)
mysql> update bank set money=money+500 where name='shaotuo';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update bank set money=money-500 where name='laohu';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> commit; //两个都成功后执行commit(只要不执行commit,sql语句不会对真实的数据库造成影响)
Query OK, 0 rows affected (0.05 sec)
mysql> select*from bank;
+---------+--------+
| name | money |
+---------+--------+
| shaotuo | 1500.0 |
| laohu | 4500.0 |
+---------+--------+您可能感兴趣的文章:MySQL存储过程例子(包含事务,输出参数,嵌套调用)MySql的事务使用与示例详解mysql实现事务的提交和回滚实例mysql 锁表锁行语句分享(MySQL事务处理)通过唯一索引S锁与X锁来了解MySQL死锁套路MySQL死锁套路之唯一索引下批量插入顺序不一致由不同的索引更新解决MySQL死锁套路当Mysql行锁遇到复合主键与多列索引详解MySql 知识点之事务、索引、锁原理与用法解析一文详解-MySQL 事务和锁
当多个用户访问同一份数据时,一个用户在更改数据的过程中,可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态变为另外一个一致性状态,使用事务处理是非常必要的,事务具有以下四个特性:
MySQL 提供了多种事务型存储引擎,如 InnoDB 和 BDB 等,而 MyISAM 不支持事务。为了支持事务,InnoDB 存储引擎引入了与事务处理相关的 REDO 日志和 UNDO 日志,同时事务依赖于 MySQL 提供的锁机制
事务执行时需要将执行的事务日志写入日志文件,对应的文件为 REDO 日志。当每条 SQL 进行数据更新操作时,首先将 REDO 日志写进日志缓冲区。当客户端执行 COMMIT 命令提交时,日志缓冲区的内容将被刷新到磁盘,日志缓冲区的刷新方式或者时间间隔可以通过参数 innodb_flush_log_at_trx_commit 控制
REDO 日志对应磁盘上的 ib_logifleN 文件,该文件默认为 5MB,建议设置为 512MB,以便容纳较大的事务。MySQL 崩溃恢复时会重新执行 REDO 日志的记录,恢复最新数据,保证已提交事务的持久性
与 REDO 日志相反,UNDO 日志主要用于事务异常时的数据回滚,具体内容就是记录数据被修改前的信息到 UNDO 缓冲区,然后在合适的时间将内容刷新到磁盘
假如由于系统错误或者 rollback 操作而导致事务回滚,可以根据 undo 日志回滚到没修改前的状态,保证未提交事务的原子性
与 REDO 日志不同的是,磁盘上不存在单独的 UNDO 日志文件,所有的 UNDO 日志均存在表空间对应的 .ibd 数据文件中,即使 MySQL 服务启动了表空间
在 MySQL 中,可以使用 BEGIN 开始事务,使用 COMMIT 结束事务,中间可以使用 ROLLBACK 回滚事务。MySQL 通过 SET AUTOCOMMIT、START TRANSACTION、COMMIT 和 ROLLBACK 等语句支持本地事务
MySQL 定义了四种隔离级别,指定事务中哪些数据改变其他事务可见、哪些数据该表其他事务不可见。低级别的隔离级别可以支持更高的并发处理,同时占用的系统资源更少
InnoDB 系统级事务隔离级别可以使用以下语句设置:
查看系统级事务隔离级别:
InnoDB 会话级事务隔离级别可以使用以下语句设置:
查看会话级事务隔离级别:
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据称为脏读(Dirty Read),即是:首先开启 A 和 B 两个事务,在 B 事务更新但未提交之前,A 事务读取到了更新后的数据,但由于 B 事务回滚,导致 A 事务出现了脏读现象
所有事务只能看见已经提交事务所做的改变,此级别可以解决脏读,但也会导致不可重复读(Nonrepeatable Read):首先开启 A 和 B 两个事务,A事务读取了 B 事务的数据,在 B 事务更新并提交后,A 事务又读取到了更新后的数据,此时就出现了同一 A 事务中的查询出现了不同的查询结果
MySQL 默认的事务隔离级别,能确保同一事务的多个实例在并发读取数据时看到同样的数据行,理论上会导致一个问题,幻读(Phontom Read)。例如,第一个事务对一个表中的数据做了修改,这种修改会涉及表中的全部数据行,同时第二个事务也修改这个表中的数据,这次的修改是向表中插入一行新数据,此时就会发生操作第一个事务的用户发现表中还有没有修改的数据行
InnoDB 通过多版本并发控制机制(MVCC)解决了该问题:InnoDB 通过为每个数据行增加两个隐含值的方式来实现,这两个隐含值记录了行的创建时间、过期时间以及每一行存储时间发生时的系统版本号,每个查询根据事务的版本号来查询结果
通过强制事务排序,使其不可能相互冲突,从而解决幻读问题。简而言之,就是在每个读的数据行上加上共享锁实现,这个级别会导致大量的超时现象和锁竞争,一般不推荐使用
为了解决数据库并发控制问题,如走到同一时刻客户端对同一张表做更新或者查询操作,需要对并发操作进行控制,因此产生了锁
共享锁的粒度是行或者元组(多个行),一个事务获取了共享锁以后,可以对锁定范围内的数据执行读操作
排他锁的粒度与共享锁相同,一个事务获取排他锁以后,可以对锁定范围内的数据执行写操作
有两个事务 A 和 B,如果事务 A 获取了一个元组的共享锁,事务 B 还可以立即获取这个元组的共享锁,但不能获取这个元组的排他锁,必须等到事务 A 释放共享锁之后。如果事务 A 获取了一个元组的排他锁,事务 B 不能立即获取这个元组的共享锁,也不能立即获取这个元组的排他锁,必须等到 A 释放排他锁之后
意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁和意向排他锁。意向共享锁表示一个事务有意对数据上共享锁或者排他锁。有意表示事务想执行操作但还没真正执行
锁的粒度主要分为表锁和行锁
表锁的开销最小,同时允许的并发量也是最小。MyISAM 存储引擎使用该锁机制。当要写入数据时,整个表记录被锁,此时其他读/写动作一律等待。一些特定的动作,如 ALTER TABLE 执行时使用的也是表锁
行锁可以支持最大的并发,InnoDB 存储引擎使用该锁机制。如果要支持并发读/写,建议采用 InnoDB 存储引擎
linux 中的MYSQL命令汇总 适合学习linux下配置mysql的朋友
一、总结一下:
1.linux下启动mysql的命令:
mysqladmin start
/ect/init.d/mysql start (前面为mysql的安装路径)
2.linux下重启mysql的命令:
mysqladmin restart
/ect/init.d/mysql restart (前面为mysql的安装路径)
3.linux下关闭mysql的命令:
mysqladmin shutdown
/ect/init.d/mysql shutdown (前面为mysql的安装路径)
4.连接本机上的mysql:
进入目录mysql/bin,再键入命令mysql -uroot -p, 回车后提示输入密码。
退出mysql命令:exit(回车)
5.修改mysql密码:
mysqladmin -u用户名 -p旧密码 password 新密码
或进入mysql命令行SET PASSWORD FOR root=PASSWORD("root");
6.增加新用户。(注意:mysql环境中的命令后面都带一个分号作为命令结束符)
grant select on 数据库.* to 用户名@登录主机 identified by "密码"
如增加一个用户test密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
grant select,insert,update,delete on *.* to " Identified by "123";
二、有关mysql数据库方面的操作
必须首先登录到mysql中,有关操作都是在mysql的提示符下进行,而且每个命令以分号结束
1、显示数据库列表。
show databases;
2、显示库中的数据表:
use mysql; //打开库
show tables;
3、显示数据表的结构:
describe 表名;
4、建库:
create database 库名;
5、建表:
use 库名;
create table 表名(字段设定列表);
6、删库和删表:
drop database 库名;
drop table 表名;
7、将表中记录清空:
delete from 表名;
8、显示表中的记录:
select * from 表名;
9、编码的修改
如果要改变整个mysql的编码格式:
启动mysql的时候,mysqld_safe命令行加入
--default-character-set=gbk
如果要改变某个库的编码格式:在mysql提示符后输入命令
alter database db_name default character set gbk;
三、数据的导入导出
1、文本数据转到数据库中
文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替。例:
1 name ty 2006-11-23
数据传入命令 load data local infile "文件名" into table 表名;
2、导出数据库和表
mysqlmp --opt news news.sql(将数据库news中的所有表备份到news.sql文件,news.sql是一个文本文件,文件名任取。)
mysqlmp --opt news author article author.article.sql(将数据库news中的author表和article表备份到author.article.sql文件, author.article.sql是一个文本文件,文件名任取。)
mysqlmp --databases db1 db2 news.sql(将数据库dbl和db2备份到news.sql文件,news.sql是一个文本文件,文件名任取。)
mysqlmp -h host -u user -p pass --databases dbname file.mp
就是把host上的以名字user,口令pass的数据库dbname导入到文件file.mp中
mysqlmp --all-databases all-databases.sql(将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,文件名任取。)
3、导入数据
mysql all-databases.sql(导入数据库)
mysqlsource news.sql;(在mysql命令下执行,可导入表)
一、连接MySQL
格式: mysql -h主机地址 -u用户名 -p用户密码
1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql。
2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123
(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)。
二、修改密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令:
mysqladmin -uroot -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、例2:再将root的密码改为djg345。
mysqladmin -uroot -pab12 password djg345
三、增加新用户。(注意:和上面不同,下面的因为是MySQL环境中的命令,所以后面都带一个分号作为命令结束符)
格式:grant select on 数据库.* to 用户名@登录主机 identified by /"密码/"
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:
grant select,insert,update,
delete on *.* to test1@/"%/" Identified by /"abc/";
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的MySQL数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MySQL主机上的web页来访问。
grant select,insert,update,
delete on mydb.* to test2@localhost identified by /"abc/";
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb
.* to test2@localhost identified by /"/";
在上面讲了登录、增加用户、密码更改等问题。下面我们来看看MySQL中有关数据库方面的操作。注意:你必须首先登录到MySQL中,以下操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。
一、操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就完成。
2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MySQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。
二、显示命令
1、显示数据库列表:
show databases;
刚开始时才两个数据库:mysql和test。MySQL库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2、显示库中的数据表:
use mysql; //打开库,学过FOXBASE的一定不会陌生吧
show tables;
3、显示数据表的结构:
describe 表名;
4、建库:
create database 库名;
5、建表:
use 库名;
create table 表名 (字段设定列表);
6、删库和删表:
drop database 库名;
drop table 表名;
7、将表中记录清空:
delete from 表名;
8、显示表中的记录:
select * from 表名;
三、一个建库和建表以及插入数据的实例
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ’深圳’,
year date
); //建表结束
//以下为插入字段
insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’);
insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’);
注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。(4)将YEAR设为日期字段。
如果你在MySQL提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c://下,并在DOS状态进入目录//mysql//bin,然后键入以下命令:
mysql -uroot -p密码 c://school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。
四、将文本数据转到数据库中
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用//n来代替。
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
2、数据传入命令 load data local infile /"文件名/" into table 表名。
注意:你最好将文件复制到//mysql//bin目录下,并且要先用use命令打表所在的库。
五、备份数据库:
1、mysqlmp --opt schoolschool.bbb
mysqlmp --opt schoolschool.bbb
(命令在DOS的//mysql//bin目录下执行)
注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
后记:其实MySQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的MYSQL教程还是“晏子“译的“MYSQL中文参考手册“不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象/"PHP4中文手册/"那样是chm的格式,在查找函数命令的时候不太方便。
2、修改登录密码
1) mysqladmin -u用户名 -p旧密码 password 新密码:
例:mysqladmin -u root password 21century
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2)直接修改user表的root用户口令:
mysql user mysql;
mysql update user set pasword=password('21century') where user='root';
mysql flush privileges;
注:flush privileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令。
3、测试密码是否修改成功:
1)不用密码登录:
[root@test1 local]# mysql
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
显示错误,说明密码已经修改。
2)用修改后的密码登录:
[root@test1 local]# mysql -u root -p
Enter password: (输入修改后的密码21century)
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 177 to server version: 3.23.48
Type 'help;' or '/h' for help. Type '/c' to clear the buffer.
mysql
成功!
这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。
4、启动和停止:
启动:Mysql从3.23.15版本开始作了改动,默认安装后服务要用MySQL用户来启动,不允许root用户启动。
如果非要用root用户来启动,必须加上--user=root参数(./safe_mysqld --user=root )停止:mysqladmin -u root -p shutdown。
5、导出meeting数据库:
mysqlmp -uroot -p21century meeting db_meeting.sql
导人dbname数据库:
mysqlmp -uroot -p21century dbname xxx.sql
导入数据库还可用类似于oracle中@my_script.sql的方式一次执行大量sql语句,这在使用mysqlmp不起作用时非常有用。
例:#./mysql -uroot -p /home/xuys/db_meeting_2003.sql
(注:create database、use databasename、create table和insert into语句都可写在上面的脚步文件中)
6、给表改名:
RENAME TABLE ztemp TO ztemp4;
7、修改字段属性:
ALTER TABLE bbabase CHANGE news_id id VARCHAR(5) NOT NULL;
8、在表中的content后增加一字段:
ALTER TABLE bbabase ADD leave_time DATETIME NOT NULL AFTER
MySql之commit、rollback等事务控制命令
MYSQL 事务处理主要有两种方法
1、用 begin, rollback, commit 来实现
begin 或/ start transaction )开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
1.不管 autocommit 是1还是0
start transaction 后,只有当 commit 数据才会生效, rollback 后就会回滚。
2、当 autocommit 为 0 时
不管有没有 start transaction .
只有当 commit 数据才会生效, rollback 后就会回滚。
3、如果 autocommit 为1 ,并且没有 start transaction .
调用 rollback 是没有用的。因为事务已经自动提交了。
事务测试1
事务测试2
flag 相当一定义这个保存点的名字
savepoint flag : savepoint 允许在事务中创建一个保存点,一个事务中可以有多个savepoint ;
release savepoint flag :删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
rollback to flag :把事务回滚到标记点;
set transaction :用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有
READ UNCOMMITTED 、 READ COMMITTED 、 REPEATABLE READ 和 SERIALIZABLE
select @@transaction_isolation;
SELECT @@SESSION.transaction_isolation, @@SESSION.transaction_read_only;