MySQL基本操作


一、MySQL的使用

如果通过命令行启动和停止MySQL数据库,一定要以管理员身份运行命令行cmd。

  否则,会出现错误。

 1、启动和停止MySQL服务

(1)通过Windows计算机管理方式

右击此电脑—管理—服务和应用程序—服务,启动或停止MySQL服务

 (2)通过命令行方式

  • 启动:net start mysql 
  • 停止:net stop mysql

一定要以管理员的身份打开cmd命令。

 2、登录和退出MySQL数据库

(1)使用命令行登录和退出

mysql -h localhost -P 3306 -u root -p1234 db_hr -e"select * from user;"

  • 最前面的mysql你可以理解成一个关键字或者理解成一个固定的命令,是固定写法,类似于java、jdk中的javac命令或java命令;
  • -h表示host,即主机的ip地址——127.0.0.1;
  • -P表示port,端口,mysql数据库的默认端口是3306,当然,你也可以自己修改端口号,我这里没改端口号(注意:这是大写的字母P);
  • -u表示user用户名,这里是root;
  • -p表示password密码1234(注意:这是小写的字母p);
  • db_hr:数据库名表示登录到哪一个数据库中;
  • -e参数后面可以直接加SQL语句。登录mysql服务器之后,立即执行这个SQL语句。-e后面不要有空格。

下面说说mysql这个命令的注意事项

大写的P表示端口号,小写的p表示密码

小写的p表示密码,-p和密码之间一定不能有空格,其他的像-u,-h,-P之类的,是可以有空格的,也可以没有空格。

如果是本机的话,主机ip和端口号可以不写(即主机ip和端口号可以省略),直接写成mysql -u root -p1234

如果是本机,但是端口号你改成了其他的端口号,不是默认的3306了,比如你把端口号改成了6688,那你就加上端口号,即mysql -P 6688 -u root -p1234

以下这3种语法都是正确的,我依次举例和截图演示:

我这里用的用户名是root,密码也是1234

语法1:mysql -h 主机ip地址 -P 端口号 -u 用户名 -p密码

-h和主机ip地址之间空格,-P和端口号之间空格,-u和用户名之间空格,-p和密码之间一定不能有空格

mysql -h localhost -P 3306 -u root -p1234

如果是本机的话,主机ip地址和端口号(是默认3306的情况下)-h localhost -P 3306可以省略不写,

mysql -u root -p1234

如果是本机,但是端口你之前改成了其他的,比如端口你改成了8801,不是默认的3306端口了,那么主机ip地址可以省略不写,但是要写上端口号,

mysql -P 8801 -u root -p1234

如果是远程主机的话,必须写-h 远程主机的ip,

mysql -h 192.168.117.66 -P 3306 -u root -p1234

如果远程主机的mysql数据库端口默认是3306,那端口号可以省略不写,但是远程主机的ip地址要写,

mysql -h 192.168.117.66 -u root -p1234 

如果远程主机的mysql数据库端口不是默认的3306,端口而被改成了比如6655,那远程主机ip地址和端口号都要写上,

mysql -h 192.168.117.66 -P 6655 -u root -p1234 

语法2:mysql -h主机 ip地址 -P端口号 -u用户名 -p密码

-h和主机ip地址之间空格,-P和端口号之间空格,-u和用户名之间空格,-p和密码之间一定不能有空格

 mysql -h192.168.117.66 -P3306 -uroot -p1234 

语法3:mysql -h主机ip地址 -P端口号 -u用户名 -p

最后一个-p,小写字母p后面不写密码

mysql -h 192.168.117.66 -P 3306 -u root -p

或者

mysql -h192.168.117.66 -P3306 -uroot -p

 注意:小写字母p后面不写密码,这样的话,密码就不会显示暴露出来了,输入密码的时候也是显示成****,进入数据库之后再输入密码。

退出登录,可以使用   quit  或者  exit   或者  \q   命令

  (2)通过MySQL自带的客户端,仅限于root用户。

 3、MySQL的相关命令 

List of all client commands:
Note that all text commands must be first on line and end with ';'

?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement. --清除当前输入的语句
connect   (\r) Reconnect to the server. Optional arguments are db and host. --重新连接,通常用于被踢出或异常断开后重新连接,SQL*plus下也有这样一个connect命令。
delimiter (\d) Set statement delimiter.--设置命令终止符,缺省为;,比如我们可以设定为/来表示语句结束
edit      (\e) Edit command with $EDITOR. --编辑缓冲区的上一条SQL语句到文件,缺省调用vi,文件会放在/tmp路径下
ego       (\G) Send command to MariaDB server, display result vertically. --控制结果显示为垂直显示
exit      (\q) Exit mysql. Same as quit. --退出mysql
go        (\g) Send command to MariaDB server. --发送命令到mysql服务
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout. --关闭页设置,打印到标准输出
notee     (\t) Don't write into outfile. --关闭输出到文件
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER. --设置pager方式,可以设置为调用more,less等等,主要是用于分页显示
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt. --改变mysql的提示符
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash. --自动补齐相关对象名字
source    (\.) Execute an SQL script file. Takes a file name as an argument. --执行脚本文件
status    (\s) Get status information from the server. --获得状态信息
system    (\!) Execute a system shell command. --执行系统命令
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile. --操作结果输出到文件
use       (\u) Use another database. Takes database name as argument. --切换数据库
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. --设置字符集
warnings  (\W) Show warnings after every statement. --打印警告信息
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
注意:上面的所有命令,扩号内的为快捷操作,即只需要输入“\”+ 字母即可执行。

 二、MySQL支持的基本数据类型

1、数值类型

MySQL 支持所有标准 SQL 数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC)、近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。

作为 SQL 标准的扩展,MySQL 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型大小范围(有符号)范围(无符号)用途
TINYINT 1 Bytes (-128,127) (0,255) 小整数值
SMALLINT 2 Bytes (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 Bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 Bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 Bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 Bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值
DOUBLE 8 Bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

2、字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

该节描述了这些类型如何工作以及如何在查询中使用这些类型。

类型大小用途
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

3、日期和时间类型 

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型大小
( bytes)
范围格式用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4

1970-01-01 00:00:00/2038

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS 混合日期和时间值,时间戳

三、数据库的基本操作

1、创建和查看数据库

 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下:

CREATE DATABASE 数据库名;

以下命令简单的演示了创建数据库的过程,数据名为db_hr:

mysql> create DATABASE db_hr;

使用 show命令来查看已创建的数据库,语法如下:

mysql> show DATABASE;

 另外,还可以使用 show命令来查看已创建的数据库信息,语法如下:

mysql> show CREATE DATABASE db_hr;

以上的执行结果显示数据库db_hr的创建信息,例如编码方式是utf8。

除了可以用默认的编码方式创建数据库外,还可以在创建数据库时指定编码方式, 

mysql> CREATE DATABASE db_hr2 CHARACTER SET gbk;

 可以看出数据库db_hr2的编码方式为gbk。 

2、使用数据库

在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库。

在 mysql> 提示窗口中可以很简单的选择特定的数据库。你可以使用SQL命令来选择指定的数据库。语法格式如下:

use 数据库名;

mysql> use db_hr;
Database changed

在出现Database changed提示时,证明已经切换到了数据库db_hr。

mysql数据库文件的真实的物理存储位置。

mysql> show global variables like "%datadir%";

3、修改数据库

 在 MySQL中,可以使用 ALTER DATABASE  语句来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为:

ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> |  [ DEFAULT ] COLLATE <校对规则名>}

 语法说明如下:

  • ALTER DATABASE 用于更改数据库的全局特性。这些特性存储在数据库目录的 db.opt 文件中。
  • 使用 ALTER DATABASE 需要获得数据库 ALTER 权限。
  • 数据库名称可以忽略,此时语句对应于默认数据库。
  • CHARACTER SET 子句用于更改默认的数据库字符集

例如,用alter命令将数据库 db_hr2 的指定字符集修改为 gb2312,默认校对规则修改为 gb2312_unicode_ci,输入 SQL 语句与执行结果如下所示:

mysql> ALTER DATABASE db_hr2 DEFAULT CHARACTER SET gb2312 DEFAULT COLLATE gb2312_chinese_ci;

4、删除数据库

当数据库不再使用时应该将其删除,以确保数据库存储空间中存放的是有效数据。

删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除。

在 MySQL 中,当需要删除已创建的数据库时,可以使用 DROP DATABASE 语句。其语法格式为:

DROP DATABASE [ IF EXISTS ] <数据库名>

语法说明如下:

  • <数据库名>:指定要删除的数据库名。
  • IF EXISTS:用于防止当数据库不存在时发生错误。
  • DROP DATABASE:删除数据库中的所有表格并同时删除数据库。使用此语句时要非常小心,以免错误删除。如果要使用 DROP DATABASE,需要获得数据库 DROP 权限。

注意:MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,系统数据库存放一些和数据库相关的信息,如果删除了这两个数据库,MySQL 将不能正常工作。

使用命令行工具将数据库db_hr2从数据库列表中删除,输入的 SQL 语句与执行结果如下所示:

mysql> DROP DATABASE db_hr2;

此时数据库db_hr2不存在。再次执行相同的命令,直接使用 DROP DATABASE db_hr2,系统会报错,如下所示:

 如果使用IF EXISTS从句,可以防止系统报此类错误,如下所示:

mysql> DROP DATABASE IF EXISTS db_hr2;

使用 DROP DATABASE 命令时要非常谨慎,在执行该命令后,MySQL 不会给出任何提示确认信息。

DROP DATABASE 删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复。

因此最好在删除数据库之前先将数据库进行备份。备份数据库的方法会在教程后面进行讲解。

四、表的基本操作

1、创建数据表

在创建数据库之后,接下来就要在数据库中创建数据表。所谓创建数据表,指的是在已经创建的数据库中建立新表。

创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。

创建MySQL数据表需要以下信息:

  • 表名
  • 表字段名
  • 定义每个表字段

 接下来我们介绍一下创建数据表的语法形式。 

可以使用 CREATE TABLE 语句创建表。其语法格式为:

CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];

其中,[表定义选项]的格式为:<列名1> <类型1> [,…] <列名n> <类型n>

CREATE TABLE 命令语法比较多,其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的。

这里首先描述一个简单的新建表的例子,然后重点介绍 CREATE TABLE 命令中的一些主要的语法知识点。

CREATE TABLE 语句的主要语法及使用说明如下:

  • CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。
  • <表名>:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 db_name。如果使用加引号的识别名,则应对数据库和表名称分别加引号。例如,'mydb'.'mytbl' 是合法的,但 'mydb.mytbl' 不合法。
  • <表定义选项>:表创建定义,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。
  • 默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。

提示:使用 CREATE TABLE 创建表时,必须指定以下信息:

  • 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。
  • 数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。

(1)在指定的数据库中创建表

数据表属于数据库,在创建数据表之前,应使用语句“USE <数据库>”指定操作在哪个数据库中进行,

如果没有选择数据库,就会抛出 No database selected 的错误。

创建员工表 tb_emp1,结构如下表所示。

字段名称数据类型备注
id INT(10) 员工编号
name VARCHAR(25) 员工名称
deptld INT(10) 所在部门编号
salary FLOAT 工资

如果之前创建过数据库,可以使用之前创建的数据库,如果没有,我们可以新建一个数据库,我们创建一个新的数据库db_test。

mysql> create DATABASE db_test;
Query OK, 1 row affected (0.00 sec)

选择创建表的数据库 db_test,创建 tb_emp1 数据表,输入的 SQL 语句和运行结果如下所示。

mysql> use db_test;
Database changed
mysql> CREATE TABLE tb_emp1 ( id INT(10), name VARCHAR(25), deptId INT(10), salary FLOAT );
Query OK, 0 rows affected (0.02 sec)

语句执行后,便创建了一个名称为 tb_emp1 的数据表,使用 SHOW TABLES;语句查看数据表是否创建成功,如下所示。

 可以看出,数据库中已经成功创建了tb_emp1表。 

2、查看数据表

我们可以通过SHOW CREATE TABLE语句来查看数据表,语法格式如下。

SHOW CREATE TABLE <表名>

查看前面创建的tb_emp1表。

mysql> SHOW CREATE TABLE tb_emp1;

 结果看起来有点乱,我们可以在查询语句后面加上参数“\G”进行格式化。

mysql> SHOW CREATE TABLE tb_emp1 \G;

 这样看起来比之前整齐多了。

另外,我们还可以使用DESCRIBE语句或简写形式DESC语句查看表中列的信息。语法格式如下。

DESCRIBE <表名>;

DESC <表名>;

mysql> DESCRIBE tb_emp1;

   

3、修改数据表

4、删除数据表

五、表中数据的基本操作