百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

MySQL 基础常用的命令-实用型

bigegpt 2024-09-02 16:13 6 浏览

一、启动与关闭

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;

如果不想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 | 
+-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+
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 | 
+--------------------+
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 | 
+------------+
row in set (0.00 sec)
mysql>

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

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

mysql> show tables;
+-----------------+
| Tables_in_david |
+-----------------+
| emp | 
+-----------------+
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>

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

create table tab_new like tab_old; (只有表结构)
create table tab_new as select * from 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: 0
mysql> select * from myclass3;
+----+-------+-----+-------------+
| id | name | sex | degree |
+----+-------+-----+-------------+
| 1 | david | 1 | 20130417.16 | 
+----+-------+-----+-------------+
row in set (0.02 sec)
mysql>

6.2 获取表结构

命令:

desc 表名;
or
show 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 | | 
+--------+--------------+------+-----+---------+----------------+
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 | | 
+--------+--------------+------+-----+---------+----------------+
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 | 
+-----------------+
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 | 
+-----------------+
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: 0
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 | | 
| passtest | int(4) | YES | | 0 | | 
+----------+--------------+------+-----+---------+----------------+
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 | 
+----+-------+-----+--------+----------+
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 | 
+----+-------+-----+--------+----------+
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 | 
+----+-------+-----+--------+----------+
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 | 
+----+-------+-----+--------+----------+
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 | 
+----+-------+-----+--------+----------+
rows in set (0.00 sec)
mysql>

7.4 修改表中的数据

update 表名 set 字段 = 新值,… where 条件;

例:修改 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: 0
mysql> 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 | 
+----+-------+-----+--------+----------+
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 | 
+--------------------+
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 | 
+--------------------+
rows in set (0.00 sec)
mysql> use sandy
Database 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 | 
+-----------------+
rows in set (0.00 sec)
mysql> select * from emp;
+------+-------+
| id | name |
+------+-------+
| 1 | david | 
| 2 | sandy | 
+------+-------+
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 | 
+--------------------+
rows in set (0.00 sec)
mysql>

导入数据

[root@TS-DEV bin]# ./mysql -uroot -p -D renee < /tmp/david/david_myclass.sql 
Enter password: 
[root@TS-DEV bin]#

查看数据

mysql> use renee;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_renee |
+-----------------+
| myclass | 
+-----------------+
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 | 
+----+-------+-----+--------+----------+
rows in set (0.00 sec)
mysql>

更多导入导出命令,请自行Google+Baidu。

转载地址请点击下方链接查看原文

相关推荐

LangChain4j如何自定义文档转换器实现数据清洗?

LangChain4j提供了3种RAG(Retrieval-AugmentedGeneration,检索增强生成)实现,我们通常在原生或高级的RAG实现中,要对数据进行清洗,也就是将外接...

Java 8 Stream API 详解(java stream.)

Java8StreamAPI详解一、概述在Java8中,StreamAPI是一个重要的新特性。它为处理集合(如List、Set等)中的元素提供了一种高效且富有表现力的方式。Str...

Java修炼终极指南:185 使用 Stream 过滤嵌套集合

这是面试中的一个经典问题,通常从一个模型开始,如下所示(我们假设集合是一个List):publicclassAuthor{privatefinalStringname;pri...

java8的stream使用小示例(java stream())

据JetBrains发布的2021年开发者生态系统调查,Java8在java使用的版本中仍然是当前最流行的版本。72%的专业开发人员使用Java8作为其在java开发中主要编程语言版本。现...

Node.js Stream - 实战篇(node.js in action)

本文转自“美团点评技术团队”http://tech.meituan.com/stream-in-action.html背景前面两篇(基础篇和进阶篇)主要介绍流的基本用法和原理,本篇从应用的角度,介...

Java Stream:集合处理的api(java 集合操作)

JavaStream流:高效集合处理的函数式编程利器一、什么是JavaStream?Java8引入的StreamAPI是一套用于处理集合数据的流式编程接口,通过函数式风格(无副作用的...

去除 List 中的重复元素,你知道几种实现方法?

去除List中重复元素,这在实际编程或面试中经常遇到,每个人都有习惯的写法吧,这里抛砖引玉,汇总了一些实现方案,开拓思路。准备数据假设数组中有10个数据,可能有重复,需要将重复的数据从数组中去掉。pu...

Java开发者必看!Stream流式编程10个爆款技巧,让你代码优雅飞起

为什么你的Java代码总像拧巴的麻绳?掌握这10个Stream实战技巧,代码效率与优雅度将产生质的飞跃。以下案例均来自真实电商系统场景,带你感受流式编程的降维打击!一、过滤与映射组合拳(Filter...

leetcode每日一题之存在重复元素(存在重复元素 iii)

题:给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。比如:输入:[1,2,3,1]输出:true...

告别for循环!揭秘Stream API如何让你的代码简洁度提升300%

一、当传统循环遇上现代需求真实场景复现:某电商平台需要处理10万条订单数据,要求:筛选出金额>500的订单提取用户ID并去重统计VIP用户数量传统实现方案://常规写法Set<Long...

Java中List去重的N种方法:从基础到优雅

Java中List去重的N种方法:从基础到优雅在日常的Java开发中,我们经常会遇到需要对List集合去重的情况。无论是为了清理重复的数据,还是为了优化算法性能,掌握多种去重方式都是一项非常实用的技能...

Java Stream流没用过?常用高频方法

概念Stream流是Java8添加的以一种链式调用的方法处理数据,主要侧重于计算。具有以下相关特点代码简洁链式调用Stream常用方法1.将数组变为当作List操作String[]strArr=...

核医学专业名词索引(M-R)(核医学重点归纳)

M吗啡(morphia)埋藏式心律转复除颤器(implantablecardioverterdefibrillator,ICD)麦角骨化醇(VD2,calciferol)脉冲堆积(pulsepi...

CodeMeter 新版发布(codesigner下载)

威步于2022年8月4日发布CodeMeter7.50及CodeMeter软件保护套装11.10,以下为新版内容。CodeMeterRuntime7.50StreamingSIMDExten...

世界上最小的五轴铣床Pocket NC(最小的五轴加工中心)

PocketNC,由MIT学生研制,还有说法是这款产品的设计者是来自美国蒙大拿州的一对极客夫妻。目前主要有两款产品:PocketNCV2-50,9000美元;PocketNCV2-10,60...