vip2-day22 MySQL 基础语句

MySQL 8 新特性

  • 数据字典:包含一个事务数据字典,用于储存有关数据库对象的信息。在之前的版本中,字典数据存储在元数据文件和非事务表中。
  • 原子数据定义语句:支持原子数据定义语言(DDL)。
    • DDL 语句包含动词 CREATE 和 DROP,在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE),为表加入索引等。
    • DDL 包含许多原数据库目录中获得数据有关的保留字。
    • DDL 也是动作查询的一部分。
  • 安全和账户管理:通过以下功能增强数据库的安全性,并在账户管理中实现更高的 DBA 灵活性。
    • 开始支持角色,角色可以看成是一些权限的集合,为用户赋予统一的角色,权限的修改直接通过角色来进行,无需为每个用户单独授权。管理员可以创建和删除角色。
    • 允许账户具有双密码,从而在多服务器系统中无缝地执行分阶段密码更改。无需停机。
    • 默认字符集从 latin1 更改为 utf8mb4。
    • 增强 JSON 功能。

MySQL 要点解析

特殊库解析:

  • mysql:系统自带核心数据库。存储用户账号、权限、存储过程、事件定义、帮助信息、时区信息及日志等。
  • information_schema:保存 MySQL 服务器维护的其它数据库信息。包含表、视图、触发器、列、索引等描述性信息,称为元数据。
  • performance_schema:存储 MySQL 服务器的运行状态。用来监控 MySQL 服务的各类指标,如:执行的语句,语句耗时,内存占用等。
  • sys:通过视图的形式把 information_schema 和 performance_schema 结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能。

data 目录文件解析:

  • 表结构:*.frm文件,使用二进制存储。
  • 表数据和索引:
    • 系统表空间:
      • 一般大小为 12M,会自动增容,文件名可自定义。
      • 5.6 版本之前的 myisam 引擎将表数据存储在系统表空间。
    • 独立表空间:
      • 5.6 版本之后的 innodb 引擎将表数据存储在独立表空间。
      • 文件名与表名相同,后缀为.ibd
    • 临时表空间
    • 通用表空间
      • auto.conf:系统启动时会在该文件中查找 UUID,并写入全局变量中,如果不存在,则会新生成生成 UUID ,并保存在其中。
  • SSL 登录认证: 8.0 版本新增,后缀为.pem

表空间设置:/etc/my.cnf

[server] 
# 0:使用系统表空间
# 1:使用独立表空间
innodb_file_per_table=0

UUID:如果数据库复制时发生故障,从会使用 UUID 来辨别 master 日志。

SQL 语句概述

  结构化查询语句(Structured Query Language),简称 SQL,是一种特殊目的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

常用基础语句

绝对路径:command [库名].[表名]
相对路径:use [库名]; command [表名];
,:用于分隔多个操作对象。
;:放在一条 sql 语句的末尾,表示语句结束。

查询

show

  • 查询现有库:> show databases;
  • 查询当前库的表:> show tables;
  • 查看库文件存储路径:> show variables like 'datadir';
  • 查询字符集:> show variables like 'character%';
  • 查看表空间设置:> show variables like 'innodb_file_per_table';
  • 查看现有表的创建信息:> show create table [表名] \G

select

功能:查询表数据。
格式:

# 查询当前库名
> select database();

# 查询当前版本号
> select version();

# 查询指定表内的数据
> select [] from [表名];

示例:

# 查询指定表内的所有字段数据
> select * from hero;

# 查询指定表内的指定字段数据
> select name,skill from hero;

desc

  • 查询表结构:> desc [表名];

explain

  • 查询表结构:> explain [表名];

help

  • 查看指定语句的帮助信息:> help [语句];

\G

  • 可以代替;,表示一条语句结束。
  • 查询结果以"行"的形式显示:> [查询语句] \G

增加

create

功能:创建表和库。
格式:

# 创建库
> create database [库名];

# 创建表
> create table [表名]([字段名] [数据类型]([约束]));

示例:

# 创建库
> create table students(name varchar(20));

# 创建表
> create table students1(name varchar(20), age int, id int);

insert

功能:插入表数据。
格式:

# 向指定表内插入数据
> insert into [表名] value([数据1],[数据2],[数据3]);

示例:

# 向指定表内插入一行数据
> insert into hero value(1,'张三丰',110,'太极');

# 向指定表内插入多行数据
> insert into hero value (2,'小龙女',22,'yunvsuxin'),(3,'杨过',19,'黯然销魂掌');

删除

drop

  • 删除库:> drop database [库名];
  • 删除表:> drop table [表名];
  • 当要删除的库存在时删除:> drop database if exists [库名];

delete

功能:删除表中的数据。
格式:

# 删除指定表与指定字段匹配的数据
> delete from [表名] where [字段]=[];

# 删除指定表指定字段为空的数据
> delete from [表名] where [字段] is null;

示例:

# 删除指定表与指定字段匹配的数据
> delete from hero where id=1;

# 删除指定表指定字段为空的数据
> delete from hero where skill is null;

更改

use

  • 切换数据库:> use [库名];

alter

格式:

# 修改表名
> alter table [原表名] rename [新表名];

# 修改字段数据类型
> alter table [表名] modify [字段] [数据类型]([约束]);

# 修改字段名和数据类型
> alter table [表名] change [原字段名] [新字段名] [数据类型]([约束]);

# 在指定表的字段尾添加新字段
> alter table [表名] add [字段] [数据类型]([约束]);

# 在指定表的字段首添加新字段
> alter table [表名] add [字段] [数据类型]([约束]) first;

# 在指定表的指定字段后方添加新字段
> alter table [表名] add [字段] [数据类型]([约束]) after [位置字段];

# 删除指定表的指定字段
> alter table [表名] drop [字段];

解析:

  • change:对列进行重命名并更改字段的数据类型。需给定旧列名、新列名、数据类型。
  • modify:修改字段的数据类型,无需重命名字段。

示例:

# 修改表名
> alter table students1 rename zhanshi;

# 修改字段数据类型
> alter table zhanshi modify name int(20);

# 修改字段名和数据类型
> alter table zhanshi change name stname varchar(20);

# 在指定表的字段尾添加新字段
> alter table zhanshi add hp int;

# 在指定表的字段首添加新字段
> alter table zhanshi add mp int first;

# 在指定表的指定字段后方添加新字段
> alter table zhanshi add address varchar(30) after age;

# 删除指定表的指定字段
> alter table zhanshi drop id;

update

功能:更改表数据。
格式:

# 更改指定表指定字段的数据
> update [表名] set [更改字段]=[更改值] where [匹配字段]=[匹配值]

示例:

> update hero set skill='玉女素心剑法' where id=2;

命令行参数

-e

功能: 在命令行执行 sql 语句。
格式:

$ mysql -e '[语句]' -u[用户名] -p[密码]

示例:

# 查看现有数据库
$ mysql -e 'show databases;' -uroot -pWahahaAyaya123!

# 查看数据库并将结果集导入文件
$ mysql -e 'show databases;' -uroot -pWahahaAyaya123! >> db.txt

-A

功能:禁止预读表信息,可以加快切换表的过程。
格式:

$ mysql -u[用户名] -p[密码] -A

示例:

$ mysql -uroot -pWahahaAyaya123! -A

保留字符失效

说明:

  • 库或表之类的名字定义时需要避免使用保留字符。
  • 使用单引号可以使保留字符失效,表明其只是个普通字符。
  • 使用单引号使其失效的保留字符,在引用时也需要添加单引号,避免产生歧义。

示例:

> create database 'student-new';
> create tabls 'create';

实例:数据库迁移

实例适用条件:数据库数据较少时。
步骤:

  1. 停止数据库服务:$ service mysql.server stop
  2. 拷贝数据库:$ cp -a /usr/local/mysql /usr/local/mysql_01
  3. 查看目录权限:$ ll /usr/local/
  4. 目录属主非 mysql 则需要授权:$ chown mysql:mysql -R /usr/local/mysql_01
  5. 编辑配置文件:$ vim /etc/my.cnf
# mysql 安装根目录
basedir = /usr/local/mysql_01

# 数据库文件所在位置
datadir = /usr/local/mysql_01/data
  1. 初始化:$ mysqld --initialize --user=mysql --basedir=/usr/local/mysql_01 --datadir=/usr/local/mysql_01/data
  2. 启动服务:$ service mysql.server start
  3. 登录数据库:$ mysql -pWahahaAyaya123!
  4. 查看库文件存储路径:$ show variables like 'datadir'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tp404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值