首页 理论教育 Java服务端研发操作初步入门

Java服务端研发操作初步入门

时间:2023-11-22 理论教育 版权反馈
【摘要】:例如:'user01'@'192.168.3.%',表示user01这个用户只能在192.168.3的IP段登录。即删除id为107的商品,然后执行ROLLBACK,查看数据是否回滚。此时执行ROLLBACK命令,回退START TRANSACTION之后的所有语句,最后一条SELECT语句显示id为107的商品记录被恢复了。为进行明确的提交,需要使用COMMIT语句。最后的COMMIT语句仅在不出错时生效。如果第一条DELETE语句起作用,但第二条失败,则第一条DELETE语句会被自动撤销。

Java服务端研发操作初步入门

数据控制语言(DCL)用来授予或回收访问数据库的某种特权,可以限制用户访问哪些库、哪些表;限制用户对哪些表执行SELECT、CREATE、DELETE、UPDATE、ALTER等操作;限制用户登录的IP或域名;限制用户自己的权限是否可以授权给别的用户。

(1)GRANT:授权。

MySQL赋予用户权限命令的简单格式:

grant权限on数据库对象to用户

例如授权用户user01在数据库(javadevmap)中表product的所有权限,并指定user01的登录密码为123456。具体如下:

grant all privileges on javadevmap.product to 'user01'@'%' identified by '123456' with grant option;

上述命令具体含义如下:

■all privileges:表示将所有权限授予用户;也可指定具体的权限,例如SELECT、CREATE、DROP等。

■on:表示这些权限对哪些数据库和表生效。格式:数据库名.表名,如果写“*”表示所有数据库、所有表。例子中指定为javadevmap数据库的product表。

■to:将权限授予哪个用户。格式:'用户名'@'登录IP或者域名'。%表示没有限制,在任何主机都可以登录。例如:'user01'@'192.168.3.%',表示user01这个用户只能在192.168.3的IP段登录。

■identified by:指定用户的登录密码。

■with grant option:表示允许用户将自己的权限授权给其他用户。

对用户进行权限变更之后,需重新加载权限,将权限信息从内存中写入数据库。具体操作命令:

flush privileges;

查看当前用户权限:

show grants;

回收权限:删除user01这个用户的create权限,该用户将不能创建数据库和表。

revoke create on*.*from user01@%;

flush privileges;(www.xing528.com)

(2)回滚:ROLLBACK

ROLLBACK[WORK]TO[SAVEPOINT]:回退到某一点。回滚命令使数据库状态回到上次最后提交的状态。

MySQL默认是打开了自动提交的,关闭自动提交有以下方法:

■Session级别:使用START TRANSACTION或者BEGIN来开始一个事务,使用ROLLBACK/COMMIT来结束一个事务;或使用SET autocommit=0关闭当前session的自动提交,每次提交需要手动COMMIT。

■全局级别:SET GLOBAL autocommit=0关闭全局的自动提交。

用商品表来演示ROLLBACK的使用。即删除id为107的商品,然后执行ROLLBACK,查看数据是否回滚。具体操作命令如下:

978-7-111-61011-3-Part03-4.jpg

操作结果如图10-1所示。

978-7-111-61011-3-Part03-5.jpg

图10-1 事务命令结果

ROLLBACK只能在一个事务处理内使用(在执行一条START TRANSACTION命令之后)。分析上面的例子,从查询product表开始,首先执行一条SELECT语句查看表中数据。然后开始一个事务处理,用一条DELETE语句删除id为107的商品数据。接下来执行SELECT语句验证id为107的记录被删除。此时执行ROLLBACK命令,回退START TRANSACTION之后的所有语句,最后一条SELECT语句显示id为107的商品记录被恢复了。

(3)提交:COMMIT

MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交操作是自动进行的。但是,在事务处理块中,提交不会隐含地进行。为进行明确的提交,需要使用COMMIT语句。这里用商品表和用户举例,实现删除id为1的用户表记录和商品id为107的商品表记录;如下所示:

start transaction;

delete from user where id=1;

delete from product where id=107;

commit;

上面例子涉及删除用户表user和商品表product中的数据,所以使用事务处理块来保证业务不被部分删除(一方删除成功,一方未删除成功)。最后的COMMIT语句仅在不出错时生效。如果第一条DELETE语句起作用,但第二条失败,则第一条DELETE语句会被自动撤销。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈