史上最简单MySQL教程详解(基础篇)之库操作和用户管理

创建数据库和表

创建数据库

通常一个数据库的服务器下会有很多的数据库,每个数据库对应的都是单独的一个项目。所以当我们成功登陆MySQL服务器以后,我们可以通过【show】命令来查看数据库列表,语法如下:

SHOW DATABASES;

例如,运行结果如图:

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+
4 rows in set (0.00 sec)

注意事项:

  • SQL命令本身是不区分大小的,这一点不仅仅局限于MySQL数据库,大多数数据库中都是如此;
  • 表简介:
    • 【mysql】:数据中的user表通常管理着数据库的用户信息;
    • 【information_schema】:数据库又称为信息架构库,管理者从表开始的数据库的组成信息,以及用户管理信息的检索的专用数据库;
    • 【performance_schema】,主要用于收集数据库服务器性能参数(MySQL5.6以前是默认关闭的,需要手动开启);
    • 【sys】:【performance_schema】提供监控策略及大量监控项,包括:元数据锁、进度跟踪、事务、内存使用及存储程序等。但是【performance_schema】又过于复杂,操作不便,所以5.7新增了【sys】,基础数据来自于 【performance_schema 】跟 【information_shcema】两个库,本身数据库不存储及集采数据。

确认这些数据库的内容,可以以掌握现在数据库的状态。所以大家在建表的时候切记不可建在这几个数据库中;

创建数据库

我们开始使用【create】创建一个数据库,语法如下:

CREATE DATABASE 数据库名;

例如创建一个数据库名为【test】的数据库,运行结果如图:

mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+——————–+
5 rows in set (0.00 sec)

我们创建成功后再使用查看数据的命令,可以看到名字为【test】的数据库已经创建成功了
注意事项:

  • 【Query OK, 1 row affected】表示“创建成功,一行受影响,耗时xx秒”;
  • 如果创建失败,请查看自己是否忘记了终止符【;】,在MySQL监视器中,输入任何一句命令,都是需要终止符来作为结束。如果忘记输入了终止符,按下回车键【Enter】后,会在下一行继续显示【mysql>】让你输入,这时再重新输入终止符即可。我在这里示范一个忘记输入终止符的例子,运行结果如下:

    mysql> create database home
    -> ;
    Query OK, 1 row affected (0.00 sec)
    mysql> show databases
    -> ;
    +——————–+
    | Database |
    +——————–+
    | information_schema |
    | home |
    | mysql |
    | performance_schema |
    | sys |
    | test |
    +——————–+
    6 rows in set (0.00 sec)

  • 如果出现了【You have an error in your SQL syntax】就表示你的SQL命令出现了语法问题,请重新确认后再次输入即可;

  • 如果显示了【Can’t create database ‘test’;database exists】就表示“名为【test】的数据库已经存在了,不可以重复创建”,换一个数据库名创建即可;
  • 另外需要注意的是,在Windows和Linux中对数据库名和表名的处理是不同的。在WIndow环境中,是不区分大小写的;而在Linux环境中是严格区分大小的;例如表【TEST】和【test】在Window环境中是作为一个表处理,然而在Linux环境中则是两个完全独立的表。此外,大家在创建数据库,表,列名时,养成良好的习惯,尽量避免不要使用中文,否则容易出现未知的错误;

删除数据库

我们通过【drop】命令来删除数据库,语法如下

DROP DATABASE 数据库名;

例如,删除我们刚刚创建的名为【home】的数据库,运行结果如下:

mysql> drop database home;
Query OK, 0 rows affected (0.03 sec)
mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+——————–+
5 rows in set (0.00 sec)

可以看出,我们已经成功删除了名字为【home】的数据库;

用户管理

创建操作数据的专用用户

创建好数据库后,可以通过管理者(root)登录数据库进行各种操作,但是从安全等各个角度来说,这都不是一个好的方式。所以,我们可以在创建好数据库以后,创建属于这个数据库的专用用户,语法如下:

GRANT ALL PRIVILEGES ON 数据库名.数据表名TO 用户名@主机IP IDENTIFIED BY 密码

然后我们需要刷新一下权限

flush privileges;

例如:

mysql> GRANT ALL PRIVILEGES ON test.*TO user@localhost IDENTIFIED BY “123456”;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

这里就为我们【本地(localhost)】的名为【test】的数据库创建了一个名为【uesr】的用户,它具有对该数据库下的所有表【*】进行操作的【全部权限( ALL PRIVILEGES)】,并设置它的登录密码为【123456】。

注意事项:

  • 因为这次是作为示范,所以我们赋予了【user】用户对于数据库的全部操作权限【ALL PRIVILEGES】,但是在实际的开发中,我们应该根据实际情况赋予用户对应的权限,具体的有【CREATE(创建)】,【SELECT(查询)】,【UPDATE(更新)】,【DELETE(删除)】等权限。同样,操作的范围也应该像操作权限一样赋予最小范围的权限,而不是数据库下的所有表【*】;
  • 如果提示【You have an error in your SQL syntax】请检查自己的SQL语句是否正确书写,着重注意密码是否加上【”“】

查看用户

查询用户主要使用的是【SELECT】命令,这个命令在后面会有详细的解释,这里就不再过多的解释,大家先做个了解即可。运行结果如图:

mysql> select user,host from mysql.user;
+—————+———–+
| user | host |
+—————+———–+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| user | localhost |
+—————+———–+
4 rows in set (0.00 sec)
就可以看到我们刚才加入的用户信息了;

查看用户权限

通过【SHOW】命令来查看用户的权限,语法如下

 SHOW GRANTS FOR 用户名@主机IP;

运行结果如果:

mysql> SHOW GRANTS FOR user@localhost;
+——————————————————–+
| Grants for user@localhost |
+——————————————————–+
| GRANT USAGE ON . TO ‘user’@’localhost’ |
| GRANT ALL PRIVILEGES ON test.* TO ‘user’@’localhost’ |
+——————————————————–+
2 rows in set (0.00 sec)

注意事项:

  • 如果提示错误【 There is no such grant defined for user ‘user’ on host ‘%’】那就是你再输入命令的时候,并没有指定主机IP造成的,所以补上即可。因为如果不填写,默认的地址为任意地址【%】;

查看当前用户

这个命令可以用来当报错【ERROR 1045 (28000): Access denied for user 】的时候用来检查时候用。命令如下:

 select user();

mysql> select user();
+—————-+
| user() |
+—————-+
| root@localhost |
+—————-+
1 row in set (0.00 sec)

修改用户名

我们提供【RENAME】命令来修改用户的名字和主机IP,语法如下:

RENAME USER 需要修改的用户名@目前的主机IP to 修改后的用户名@修改后的主机IP;

操作结果如下:

mysql> select host,user from mysql.user;
+———–+—————+
| host | user |
+———–+—————+
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
| localhost | test |
| localhost | user |
+———–+—————+
5 rows in set (0.00 sec)
mysql> RENAME USER user@localhost to user_2;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user from mysql.user;
+———–+—————+
| host | user |
+———–+—————+
| % | user_2 |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
| localhost | test |
+———–+—————+
5 rows in set (0.00 sec)
mysql> RENAME USER test@localhost to test_2@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user from mysql.user;
+———–+—————+
| host | user |
+———–+—————+
| % | user_2 |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
| localhost | test_2 |
+———–+—————+
5 rows in set (0.00 sec)

注意事项:
+ 如果提示【ERROR 1396 (HY000): Operation RENAME USER failed for ‘user’@’localhost’】请确认需要修改的用户名是否存在
+ 如果提示【ERROR 1396 (HY000): Operation RENAME USER failed for ‘user’@’%’】请确认自己是否输入了主机IP,否则MySQL会默认为【%】

删除用户

这里我们依然采用的是【DROP】命令来实现,语法如下:

DROP USER 需要删除的用户名@主机IP;

运行结果:

mysql> select host,user from mysql.user;
+———–+—————+
| host | user |
+———–+—————+
| % | user_2 |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
| localhost | test_2 |
+———–+—————+
5 rows in set (0.00 sec)
mysql> drop USER test_2@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user from mysql.user;
+———–+—————+
| host | user |
+———–+—————+
| % | user_2 |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+———–+—————+
4 rows in set (0.00 sec)

到此,我们就完成了一些对于数据库和用户的操作,接下来,我们将讲解史上最简单MySQL教程详解(基础篇)之表操作(一)。同时这里向大家拓展一个知识点,那就是主机IP指的是该用户只能在对应的主机IP上进行登录。例如:user这个用你设置的主机IP为localhost,那么其他人就将无法从本地以外的地方使用user用户进行登录。

原文地址:https://www.cnblogs.com/newtol/p/10159113.html