企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 用户连接MySQL 格式: `mysql [-h主机地址] -u用户名 -p[用户密码]` 1. 本地连接 ~~~ $ mysql -uroot -p ~~~ 2. 远程连接 ~~~ $ mysql -h10.0.0.1 -uroot -p[123] ~~~ ## 修改用户密码 格式:`mysqladmin -u用户名 -p旧密码 password 新密码` ~~~ $ mysqladmin -uroot -pab12 password 456 ~~~ ## 增加新用户 格式:`grant all on 数据库.数据表 to 用户名@登录主机 identified by "[密码]";` 例:增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。 ~~~ mysql> grant select,insert,update,delete on *.* to test2@"%" identified by "abc"; ~~~ ## MySQL中用户权限的控制 mysql的权限控制可以大致分为三个层面: 1. 连接上允不允许(是否能登录到mysql服务器) 2. 数据库层面:允许用户操作哪些数据库 3. 数据表层面上:允许用户操作哪些表,并可以定义对表的操作权限:比如insert,create,update等。 此外,如果还觉得不够精细,MySQL还可以精确到对某表某列控制操作权限。 我们在安装MySQL的过程中,会有一个会话定义你的用户名和密码,这里我用的是root和123456,这个用户名,是最开始连接到MySQL的用户。 我们用`root`和`123456`连接登录MySQL之后, ~~~ # 登录mysql命令 $ mysql -u root -p; ~~~ `show databases;`可以看到有很多数据库。 `use mysql;` 使用`mysql`数据库,在这个数据库里,可以看到3个表:`user`表,`db`表和`table_priv`。 ![](https://img.kancloud.cn/1a/9e/1a9ed505a2e0720b4670d70dc61cd044_368x446.png) 查看`user`表则可以看到能登录到MySQL的用户信息。 用`select \*from db\G `可以从`db`表中看到哪些用户拥有对哪些数据库的权限。 查看`tables_priv`可以查看用户拥有哪些表的操作权限。 新增用户,在增加用户的同时必须指定对库、表的权限。 不能仅仅通过向`user`表新增记录而成功。 ~~~ mysql> insert into user (host,user,password)values('localhost','hehe','123456'); ~~~ MySQL会报错:`ERROR 1364 (HY000): Field 'ssl\_cipher' doesn't have a default value` **正确的做法:** `grant [权限1,权限2...] on 某库.某表 to 新用户名@'主机名/IP地址' identified by '[密码]';` 如果要删除这个用户,用`delete`语句就可以了。 - 连接权限 我们可以定义一个用户并让他拥有所有库,所有表的所有增删改查等操作权限,语句如下: ~~~ mysql> grant all on *.* to hehe@'localhost' identified by '123456'; ~~~ - 库权限 ~~~ mysql> grant all on 库a.* to hehe@'localhost' identified by '123456'; ~~~ - 表权限 ~~~ mysql> grant all on 库a.表a to hehe@'localhost' identified by '123456'; ~~~ ## `mysqladmin`命令 `mysqladmin`是[mysql](http://man.linuxde.net/mysql "mysql命令")服务器管理任务的客户端工具,它可以检查mytsql服务器的配置和当前工作状态,创建和删除数据库,创建用户和修改用户密码等操作。 ### 语法 ~~~bash mysqladmin(选项)(参数) ~~~ ### 选项 `-h`:MySQL服务器主机名或ip地址; `-u`:连接MySQL服务器的用户名; `-p`:连接MySQL服务器的密码; `--help`:显示帮助信息。 ### 参数 管理命令:需要在MySQL服务器上执行的管理命令。 **mysqladmin支持下列命令:** `create databasename`:创建一个新数据库; `drop databasename`:删除一个数据库及其所有表; `extended-status`:给出服务器的一个扩展状态消息; `flush-hosts`:清空所有缓存的主机; `flush-logs`:清空所有日志; `flush-tables`:清空所有表; `flush-privileges`:再次装载授权表(同reload); `kill id,id,...`:杀死mysql线程; `password` 新口令:将老密码改为新密码; `ping`:检查mysqld是否活着; `processlist`:显示服务其中活跃线程列表; `reload`:重载授权表; `refresh`:清空所有表并关闭和打开日志文件; `shutdown`:关掉服务器; `status`:给出服务器的简短状态消息; `variables`:打印出可用变量; `version`:得到服务器的版本信息。 ## 显示命令 ### `show`显示数据库,显示库中的表 - 显示数据库 ~~~ mysql> show databases; ~~~ - 显示库中的数据表 ~~~ mysql> use mysql; mysql> show tables; ~~~ `mysql`库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。  ### `use`使用数据库 ~~~ mysql> use dbName; ~~~ ### `describe` `desc`显示数据表的结构 ~~~ mysql> describe tableName; ~~~ ### `create`建库、建表 - 建库 ~~~ mysql> create database dbName; ~~~ - 建表 ~~~ mysql> create database table tableName (字段设定列表); ~~~    ### `drop`删库、删表 - 删库 ~~~ mysql> drop database dbName;  ~~~ - 删表 ~~~ mysql> drop table tableName; ~~~   ### 将表中记录清空 ~~~ mysql> delete from tableName; ~~~     ### `select`显示表中的记录: ~~~ mysql> select * from tableName; ~~~     ## sql文件 - `source`:导入sql文件 ~~~bash mysql> source  d:/myprogram/database/db.sql; ~~~ - `mysqldump`:导出sql文件 1. 导出整个数据库(包括数据库中的数据) ~~~bash $ mysqldump -u username -ppassword dbname > dbname.sql; ~~~ 2. 导出数据库中的数据表(包括数据表中的数据) ~~~bash $ mysqldump -u username -ppassword dbname tablename > tablename.sql; ~~~ 3. 导出数据库结构(不包括数据,只有创建数据表语句) ~~~bashbash $ mysqldump -u username -ppassword -d dbname > dbname.sql; ~~~ 4. 导出数据库中数据表的表结构(不包括数据,只有创建数据表语句) ~~~ $ mysqldump -u username -ppassword -d dbname tablename > tablename.sql; ~~~ ## `limit`分页 语句1: ~~~ select * from student limit 9,4 ~~~ 语句2: ~~~ slect * from student limit 4 offset 9 ~~~ 上述语句均返回表student的第10、11、12、13行 , 语句1中,`limit`第一个参数表示从该参数的下一条数据开始,第二个参数表示每次返回的数据条数。 语句2中,`4`表示返回4行,`9`表示从表的第十行开始 例,通过limit和offset 或只通过limit可以实现分页功能。 假设 pageSize表示每页要显示的条数,pageNumber表示页码,那么 返回第pageNumber页,每页条数为pageSize的sql语句: 语句3: ~~~ select * from studnet limit (pageNumber-1)*pageSize,pageSize ~~~ 语句4: ~~~ select * from student limit pageSize offset (pageNumber-1)*pageSize ~~~