目录:


一、MySQL语法规则

SQL是一种结构化编程语言

  • 基础SQL指令通常是以行为单位

  • SQL指令需要语句结束符,默认是英文分号:;\g\G

    • \G:主要用于查询数据,立体展示结果
  • SQL指令类似自然语言

  • 编写的SQL中如果用到了关键字或者保留字,需要使用反引号````来包裹,让系统忽略

二、MySQL库操作

1、创建数据库

create database 数据库名 [数据库选项];

库选项:数据库的相关属性

  1. 字符集: charset/charaacter set 字符集 ,代表当前数据库下所有表存储的数据默认指定的字符集(默认为DBMS默认选项)
  2. 校对集: collate 校对集 ,字符集和校对规则是一对多的关系,每个字符集至少对应一个校对规则,MySQL 支持 39 种字符集的将近 200 种校对规则。
create database db_1 charset utf8Mb4 collate utf8mb4_general_ci;

数据库名字建议使用 _ 方法,而不是驼峰法命名

2、显示数据库

每当用户通过SQL指令创建一个数据库,那么系统就会产生一个对应的数据库文件夹
Linux下默认路径为: /var/lib/mysql (数据库配置文件: usr/share/mysql )

MySQL8以前每个数据库文件夹下都有一个opt文件,保存的都是数据库选项

基本语法

show databases;

information_schema —— 保存数据库所有的结构信息(表、库)
mysql —— 核心数据库:负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息
performance_schema —— 效率库:用于收集存放数据库的性能参数
sys —— 帮助DBA和开发人员解释性能模式收集的数据的对象

显示部分

show databases like '匹配模式';

匹配模式:
_ :匹配当前位置单个字符
% :匹配指定位置多个字符

-- 获取以my开头的全部数据库
show databases like 'my%';
-- 获取m开头,中间为任意字符,最后为database的数据库
show databases like 'm%database';

显示数据库的创建语句

show create database 数据库名称;

注:看到的指令并不是原始指令

3、使用数据库

use 数据库名;

4、修改数据库

指修改数据库的相关库选项
不能修改数据库名称(MySQL 5.5以后不能用 rename 指令)
如果想要修改数据库名字:新增 -> 迁移 -> 删除

数据库修改有两个部分:字符集、校对集

alter database [数据库名] [库选项];

数据库名称可以忽略,此时语句对应于默认数据库

-- 修改数据库字符集
alter database db_1 charset gbk;

-- 修改数据库校对集(必须同时改变字符集)
alter database db_1 charset gbk collate gbk_chinese_ci;

5、删除数据库

drop database 数据库名字;

三、SQL表(字段)操作

1、创建数据表

create table [数据库名.]表名 (
  字段名 字段类型,
  ...
  字段名 字段类型
)
  • 表与字段不分家,相辅相成

  • 表的创建需要指定存储的数据库

    • 明确指定数据库:数据库.表名

    • 先使用数据库:use 数据库名字

  • 字段至少需要指定名字、类型

  • 数据库表不限定字段数量

    • 每个字段间使用逗号,分隔

    • 最后一个字段不需要逗号

  • 表可以指定表选项(都有默认值)

    • 存储引擎:engine [=] 具体存储引擎

    • 字符集:[default] charset 具体字符集(继承数据库)

    • 校对集:collate(继承数据库)

create table db_1.t1(
  name varchar(50),
  age int,
  gender varchar(10)
);
create table t2(
  name varchar(50)
)engine Innodb charset utf8MB4;

存储引擎是指数据存储和管理的方式,MySQL中提供了多种存储引擎,一般使用默认存储引擎

  • InnoDB
    • 默认存储引擎
    • 支持事务处理和外键
    • 数据统一管理
  • MyIsam
    • 不支持事务和外键
    • 数据、表结构、索引独立管理
    • MySQL 5.6 以后不再维护

如果想创建一个与已有表一样的数据表,MySQL提供了一种便捷的复制模式

create table 表名 like 数据库名字.表名

2、显示数据表

在当前数据库下显示所有数据表

show tables;

查看指定数据库下所有数据表

show tables from db_1;

显示部分关联数据表——匹配

show tables like '%like';

显示具体数据表的创建指令

show create table t1;

显示数据表通常是为了验证数据表是否存在或者验证数据表的创建指令是否正确
在显示数据的时候可以使用不同的语句结束符

  • \g:与普通分号无区别

  • \G:纵向显示列数据

3、查看数据库

-- 以下三种一样效果
desc 表名;
describe 表名;
show columns from 表名;

4、更改数据表

修改表名

rename table 旧表名 to 新表名;

如果有时候想要跨库修改的话,需要使用数据库名.表名

修改表选项

alter table 表名 [库选项];

5、更改字段

  • 字段操作包含字段名字、类型和属性的操作

  • 字段操作还有位置处理

  • 字段操作通常是在表已经存在数据后进行

新增字段

在表创建好后往里面增加其他字段
字段的新增必须同时存在字段类型

alter table 表名 add [column] 字段名 字段类型 [字段属性] [字段位置]

给已经存在的t1表增加一个字段 age

alter table t1 add age int;

给已经存在的t1表增加一个字段 nickname

alter table t1 add column nickname varchar(10);

字段的追加默认是在所有字段之后

字段位置

指字段放到某个指定字段之后

  • 字段位置分为两种

    • 第一个字段:first
    • 某个字段后:after 已经存在字段名
  • 字段位置适用于追加字段、修改字段、更改字段名

alter table 表名 字段操作 字段位置;

为t1表增加一个 id 字段,放到最前面

alter table t1 add id int first;

在t1表 name 字段后增加一个身份证字段 card

alter table t1 add card varchar(18) after name;

更改字段名

alter table 表名 change 原字段名 新字段名 字段类型 [字段属性] [位置];

修改字段名 cardsfz

alter table t1 change card sfz varchar(18);
  • 字段名更改通常只是修改字段名字,但是也必须跟随类型
  • 字段名修改 change 其实也可以修改 字段类型属性位置,但是通常不使用(专人专事)

修改字段

alter table 表名 modify 字段名 字段类型 [字段属性] [位置];

修改身份证的类型为 char(18) 并且位置放到 id 后面

alter table t1 modify sfz char(18) after id;

6、删除字段

alter table 表名 drop 字段名;

删除字段会将数据也删除(不可逆)

四、SQL数据操作

1、新增数据

  • 新增数据是根据表的字段顺序和数据类型要求将数据存放到数据表中

  • 数据表中的数据以行(row)为存储单位,实际存储属于字段(field)存储数据

insert into 表名 [(字段列表)] values;

例如:

# 插入一段完整数据
insert into t3 values(1,'440111200011111101','Jim','Green');
# 插入部分数据
insert into t1 (id,sfz,name) values(2,'441000200011111211','Tom');

数据插入分为两种方式插入数据

  • 全字段插入

    • insert into 表名 values(值列表)

    • 值列表必须与字段列表顺序一致

    • 值列表的每个数据类型必须与字段类型一致

  • 部分字段插入

    • insert into 表名 (字段列表) values(值列表)

    • 字段列表可以顺序随意

    • 值列表必须与指定的字段列表顺序一致

    • 值列表元素的类型必须与字段列表的类型一致

2、查看数据

  • 查到的数据显示出来是一张二维表

  • 数据显示包含字段名和数据本身

  • 数据查看分两种方式

    • 查看全部字段:使用 * 代替所有字段

    • 查看部分字段:明确字段名,使用逗号分隔

select *|字段列表 from 表名 [where ...];

例如:

# 查看t1表中的所有数据
select * from t1;

# 查看t1表中的name和身份证信息;
select name, sfz from t1;

# 查看t1表中id值为2的信息;
select * from t1 where id = 2;

3、更新数据

update 表名 set 字段 = 新值[, 字段 = 新值] [where 条件筛选];

1、更新数据的针对记录的字段数据进行更新

2、更新通常是限定条件更新(一般不会更新全部)

例如

update t1 set name = 'Cat', sfz = '410101199804011523' where id = 1;

4、删除数据

删除数据:将数据从已有数据表中清除(针对的是记录record)

  • 删除数据是一种不可逆操作
  • 数据删除通常都是有条件删除
delete from 表名 [where 条件];

示例:

# 删除t1表中id为2的数据
delete from t1 where id = 2;