MySQL中的主键问题和赋权限问题

Mysql的两种主键

Primary key 和not null auto_incriment

在建立mysql表时,给一个字段添加了主键primary key在insert数据时可以不用insert主键,mysql会自动添加0,但是在第二次insert时没有填写值mysql数据库还是默认添加0,会导致有重复的主键,这是不可以的。所有在定义了primary key时,在insert数据时要给主键填写值。

在建立mysql表时,给一个字段添加了主键not null auto_increment=1;

这也是一个主键。是自增长的以1为开始。这个字段是可以不用填写值的,mysql数据库会自动给填写值,不会出现primary key的状况。

ALTERTABLEcsvmysqlADDPRIMARYKEY(id);

ALTERTABLEcsvmysqlCHANGEid idINT(10)NOTNULLAUTO_INCREMENT=1;

删除自增长的主键id

先删除自增长再删除主键。

ALTERTABLEcsvmysqlCHANGEid idINT(10);//删除自增长

ALTERTABLEcsvmysqlDROPPRIMARYKEY;//删除主建

MySQL给用户赋值权限

因为遇到了问题:(SQLException: access denied for @’localhost’ (using password: no))

下面先看一下MySQL的权限说明:

mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;

权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。

当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。

当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。

用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%’表示从任何地址连接。

‘连接口令’不能为空,否则创建失败。

实际操作

给来自192.168.10.10的用户root分配可对数据库test的employee表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。

给来自192.168.10.10的用户root分配可对数据库test所有表进行所有操作的权限,并设定口令为123。

给来自192.168.10.10的用户root分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

mysql>grant all privileges on *.* to root@localhost identified by ‘123’;

给本机用户root分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

我新建了一个表csvmysql,现在要给test数据库的csvmysql数据表赋权限:

mysql>grant all on test.* to root@’localhost’ identified by ‘2017’;

然后禁止read_only模式。

mysql>set global read_only=off ;/*set global read_only=0; 禁止read_only模式*/

set global read_only=on/off是DBA经常用的一个操作:进行主备切换的时候,一般都会先对主库进行只读操作(on),然后主备同步完成后,再把备库置为可读写(off)。这样可以避免切换的过程中双写引起脏数据。

mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效。

flush privileges;/* SET SESSION binlog_format = ‘ROW’; SET GLOBAL binlog_format = ‘ROW’;*/

小结

希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180124B0L9P200?refer=cp_1026

扫码关注云+社区