标题纯属开玩笑,这里主要是为了系统的梳理一下MySQL整个的操作流程。不会往深里讲。


图形化界面也在用着,不过还是系统的补一下常用的指令操作。
针对环境

Ver 8.42 Distrib 5.7.21, for macos10.13 on x86_64


  • 安装以及初始化MySQL
  • 建库建表啥的
  • 插入
  • 查询
  • 删库
  • 跳转区
  • deletetruncate



安装以及初始化MySQL

安装MySQL,记录下MySQL的分配给root的临时密码(后续登录以及修改密码要用)。Start MySQL Server。去~目录下修改.bash_profile文件,添加

PATH=$PATH:/usr/local/mysql/bin

然后source ~/.bash_profile
这样在terminal执行mysql命令就能直接关联到该目录了。
如果这种方式重启后mysql命令失效,以zsh为例,在~/.zshrc文件中加入 source ~/.bash_profile

另一种方式,通过添加alias来操作。

alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin

这时候如果重启终端的话alias会失效,想每次打开终端都可以直接使用的话需如下
1. 将设置的alias写到~/.bashrc里面
2. 将source ~/.bashrc 写到 ~/.bash_profile 里面

然后
可以开始登陆了

mysql -u 用户名 -p 用户名那里替换成root或者什么

之后输入临时密码进入,修改密码
1. SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');


好的 我们可以开始建库建表啥的了
语句分号;不能省!

建库建表啥的

首先show databases; 看看有啥库

mysql删库到跑路 mysql从删除到跑路_mysql

  1. create database XX(库名) ; 创建数据库
  2. drop database XX(库名) ; 删除数据库

要具体操作表的话,我们需要进入数据库 use 库名;

mysql删库到跑路 mysql从删除到跑路_mysql_02


然后通过show tables; 来查看该库底下的所有表。

通过use 库名;无需退出就可以切换使用的数据库。


接下来我们就简单的创建几张表。

由于建表的时候可能需要考虑主键外键索引引擎等关联属性。这里暂时不做展开,在这里以最基本的作为展示。


单个字段作为主键

create table test1 (
      id int(4) primary key auto_increment, 
      name char(20) character set utf8
      ) engine="MyISAM";

几点注意事项
1. 如果建表的时候不设置主键,默认第一个字段为主键,且自动not null
2. character set utf8 为设置name这个字段的字符集
3. auto_increment 必须和primary key搭配使用。不然会报错
4. 我这里环境的默认引擎是InnoDB,如果不设置就是默认引擎。

复合主键的

create table test1 (
      id int(4) auto_increment, 
      name char(20) character set utf8,
      primary key(id,name)
      ) engine="MyISAM";

带个时间戳的

ALTER TABLE test1 ADD COLUMN 
   time timestamp default current_timestamp;

注意点
1. default current_timestamp 分为两节看,default代表该字段有默认值,后面的则是其默认值,为当前的时间戳。
2. 如果建表完成后发现想 增删改 某些字段,则通过alter table 表名 具体命令 来完成。
比如


alter table test rename test1; --修改表名
alter table test add column name varchar(10); --添加表列
alter table test drop column name; --删除表列
alter table test modify address char(10) --修改表列类型
alter table test change address address char(40)
alter table test change column address address1 varchar(30)--修改表列名


建表完成啦,接下来我们为了操作数据,必须得插入数据了~

在这之前我们可以用desc table_name; 命令 来看表的信息

mysql删库到跑路 mysql从删除到跑路_mysql_03

或者用 show create table table_name

mysql删库到跑路 mysql从删除到跑路_mysql删库到跑路_04

这里主要解释一下desc命令中 Key/Extra这两个字段的含义。

Key: 在mysql中key和index是一样的意思,这个Key列可能会看到如下的值 PRI(主键)、MUL(普通的b-tree索引)、UNI(唯一索引)
Extra: 其他信息

在插入数据前,我们先delete了我们测试表已有的数据
这里提前先提一下关于 drop/delete/truncate 三个命令的区别。
1. drop是直接干掉表,整个表都不在了。
2. delete/truncate是删除表内的数据,表结构还是完好的。
3. delete/truncate的对比

从安全性来讲,我们建议使用 delete 操作。此篇博客之后的删除数据指的就是该操作。

delete from 表名 where 1=1;

插入

最基本的方式

insert into 表名 (col1,col2…) values (value1,value2…);

这种方式 前后参数 无论是 个数还是种类 都应该对应上。

针对我们test1表,就是如下形式

insert into test1(name) values ('yangfan') ; 字符串单双引号都一样

mysql删库到跑路 mysql从删除到跑路_mysql删库到跑路_05

但是我们要插入很多条数据,这样一条一条就太慢了
我们可以这样

insert into test1(name) values ('cat'),('dog'),('lamian');

这样就一下子添加了3条数据。

mysql删库到跑路 mysql从删除到跑路_mysql删库到跑路_06

查询

select * from test1;

DQL过于博大精深,这里我们不做展开。

删库

Delete from Tablename where 条件
Truncate table Tablename
Drop table Tablename  

… Over

参考文章

跳转区

delete/truncate

truncate table table_name 和delete from table_name 都是删除表中所有记录。

区别:
truncate能够快速清空一个表。并且重置auto_increment的值。而delete只能一行一行的删除。

但对于不同的类型存储引擎需要注意的地方是:

A 对于myisam

truncate会重置auto_increment的值为1。而delete后表仍然保持auto_increment。

B 对于innodb

truncate会重置auto_increment的值为1。delete后表仍然保持auto_increment。但是在做delete整个表之后重启MySQL的话,则重启后的auto_increment会被置为1。

也就是说,innodb的表本身是无法持久保存auto_increment。delete表之后auto_increment仍然保存在内存,但是重启后就丢失了,只能从1开始。实质上重启后的auto_increment会从 SELECT 1+MAX(ai_col) FROM t 开始。