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] 数量;          ⑧
发布了53 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/mysql012/article/details/104110302