创建数据库和表
创建数据库
通常一个数据库的服务器下会有很多的数据库,每个数据库对应的都是单独的一个项目。所以当我们成功登陆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 ONtest
.* 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用户进行登录。