MySQL 基础常用命令

简介:

一、启动与关闭

1.1 Linux下启动mysql 的命令:

  • a. rpm包安装:service mysqld start

  • b. 源码包安装:/usr/local/mysql/bin/mysqld_safe --user=mysql &

1.2 Linux下重启mysql 的命令:

  • a. rpm包安装:service mysqld restart

  • b. 源码包安装:

    • 先关闭mysql

      /usr/local/mysql/bin/mysqladmin -uroot -p shutdown

    • 再启动mysql

      /usr/local/mysql/bin/mysqld_safe --user=mysql &

1.3 Linux下关闭mysql 的命令:

  • a. rpm包安装:service mysqld stop

  • b. 源码包安装:

    • 方法1、/usr/local/mysql/bin/mysqladmin -uroot -p shutdown

    • 方法2、killall mysqld           //强行终止MySQL数据库服务,有可能导致表损坏,不建议使用

二、数据库连接

2.1 连接MySQL

格式:$mysql_dir/bin/mysql [-h主机地址] -u用户名 -p用户密码,回车后提示输入密码。

2.2 退出MySQL

格式:exit/quit

 

三、修改密码

3.1 mysqladmin 命令

格式:mysqladmin -u用户名 -p旧密码 password 新密码

例1:给root加个密码123456。首先在终端下进入目录$mysql_dir/bin,然后键入以下命令

./mysqladmin -uroot password ’123456′

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

例2:再将root的密码改为abc123。

./mysqladmin -uroot -p123456 password abc123

3.2 UPDATE user 语句

首先使用root 帐户登入mysql,然后执行:

UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='root';
FLUSH PRIVILEGES;

3.3 SET PASSWORD 语句

同样,首先使用root 帐户登入mysql,然后执行:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('abc123');

四、创建用户与授权

4.1 CREATE USER

CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']    [, user [IDENTIFIED BY [PASSWORD] 'password']] ...

CREATE USER用于创建新的MySQL账户。要使用CREATE USER,您必须拥有mysql 数据库的全局CREATE USER权限,或拥有INSERT权限。对于每个账户,CREATE USER会在没有权限的mysql.user表中创建一个新记录。如果账户已经存在,则出现错误。

使用自选的IDENTIFIED BY子句,可以为账户指定一个密码。user值和密码的给定方法和GRANT语句一样。特别要注意的是,要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD

例1:创建新用户david & sandy

mysql> create user 'david'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> create user 'sandy'@'localhost' identified by PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19';
Query OK, 0 rows affected (0.00 sec)

mysql>

4.2 使用GRANT语句

最好的方法是使用GRANT语句,因为这样更精确,错误少。从MySQL 3.22.11起提供了GRANT;它的主要用途是来给帐户授权的,但也可用来建立新帐户并同时授权。

注意:当mysql 运行于no_auto_create_user 时要提供新建用户的密码,否则不能创建新用户。

格式:

GRANT privileges ON databasename.tablename TO 'username'@'host' identified by 'password';

例1、增加一个用户test1,密码为abc,让他可以在任何主机上登录,并对所有数据库拥有所有权限。

首先用以root用户连入MySQL,然后键入以下命令:

grant all privileges on *.* to 'test1'@'%' identified  by 'abc';
flush privileges;

例2、增加一个用户test2,密码为abc,让他只可以在localhost上登录,并可以对数据库david进行查询、插入、修改、删除的操作。

grant select,insert,update,delete on david.* to 'test2'@'localhost' identified by 'abc';
flush privileges;

如果不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on david.* to 'test2'@'localhost' identified by '';

grant 更多用法,请自行Google+Baidu。

4.3 直接操作MySQL授权表

除了GRANT,你可以直接用INSERT语句创建相同的账户,然后使用FLUSH PRIVILEGES告诉服务器重载授权表。

例1:创建用户test3,让其具有同4.2 例2中test2用户同样的权限。

mysql> insert into mysql.user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv) values('localhost', 'test3', PASSWORD('password'),'Y','Y','Y','Y');
Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>

mysql> select Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv from mysql.user where User='test3';+-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+| Host      | User  | Password                                  | Select_priv | Insert_priv | Update_priv | Delete_priv |+-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+| localhost | test3 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | Y           | Y           | Y           | Y           | +-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+1 row in set (0.00 sec)

mysql>

当用INSERT创建账户时,使用FLUSH PRIVILEGES 的原因是告诉服务器重读授权表。否则,只有重启服务器后更改才会生效。使用 GRANT,则不需要使用FLUSH PRIVILEGES。

用INSERT语句时,使用PASSWORD()函数是为了加密密码。GRANT语句自动加密密码,因此不需要PASSWORD()。

'Y' 值启用账户权限。

五、库操作

必须首先登录到mysql 中,有关操作都是在mysql 的提示符下进行,而且每个命令以分号结束。

5.1 创建数据库

命令:create database <数据库名>;

例1:创建一个名为test 的数据库

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql>

5.2 显示所有的数据库

命令:show databases;(注意:最后有个s)

mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema | | david              | | mysql              | | test               | +--------------------+4 rows in set (0.00 sec)

mysql>

5.3 删除数据库

命令:drop database <数据库名>;

例2:删除名为test 的数据库

mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)

mysql>

5.4 连接数据库

命令: use <数据库名>;

例3:连接david 数据库

mysql> use david;Database changed
mysql>

5.5 查看当前使用的数据库

命令:select database();

mysql> select database();+------------+| database() |+------------+| david      | +------------+1 row in set (0.00 sec)

mysql>

5.6 当前数据库包含的表信息

命令:show tables;(注意:最后有个s)

mysql> show tables;+-----------------+| Tables_in_david |+-----------------+| emp             | +-----------------+1 row in set (0.00 sec)

mysql>

六、表操作

操作之前应连接某个数据库。

6.1 建立表

create table <表名> (<字段名1> <类型1> [,..<字段名n> <类型n>]);create table tablename (col1 type1 [not null] [primary key],col2 type2 [not null],..);

mysql> create table myclass (    -> id int(4) not null primary key auto_increment,    -> name char(20) not null,    -> sex int(4) not null default '0',    -> degree double(16,2));
Query OK, 0 rows affected (0.04 sec)

mysql>

补充:根据已有的表创建新表。

  tab_new   tab_new     tab_old; (既包含表结构,又包含表数据)

只包含表结构:

mysql> create table myclass2 like myclass;
Query OK, 0 rows affected (0.00 sec)

mysql>

既包含表结构,又包含表数据:

mysql> insert into myclass values(1, 'david', 1, 20130417.16);
Query OK, 1 row affected (0.02 sec)

mysql> mysql> mysql> create table myclass3 as select * from myclass;
Query OK, 1 row affected (0.07 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> select * from myclass3;+----+-------+-----+-------------+| id | name  | sex | degree      |+----+-------+-----+-------------+|  1 | david |   1 | 20130417.16 | +----+-------+-----+-------------+1 row in set (0.02 sec)

mysql>

6.2 获取表结构

命令:

desc 表名;orshow columns from 表名;

获取myclass & myclass2 表结构

mysql> desc myclass;+--------+--------------+------+-----+---------+----------------+| Field  | Type         | Null | Key | Default | Extra          |+--------+--------------+------+-----+---------+----------------+| id     | int(4)       | NO   | PRI | NULL    | auto_increment | | name   | char(20)     | NO   |     |         |                | | sex    | int(4)       | NO   |     | 0       |                | | degree | double(16,2) | YES  |     | NULL    |                | +--------+--------------+------+-----+---------+----------------+4 rows in set (0.00 sec)

mysql> show columns from myclass2;+--------+--------------+------+-----+---------+----------------+| Field  | Type         | Null | Key | Default | Extra          |+--------+--------------+------+-----+---------+----------------+| id     | int(4)       | NO   | PRI | NULL    | auto_increment | | name   | char(20)     | NO   |     |         |                | | sex    | int(4)       | NO   |     | 0       |                | | degree | double(16,2) | YES  |     | NULL    |                | +--------+--------------+------+-----+---------+----------------+4 rows in set (0.00 sec)

mysql>

6.3 删除表

命令:drop table <表名>;

例:删除表名为 myclass3 的表

mysql> drop table myclass3;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;+-----------------+| Tables_in_david |+-----------------+| emp             | | myclass         | | myclass2        | +-----------------+3 rows in set (0.00 sec)

mysql>

6.4 更改表名

命令:rename table 原表名 to 新表名;

例:将表 myclass2 名字更改为 myclass4

mysql> rename table myclass2 to myclass4;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;+-----------------+| Tables_in_david |+-----------------+| emp             | | myclass         | | myclass4        | +-----------------+3 rows in set (0.00 sec)

mysql>

6.5 在表中增加字段

命令:alter table 表名 add 字段 类型 其他;

例:在表 myclass 中添加了一个字段passtest,类型为int(4),默认值为0。

mysql> alter table myclass add passtest int(4) default '0';
Query OK, 1 row affected (0.04 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> desc myclass;+----------+--------------+------+-----+---------+----------------+| Field    | Type         | Null | Key | Default | Extra          |+----------+--------------+------+-----+---------+----------------+| id       | int(4)       | NO   | PRI | NULL    | auto_increment | | name     | char(20)     | NO   |     |         |                | | sex      | int(4)       | NO   |     | 0       |                | | degree   | double(16,2) | YES  |     | NULL    |                | | passtest | int(4)       | YES  |     | 0       |                | +----------+--------------+------+-----+---------+----------------+5 rows in set (0.00 sec)

mysql>

七、数据操作

7.1 插入数据

命令:insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )];

例:向 myclass 表中插入以下记录,留空的表示使用默认值。

mysql> insert into myclass (id, name, sex, degree, passtest) values(1, 'david', 1, 80.56, 78);     
Query OK, 1 row affected (0.00 sec)

mysql> insert into myclass values(2, 'sandy', 0, 100, 90);
Query OK, 1 row affected (0.00 sec)

mysql> insert into myclass (id, name, sex, degree) values(3, 'renee', 0, 90.34);
Query OK, 1 row affected (0.00 sec)

mysql> insert into myclass (id, name) values(4, 'china');
Query OK, 1 row affected (0.00 sec)

mysql>

7.2 查询表中的数据

a. 查询所有行

命令:select <字段1,字段2,...> from < 表名 > where < 表达式 >;

例1:查看表 myclass 中所有数据

mysql> select * from myclass;+----+-------+-----+--------+----------+| id | name  | sex | degree | passtest |+----+-------+-----+--------+----------+|  1 | david |   1 |  80.56 |       78 | |  2 | sandy |   0 | 100.00 |       90 | |  3 | renee |   0 |  90.34 |        0 | |  4 | china |   0 |   NULL |        0 | +----+-------+-----+--------+----------+4 rows in set (0.00 sec)

mysql>

例2:查询表 david 相关信息

mysql> select * from myclass where name='david';+----+-------+-----+--------+----------+| id | name  | sex | degree | passtest |+----+-------+-----+--------+----------+|  1 | david |   1 |  80.56 |       78 | +----+-------+-----+--------+----------+1 row in set (0.00 sec)

mysql>

b. 查询前几行数据

例如:查看表 myclass 中前2行数据

mysql> select * from myclass limit 2;+----+-------+-----+--------+----------+| id | name  | sex | degree | passtest |+----+-------+-----+--------+----------+|  1 | david |   1 |  80.56 |       78 | |  2 | sandy |   0 | 100.00 |       90 | +----+-------+-----+--------+----------+2 rows in set (0.00 sec)

mysql>

或者:

mysql> select * from myclass order by id limit 2;+----+-------+-----+--------+----------+| id | name  | sex | degree | passtest |+----+-------+-----+--------+----------+|  1 | david |   1 |  80.56 |       78 | |  2 | sandy |   0 | 100.00 |       90 | +----+-------+-----+--------+----------+2 rows in set (0.01 sec)

mysql>

7.3 删除表中的数据

命令:delete from 表名 where 表达式;

例如:删除表 myclass 中编号为4的记录

mysql> delete from myclass where id=4;
Query OK, 1 row affected (0.00 sec)

mysql> select * from myclass;+----+-------+-----+--------+----------+| id | name  | sex | degree | passtest |+----+-------+-----+--------+----------+|  1 | david |   1 |  80.56 |       78 | |  2 | sandy |   0 | 100.00 |       90 | |  3 | renee |   0 |  90.34 |        0 | +----+-------+-----+--------+----------+3 rows in set (0.00 sec)

mysql>

7.4 修改表中的数据

 表名  字段  新值,…

例:修改 myclass 表中编号为1的记录,将degree 值改成89.99

mysql> update myclass set degree=89.99 where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from myclass;+----+-------+-----+--------+----------+| id | name  | sex | degree | passtest |+----+-------+-----+--------+----------+|  1 | david |   1 |  89.99 |       78 | |  2 | sandy |   0 | 100.00 |       90 | |  3 | renee |   0 |  90.34 |        0 | +----+-------+-----+--------+----------+3 rows in set (0.00 sec)

mysql>

八、数据的导入导出

8.1 导出整个数据库

命令:mysqldump -u 用户名 -p 数据库名 > 导出的文件名

[root@TS-DEV bin]# ./mysqldump -uroot -p david > /tmp/david/david.sql
Enter password: 
[root@TS-DEV bin]# ll /tmp/david/
total 4
-rw-r--r-- 1 root root 2764 Apr 17 17:13 david.sql
[root@TS-DEV bin]#

8.2 导出一个表

命令:mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

[root@TS-DEV bin]# ./mysqldump -uroot -p david myclass > /tmp/david/david_myclass.sql
Enter password: 
[root@TS-DEV bin]# ll /tmp/david/
total 8
-rw-r--r-- 1 root root 1854 Apr 17 17:16 david_myclass.sql
-rw-r--r-- 1 root root 2764 Apr 17 17:13 david.sql
[root@TS-DEV bin]#

8.3 导出一个数据库结构

命令:mysqldump -u root -p -d --add-drop-table test > test_db.sql

-d 没有数据 --add-drop-table 在每个create 语句之前增加一个drop table

[root@TS-DEV bin]# ./mysqldump -uroot -p -d --add-drop-table david > /tmp/david/david_db.sql
Enter password: 
[root@TS-DEV bin]#

8.4 导入数据库

a. 常用source 命令

进入mysql 数据库控制台

# ./mysql -uroot -p

mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema | | mysql              | +--------------------+2 rows in set (0.00 sec)

mysql> create database sandy;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema | | mysql              | | sandy              | +--------------------+3 rows in set (0.00 sec)

mysql> use sandyDatabase changed
mysql> source /tmp/david/david.sql
Query OK, 0 rows affected (0.00 sec)...

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0...

Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0...

Query OK, 0 rows affected (0.00 sec)

mysql> show tables;+-----------------+| Tables_in_sandy |+-----------------+| emp             | | myclass         | | myclass4        | +-----------------+3 rows in set (0.00 sec)

mysql> select * from emp;+------+-------+| id   | name  |+------+-------+|    1 | david | |    2 | sandy | +------+-------+2 rows in set (0.00 sec)

mysql>

b. 使用mysql 命令

先创建要导入的数据库 renee。

mysql> create database renee;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema | | mysql              | | renee              | | sandy              | +--------------------+4 rows in set (0.00 sec)

mysql>

导入数据

[root@TS-DEV bin]# 
Enter password: 
[root@TS-DEV bin]#

查看数据

mysql> use renee;Database changed
mysql> show tables;+-----------------+| Tables_in_renee |+-----------------+| myclass         | +-----------------+1 row in set (0.00 sec)

mysql> select * from myclass;+----+-------+-----+--------+----------+| id | name  | sex | degree | passtest |+----+-------+-----+--------+----------+|  1 | david |   1 |  89.99 |       78 | |  2 | sandy |   0 | 100.00 |       90 | |  3 | nancy |   0 |  90.34 |        0 | +----+-------+-----+--------+----------+3 rows in set (0.00 sec)

mysql>









本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1630834,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
存储 关系型数据库 MySQL
初步了解MySQL数据库的基本命令
初步了解MySQL数据库的基本命令
295 0
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
存储 关系型数据库 MySQL
(十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
相信大家在编写SQL时一定有一个困扰,就是明明记得数据库中有个命令/函数,可以实现自己需要的功能,但偏偏不记得哪个命令该怎么写了,这时只能靠盲目的去百度,以此来寻找自己需要的命令。
794 28
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
373 5
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
533 3
|
SQL 关系型数据库 MySQL
MySQL删除表数据、清空表命令(truncate、drop、delete 区别)
MySQL删除表数据、清空表命令(truncate、drop、delete区别) 使用原则总结如下: 当你不需要该表时(删除数据和结构),用drop; 当你仍要保留该表、仅删除所有数据表内容时,用truncate; 当你要删除部分记录、且希望能回滚的话,用delete;
|
SQL 关系型数据库 MySQL
mysql性能调优:EXPLAIN命令21
【7月更文挑战第21天】掌握SQL性能调优:深入解析EXPLAIN命令的神奇用法!
355 1
|
关系型数据库 MySQL 数据库
Mysql 常用命令
Mysql 常用命令
252 0
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之 MySQL数据库中,执行delete命令删除数据后,存储空间通常不会立即释放,该如何优化
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
624 2

推荐镜像

更多