MySQL使用教程:数据库、表操作

目录

  • [1. 免密码登录MySQL](#1. 免密码登录MySQL)
    • [1.1 免密码配置](#1.1 免密码配置)
    • [1.2 登录选项介绍](#1.2 登录选项介绍)
  • [2. MySQL基础配置:my.cnf](#2. MySQL基础配置:my.cnf)
  • [3. 开机自启动设置(可选设置)](#3. 开机自启动设置(可选设置))
  • [4. 查看存储引擎](#4. 查看存储引擎)
  • [5. 查看系统的编码规则和校验规则](#5. 查看系统的编码规则和校验规则)
  • [6. 数据库的操作](#6. 数据库的操作)
    • [6.1 查看数据库](#6.1 查看数据库)
    • [6.2 创建数据库 create database](#6.2 创建数据库 create database)
    • [6.3 删除数据库 drop database](#6.3 删除数据库 drop database)
    • [6.4 使用数据库 use](#6.4 使用数据库 use)
    • [6.5 修改数据库 alter database](#6.5 修改数据库 alter database)
  • [7. 表的操作](#7. 表的操作)
    • [7.1 创建表 create table](#7.1 创建表 create table)
    • [7.2 查看表结构 desc](#7.2 查看表结构 desc)
    • [7.3 修改表 alter table](#7.3 修改表 alter table)
      • [7.3.1 修改表名称 rename](#7.3.1 修改表名称 rename)
      • [7.3.2 添加字段(列)add](#7.3.2 添加字段(列)add)
      • [7.3.3 修改字段属性 modify](#7.3.3 修改字段属性 modify)
      • [7.3.4 修改字段名称 change](#7.3.4 修改字段名称 change)
      • [7.3.5 删除字段(列) drop](#7.3.5 删除字段(列) drop)
    • [7.3 删除表 drop table](#7.3 删除表 drop table)

1. 免密码登录MySQL

对于新人来说安装好的MySQL,登录是非常头疼的,因此在这里先来设置个免密码操作,后续会将登录设置,设置回来。

接下来进入正题:

1.1 免密码配置

首先免密码登录要直接对MySQL的配置文件进行修改,跳过密码认证环节,操作如下:

  • 先用 vim 打开 更目录下 etc 中的 my.cnf文件
bash 复制代码
vim /etc/my.cnf
  • 接下来在27行的下一行加上这么一行代码:
bash 复制代码
skip-grant-tables

输入:wq之后保存并且退出。

注意一定要将配置内容写对,否则无法生效。

  • 将MySQL服务(mysqld)重启,重启方式如下:
  • 方法一:终端输入两条指令,先将MySQL服务先停止,然后再启动
    systemctl stop mysqld
    systemctl start mysqld
  • 方法二:直接重启MySQL服务
    systemctl restart mysqld

1.2 登录选项介绍

接下来就是登录mysql了:

bash 复制代码
mysql -uroot -p   //这里使用的是root登录
  • -u选项的后面是登录MySQL用户名称,之间是否带空格影响都不大。
  • -p 选项表示使用密码登录

输入上述登录指令后,终端还是要你输入密码,此时只需要直接回车即可:

其他选项介绍:

  • -h 选项表示要指定连接的主机地址
bash 复制代码
mysql -h 127.0.0.1  -u root -p    //127.0.0.1表示本地环回地址
  • -G 选项表示访问特定主机的特定端口号
bash 复制代码
mysql -G 3306 -u root -p         //访问端口号为3306

上面提到的选项,在登录时可以不加,会有默认值。

例如:不加 -h 选项默认连接本地主机, 不加 -G 表示默认使用配置文件的端口号,配置文件会在接下来讲到。

2. MySQL基础配置:my.cnf

安装好的MySQL在使用前一些默认值是有一些问题的,在使用前我们需要将MySQL配置文件进行修改一下。

  • 用 vim 打开 etc 下的 my.cnf 文件:
bash 复制代码
vim /etc/my.cnf
  1. 绑定端口号:3306,这个是MySQL默认端口号
    在光标位置,加入这么一行代码:port=3306
  2. 配置编码格式:utf8
    在光标位置,加入这么一行代码:character-set-server=utf8
  3. 设置存储引擎:innodb
    在光标位置,加入这么一行代码:default-storage-engine=innodb

配置好后重启MySQL服务即可,重启方式上面提到过这里不再赘述。

3. 开机自启动设置(可选设置)

终端输入两条指令:

bash 复制代码
systemctl enable mysqld
systemctl daemon-reload

提示:在MySql中每个语句写完后都需要带上分号。

4. 查看存储引擎

bash 复制代码
show engines;

5. 查看系统的编码规则和校验规则

  1. 查看编码规则:
bash 复制代码
show chaset;
  1. 查看校验规则:
c 复制代码
show collation;

6. 数据库的操作

6.1 查看数据库

bash 复制代码
show databases;
  • 查看当前处于哪个数据库位置
bash 复制代码
select database();
  • 查看创建数据库时的细节
bash 复制代码
show create database 数据库名称;


/*!40100 DEFAULT CHARACTER SET gbk */ 这串代码大致意思为:

  1. !40100:如果当前数据库版本大于 40100 那么就执行后边代码。
  2. CHARACTER SET gbk:数据库创建时使用的编码规则为 gbk。

6.2 创建数据库 create database

  • 在Linux下,创建一个数据库实际上就是在 /var/lib/mysql 目录中创建了一个目录
  1. 简单创建数据库
bash 复制代码
create database 数据库名称;
  1. 防止重复创建数据库
bash 复制代码
create database if not exists 数据库名称;

表示当前数据库如果不存在,那么就会创建该数据库;否则不会创建。(带上该选项也是为了安全考虑,防止重复创建数据库造成数据库内容丢失)

  1. 创建数据库时指定编码集和校验集
  • 数据库编码集:未来数据库存储的编码集
  • 数据库校验集:支持数据库进行字段比较使用的编码,本质也是一种读取数据库中数据的采用的编码格式

数据库编码集和校验集的设置,是为了数据库无论对数据做任何操作时,都必须保证编码是一致的。

  • 指定 编码集 创建数据库

方法一:

bash 复制代码
create database student charset=utf8; //指定 utf8 为编码集

方法二:

bash 复制代码
create database student character set utf8; //指定 utf8 为编码集
  • 指定 编码集 和 校验集 创建数据库
bash 复制代码
create database student charset=utf8 collate utf8_general_ci; //指定 utf8 为编码集,utf8为校验集(不区分大小写)
c 复制代码
create database student charset=utf8 collate utf8_bin; //指定 utf8 为编码集,utf8为校验集(区分大小写)

6.3 删除数据库 drop database

  • 在Linux下,删除数据库相当于在/var/lib/mysql 删除目录操作
bash 复制代码
drop database 数据库名称;


不建议随随便便删除数据库,因为删除数据库对应的级联、数据表的内容会被全部删除!!!

6.4 使用数据库 use

bash 复制代码
use 数据库名称;

这里输入 use 操作好比在 Linux 文件系统中 cd 进入一个目录下操作类似:

6.5 修改数据库 alter database

  • 修改数据库的 编码集 和 校验集
bash 复制代码
alter database 数据库名 charset=编码 collate 校验集;

将数据库的编码集设置为 gbk ,校验集设置为 gbk_chinese_ci。

7. 表的操作

7.1 创建表 create table

  • Linux下,在数据库内部创建表,实际上就是在当前目录(数据库)下创建一个文件(数据库表)

语法

bash 复制代码
create table if not exists 表名 (
	filed1 datatype comment 描述内容,
	filed2 datatype comment 描述内容,
	filed3 datatype comment 描述内容,
	... 
)charset=字符集 collate=校验规则 engine=存储引擎; #注意最后加分号
  1. if not exists 表示该表存在时不会创建,不存在才创建
  2. filed 表示列名
  3. datatype 表示表的列的类型
  4. comment 表示对字段内容进行描述

注意:字符集和校验集在没有指定时,会默认使用 my.cnf 配置文件里设置的。

创建表时,使用不同的存储引擎会在对应数据库目录下创建不同的表结构

举个例子:

  1. 首先在mysql中创建一个 student 学生表,然后进到 /var/lib/mysql/ 路径(需要获得权限),此时可以看到刚刚创建的 student 数据库:


    进入 student 目录:

  2. 此时在 mysql 中创建分别使用不同的存储引擎创建表:

    第一张表使用 MyIsam 存储引擎

    查看对应 student 目录下内容,对应 stu1 出现了 .MYD.MYI(表示这两个文件都是 MyIsam 存储引擎创建的)

第二张表使用 InnoDB 存储引擎

查看对应 student 目录下内容,对应 stu2 出现了只有一个 .ibd(.idb 表示使用InnoDB存储引擎创建的文件)

7.2 查看表结构 desc

  • 表结构
bash 复制代码
desc dbases;

desc 表示单词(描述)的前四个字母

  • 查阅创建表时的详细信息
bash 复制代码
show create table 表名称 \G;

\G格式化显示,过滤分隔符。

7.3 修改表 alter table

7.3.1 修改表名称 rename

bash 复制代码
alter table 表名称 rename 新表名称

现在有这样的一张表:

将表名称修改为 student :

7.3.2 添加字段(列)add

bash 复制代码
alter table 表名称 add 字段名 字段类型(大小) comment '字段描述' after 指定列的所在位置;

这里 comment 和 after 不是必须设置,不加 after 创建的字段会生成到表的最后位置

举个例子,表中内容如下:

此时增加一个出生年月日的字段,要求加到年龄字段的后面

新增列内容是不存在的,所以显示NULL

7.3.3 修改字段属性 modify

bash 复制代码
alter table 表名称 modify 字段属性(大小) comment '字段描述';

提示:修改字段属性不会对表中已有的数据进行修改。修改字段属性实际上是覆盖(将新的字段属性覆盖原有的字段属性)

修改字段属性前 student 表的信息如下:

student 表字段属性:

将 student 表中的name字段属性 varchar(20) 更改为 varchar(50),不加comment进行字段修饰

此时再来查看一下student表的信息,会发现 name 字段的描述不见了。

在修改字段属性时,建议将原来的描述字段的信息也加上,避免修改后字段属性覆盖了原来描述字段的内容

7.3.4 修改字段名称 change

bash 复制代码
alter table student change 字段名 新字段名 字段类型(大小) comment '字段描述';

修改字段名称时也时要将原有的字段描述带上

student 表:

将表中的 name字段修改成 xingming :

7.3.5 删除字段(列) drop

bash 复制代码
alter table 表名称 drop 字段名称;

student 表:

将 age 字段删除:

注意:删除一个表中的字段会将表中对应字段的所有内容都删除,在进行删除操作时要慎重!!!

7.3 删除表 drop table

bash 复制代码
drop table 表名;

示例:

删除 person表:

数据库是所有业务中最靠近底层的后端的,修改表字段操作往往也会影响到上层软件,对表中的内容修改也需要将上层软件代码进行修改。因此,对数据库的表进行修改或是删除时都要认真考虑,慎重!

相关推荐
叫我:松哥3 分钟前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
工作中的程序员10 分钟前
ES 索引或索引模板
大数据·数据库·elasticsearch
严格格13 分钟前
三范式,面试重点
数据库·面试·职场和发展
微刻时光30 分钟前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
单字叶39 分钟前
MySQL数据库
数据库·mysql
mqiqe43 分钟前
PostgreSQL 基础操作
数据库·postgresql·oracle
just-julie1 小时前
MySQL面试题——第一篇
数据库·mysql
趋势大仙1 小时前
SQLiteDatabase insert or replace数据不生效
android·数据库
丁总学Java1 小时前
如何使用 maxwell 同步到 redis?
数据库·redis·缓存
爱吃南瓜的北瓜1 小时前
Redis的Key的过期策略是怎样实现的?
数据库·redis·bootstrap