数据库相关--mysql常用命令汇总

 

  本文对MySQL的常用命令进行分类汇总、命令介绍、举例说明,如转载或引用请在醒目位置放上本文连接。

  本文可作为常用工具收藏,如对您略有帮助请点赞👍👍👍支持!

  由于SQL属于类B的语言,不区分大小写,为了便于阅读,本文所有SQL命令,均使用小写,勿喷🙏。

 

常用命令分类:

  服务层面:包含服务的启动、关闭等,通俗的说是进入MySQL之前,在终端输入、与MySQL有关的命令;

  数据库层面:包含数据库的建立、删除等;

  数据表层面:包含表的建立、属性修改等,属于项目前期数据表设计相关的命令;

  数据层面:包含数据的增、删、改、查,属于常用的命令;

 

说明:   

 

  [内容、参数]  -----    是指可选参数

 

 

 

一、服务层面命令(简要的,不涉及端口、安全性等参数)

  1、启动、停止、重启MySQL服务:

 

# win系统
>net start mysql    # 启动
>net stop mysql    # 停止

# ox系统,如果提示找不到命令,可直接进入安装目录的bin文件夹内运行命令
$ mysql.server start # 通过brew安装的MySQL 启动
$ mysql.server stop    # 停止
$ mysql.server restart    # 重启

# Linux系统,如果提示找不到命令,可直接进入安装目录的bin文件夹内运行命令
$ path_mysql/init.d/mysqld start    # 启动  path_mysql是指安装路径
$ path_mysql/init.d/mysqld stop    # 停止
$ path_mysql/init.d/mysqld restart     # 重启

# 通过service 操作
$ service mysqld start    # 启动
$ service mysqld stop    # 停止
$ service mysqld restart    # 重启
$ service mysql status # 查看服务状态

 

 

 

 

  2、首次安装,启动配置服务,win系统参考这里

# ox系统
$ mysql_secure_installation

 

  3、首次登陆(新安装,未进行配置)

# win系统
>mysql -hlocalhost -uroot

# ox系统
$mysql -uroot

  4、登陆

mysql -u用户名 -p密码             # (密码)可省略,回车后再输入,如不省略,注意-p和密码间没有空格

例如:mysql -uroot -pmypasswd

  5、导出/导入数据库文件(待更新)

 

 

 

二、数据库层面

  1、操作命令

    

命令 简写 具体含义
\? 显示帮助信息
clear \c 明确当前输入语句
connect \r 连接到服务器,可选参数为数据库和主机
delimiter \d 设置语句分隔符
ego \G 发送命令到MySQL服务器,并显示结果
exit \q 退出MySQL
go \g 发送命令到MySQL服务器
help \h 显示帮助信息
notee \t 不写输出文件
print \p 打印当前命令
prompt \R 改变MySQL提示信息
quit \q 退出MySQL
rehash \# 重建完成散列
source \. 执行一个SQL脚本文件,以一个文件名作为参数
status \s 从服务器获取MySQL的状态信息
tee \T 设置输出文件,并将信息添加到所有给定的输出文件
use \u 用另一个数据库
charset \C 切换到另一个字符集
warning \W 每个语句之后显示警告
nowarning \w 每个语句之后不显示警告

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  2、常用命令

 

mysql>show databases;    # 查看已有的数据库

mysql>create database 数据库名称 [dafault character set utf8];    # 创建[字符编码为utf8的]数据库

mysql>show create database 数据库名称;    # 显示新创建的数据库信息

mysql>alter database 数据库名称 default character set gbk  collate gbk_bin;    #将数据库的编码格式设为 gbk 同时注意最后是设为gbk_bin,如果改为utf8,则最后是utf8_bin

mysql>drop database  数据库名称;    # 删除数据库

mysql>use 数据库名称;    # 切换至数据库     同 \u [数据库名称]    注意:使用简写命令时最后不要加 ; 
mysql>select database(); # 显示当前所在的数据库

 

 

 

   举例如下:

 

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

mysql> show create database test;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)


mysql> use test;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)


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

 

 

 

 

三、数据表层面

 

   1、常用命令

mysql>show tables;    # 显示当前数据库下所有数据表

mysql>create table 表名 (
字段名1      数据类型   [完整性约束条件],
字段名2     数据类型   [完整性约束条件],
字段名3      数据类型   [完整性约束条件],
..........
)[engine=innodb];    # 创建数据表  [引擎类型,默认innodb]

mysql>show create table 表名; # 显示数据表的基本信息,含字段及其属性、引擎、字符集等

mysql>desc 表名;    # 显示数据表信息,显示字段及其属性

mysql>alter table 原表名 rename to 新表名;    # 修改数据表名

mysql>alter table 表名 change 原字段名 新字段名 新数据属性;    # 修改表中字段

mysql>alter table 表名 modify 字段名 数据类型;    # 修改表中字段属性

mysql>alter table 表名 add 新字段名 数据类型 [约束条件];    # 添加新字段

mysql>alter table 表名 drop 字段名;    # 删除字段  (慎重!!!一般使用逻辑删除)

mysql>drop table 表名;   # 删除数据表    (慎重!!!)

 

 

  2、举例说明

 

mysql> show tables;           # 显示所有数据表

+------------------+
| Tables_in_school |
+------------------+
| class            |
| graduate         |
| student          |
| teacher          |
+------------------+
4 rows in set (0.00 sec)
 
mysql> create table test(             # 新建数据表,engine=innodb可省略
    -> id int(100) unsigned not null primary key auto_increment,
    -> age int(100)
    -> )engine=innodb;
Query OK, 0 rows affected (0.03 sec)
 
mysql> show create table test;           # 显示数据表详细信息
+-----------------+
| Table | Create Table                                                                                                                                                     |
+----------+
| test  | CREATE TABLE `test` (
  `id` int(100) unsigned NOT NULL AUTO_INCREMENT,
  `age` int(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------------+
1 row in set (0.01 sec)
 
mysql> desc test;                        # 显示数据表字段信息
+-------+-------------------+------+-----+---------+----------------+
| Field | Type              | Null | Key | Default | Extra          |
+-------+-------------------+------+-----+---------+----------------+
| id    | int(100) unsigned | NO   | PRI | NULL    | auto_increment |
| age   | int(100)          | YES  |     | NULL    |                |
+-------+-------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
 
mysql> alter table test rename to test1;              # 重命名数据表
Query OK, 0 rows affected (0.01 sec)

 mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| class            |
| graduate         |
| student          |
| teacher          |
| test1            |
+------------------+
5 rows in set (0.00 sec)
mysql> alter table test1 change age birthday date not null;      # 修改数据表字段,含字段名和字段属性
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test1;
+----------+-------------------+------+-----+---------+----------------+
| Field    | Type              | Null | Key | Default | Extra          |
+----------+-------------------+------+-----+---------+----------------+
| id       | int(100) unsigned | NO   | PRI | NULL    | auto_increment |
| birthday | date              | NO   |     | NULL    |                |
+----------+-------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
 
mysql> alter table test1 modify birthday datetime;            # 修改字段属性
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test1;
+----------+-------------------+------+-----+---------+----------------+
| Field    | Type              | Null | Key | Default | Extra          |
+----------+-------------------+------+-----+---------+----------------+
| id       | int(100) unsigned | NO   | PRI | NULL    | auto_increment |
| birthday | datetime          | YES  |     | NULL    |                |
+----------+-------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)


mysql> alter table test1 drop birthday;                 # 删除字段
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
 

mysql> desc test1;
+-------+-------------------+------+-----+---------+----------------+
| Field | Type              | Null | Key | Default | Extra          |
+-------+-------------------+------+-----+---------+----------------+
| id    | int(100) unsigned | NO   | PRI | NULL    | auto_increment |
+-------+-------------------+------+-----+---------+----------------+
1 row in set (0.00 sec)


mysql> drop table test1;                             # 删除数据表
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| class            |
| graduate         |
| student          |
| teacher          |
+------------------+
4 rows in set (0.00 sec)

 

 

 

四、数据层面

 

  1、常用命令

mysql>insert into 表名 [字段名1,字段名2,....]  values
(值1,值2,.......),
(值1,值2,.......),
(值1,值2,.......)
........
;     # 如使用字段,则添加的每条记录的值必须与字段一一对应;如不指定字段,则属于按位置添加数据,每条记录的值须同数据表中所有字段一一对应

mysql>update 表名 set 
字段名1=值1,
字段名2=值2,
....  
[where 条件];    # 更新/更改数据:[条件限制,如不加条件,则默认所有记录的该字段均修改]

mysql>alert table 表1名 add foreign key(字段1名) references 表2名(字段2名);    # 为表1的字段1添加外键,连接表2的字段2,外键可选约束条件作为参数

mysql>alert table 表名 drop foreign key 字段名;    # 删除外键

mysql>create [unique | fulltext | spatial] index 索引名 on 表名(字段名[asc | desc]);    # 创建索引,索引会提高查找速度,但是会增加物理开销

mysql>drop index 索引名 on 表名;    # 删除索引

mysql>delete from 表名 [where 条件];# 删除表中数据[条件限制,如无条件,则清空数据表]

mysql>truncate table 表名;    # 清空数据表

mysql>select 字段名1,字段名2,...... from 表名;    # 查看表中数据,如查看所有数据使用  select * from 表名 ,这是数据查看的基本形式,后面的例子中会有拓展

 

 

  2、举例说明

 

mysql> alter table student add foreign key(class) references class(cid);     # 添加外键,如果表中有数据,则会添加失败

Query OK, 0 rows affected (0.03 sec)

Records: 0  Duplicates: 0  Warnings: 0

 

mysql> create index sid_index on student(sid);          # 创建索引

Query OK, 0 rows affected (0.02 sec)

Records: 0  Duplicates: 0  Warnings: 0

 

mysql> show create table student;

+-----------------+

| Table   | Create Table                                                                                                                        

+-----------------+

| student | CREATE TABLE `student` (

  `sid` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(10) NOT NULL,

  `gender` char(1) NOT NULL,

  `age` int(3) unsigned NOT NULL,

  `birthday` datetime NOT NULL,

  `phone` varchar(11) DEFAULT NULL,

  `class` int(10) unsigned NOT NULL,

  `grade` int(10) unsigned NOT NULL,

  PRIMARY KEY (`sid`),

  KEY `sid_index` (`sid`),    # 索引在这里

  KEY `class` (`class`),

  CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class`) REFERENCES `class` (`cid`)            # 这里显示外键的名称:student_ibfk_1,删除的时候要用这个字段

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 |

+-----------+

1 row in set (0.00 sec)

 

mysql> insert into class values           # 添加数据,先添加class表数据,注意:如果存在外键,则外键所指向的数据表不能为空,否则无法添加数据

    -> (1,'10级1班',1,45,'东教学楼1层'),

    -> (2,'09级1班',2,48,'东教学楼2层'),

    -> (3,'09级2班',2,50,'东教学楼2层'),

    -> (4,'08级1班',3,51,'东教学楼3层'),

    -> (5,'08级2班',4,49,'东教学楼3层');

Query OK, 5 rows affected (0.01 sec)

Records: 5  Duplicates: 0  Warnings: 0

 

mysql> insert into student values             # 再添加student表数据

    -> (1,'李杰','男',21,'1990-1-2',13012345678,1,1),

    -> (2,'王倩','女',22,'1989-4-21',15212345678,1,1),

    -> (3,'张大力','男',20,'1991-2-12',NULL,2,2),

    -> (4,'王晓红','女',20,'1991-7-5',18900001111,2,2),

    -> (5,'周大宝','男',21,'1990-12-23',NULL,3,2),

    -> (6,'王志刚','男',22,'1989-10-10',NULL,3,2),

    -> (7,'刘明','男',21,'1990-11-30',15912345678,4,3),

    -> (8,'郭芙蓉','女',20,'1991-6-17',NULL,4,3),

    -> (9,'李飞','男',23,'1988-12-3',13212345678,5,3),

    -> (10,'苏洁','女',25,'1986-5-16',NULL,5,3);

Query OK, 10 rows affected (0.00 sec)

Records: 10  Duplicates: 0  Warnings: 0

 

mysql> select * from student;                #  查询student 中所有数据

+-----+-----------+--------+-----+---------------------+-------------+-------+-------+

| sid | name      | gender | age | birthday            | phone       | class | grade |

+-----+-----------+--------+-----+---------------------+-------------+-------+-------+

|   1 | 李杰      | 男     |  21 | 1990-01-02 00:00:00 | 13012345678 |     1 |     1 |

|   2 | 王倩      | 女     |  22 | 1989-04-21 00:00:00 | 15212345678 |     1 |     1 |

|   3 | 张大力    | 男     |  20 | 1991-02-12 00:00:00 | NULL        |     2 |     2 |

|   4 | 王晓红    | 女     |  20 | 1991-07-05 00:00:00 | 18900001111 |     2 |     2 |

|   5 | 周大宝    | 男     |  21 | 1990-12-23 00:00:00 | NULL        |     3 |     2 |

|   6 | 王志刚    | 男     |  22 | 1989-10-10 00:00:00 | NULL        |     3 |     2 |

|   7 | 刘明      | 男     |  21 | 1990-11-30 00:00:00 | 15912345678 |     4 |     3 |

|   8 | 郭芙蓉    | 女     |  20 | 1991-06-17 00:00:00 | NULL        |     4 |     3 |

|   9 | 李飞      | 男     |  23 | 1988-12-03 00:00:00 | 13212345678 |     5 |     3 |

|  10 | 苏洁      | 女     |  25 | 1986-05-16 00:00:00 | NULL        |     5 |     3 |

+-----+-----------+--------+-----+---------------------+-------------+-------+-------+

10 rows in set (0.00 sec)

 

mysql> select sid,name,gender,age as '年龄' from student where class=3 and grade=2;   

# 条件查询,查询class=3 & grade=2的学生sid、name、gender、age,并将age重命名

+-----+-----------+--------+--------+

| sid | name      | gender | 年龄   |

+-----+-----------+--------+--------+

|   5 | 周大宝    | 男     |     21 |

|   6 | 王志刚    | 男     |     22 |

+-----+-----------+--------+--------+

2 rows in set (0.01 sec)

 

 

# 查询王倩同学的上课地点,显示姓名、性别及地点

mysql> select s.name,s.gender,c.location         # 使用数据表简称获取响应的字段,如果该字段在所有使用的数据表中唯一,则可以不带表名,直接写字段

    -> from student as s,class as c            # 多表查询时,通常将每个表重命名为简称

    -> where s.class=c.cid                # 多表查询的连接依据

    -> and s.name='王倩';                  # 附加查询条件

+--------+--------+------------------+

| name   | gender | location         |

+--------+--------+------------------+

| 王倩   | 女     | 东教学楼1层      |

+--------+--------+------------------+

1 row in set (0.01 sec)

 

# 查看2年级的男女数量

mysql> select gender,count(*) from student where grade=2 group by gender;  # 使用group by实现分组 count()是聚合函数

+--------+----------+

| gender | count(*) |

+--------+----------+

| 女     |        1 |

| 男     |        3 |

+--------+----------+

2 rows in set (0.01 sec)

 

mysql> select gender,count(*) from student where grade=2 group by gender having gender='男'; 

# group by 后面可以加条件语句having,having可以使用聚合函数,而where是不可以的

 

+--------+----------+

| gender | count(*) |

+--------+----------+

| 男     |        3 |

+--------+----------+

1 row in set (0.01 sec)

 

 

 

# 查询人数大于2的年级中,显示年级、人数、各年级的学生平均年龄、男生数量,并安装平均年龄倒序显示

mysql> select grade,count(*),avg(age),count(gender='男')

    -> from student

    -> group by grade

    -> having count(*)>2 and count(gender='男')

    -> order by avg(age) desc;

+-------+----------+----------+---------------------+

| grade | count(*) | avg(age) | count(gender='男')  |

+-------+----------+----------+---------------------+

|     3 |        4 |  22.2500 |                   4 |

|     2 |        4 |  20.7500 |                   4 |

+-------+----------+----------+---------------------+

2 rows in set (0.00 sec)

 

 

 

 

 

 

 

一个常用的查询结构:

 

查询语句                                                     执行顺序

select [distinct] * | 字段1,字段2,..| 聚合函数               ⑤

from 表1 as a,表2 as b .....               ①
join on a.id=b.id .......                  ②

where 字段|isfull [= > < is not in like between and or ]  值 (子查询).....      ③

group by 字段                  ④

having  条件  [聚合函数]order by 字段 | [聚合函数]   [asc | desc]    ⑦

limit [offset] 数量;          ⑧


                                    ⑨  展示结果

 

 

 

 

 

 

参考资料:《MySQL数据库入门》

 

 

posted @ 2019-03-21 16:02  问道编程  阅读(416)  评论(1编辑  收藏  举报