标题纯属开玩笑,这里主要是为了系统的梳理一下MySQL整个的操作流程。不会往深里讲。
图形化界面也在用着,不过还是系统的补一下常用的指令操作。
针对环境
Ver 8.42 Distrib 5.7.21, for macos10.13 on x86_64
安装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');
好的 我们可以开始建库建表啥的了
语句分号;
不能省!
create database XX(库名) ;
创建数据库drop database XX(库名) ;
删除数据库要具体操作表的话,我们需要进入数据库 use 库名;
然后通过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;
命令 来看表的信息
或者用 show create table table_name
这里主要解释一下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') ;
字符串单双引号都一样
但是我们要插入很多条数据,这样一条一条就太慢了
我们可以这样
insert into test1(name) values ('cat'),('dog'),('lamian');
select * from test1;
DQL过于博大精深,这里我们不做展开。
Delete from Tablename where 条件
Truncate table Tablename
Drop table Tablename
… Over
参考文章
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 开始。