开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18 天,点击查看活动详情
前言
好多人认为前端不用学mysql。
确实呀,前端用到mysql的时候很少很少,就算学了,可能过一段时间也就忘了,毕竟用的不多。没必要把精力花在这上面。
直到有一次面试,那是一个三面,问的是一些冷门的问题,也就是前端不怎么深入研究的问题,其中就问到了mysql,然后创建表,并合并表。这这,我有点措手不及呀。没出意外,三面挂了。
作为一个前端?为什么要学习mysql
如果我们学习一个东西,如果不清楚为什么学,那么学习就是一件很被动的事情。
- 为了面试:很实际的一个问题,因为我们面试可能会遇到考察mysql
- 为了全栈:当时那个三面的面试官狠狠的说了我一句,'你都工作5年了,连mysql都不会'。是呀,都工作5年了,基本的mysql总应该会把
- 为了以后的发展:你们觉得一个前端p6他会不会mysql呢?肯定会呀。我们得向大佬看齐呀。不要局限于自己的思维,要想想大佬会怎么去想问题。
安装mysql
小白浅谈如何学习SQL系列(一) : (Mac版) SQL相关软件安装
配置mysql全局变量
1、第一次安装mysql 需要配置全局环境
2、command +空格 打开查找快捷栏
3、输入terminal 回车 打开终端
4、vi ~/.zshrc 不存在就新建
5、然后输入 export PATH=${PATH}:/usr/local/mysql/bin
6、保存后 source ~/.zshrc
链接mysql
链接本地mysql
格式: mysql -h 主机地址 -u用户名 -p用户密码
mysql -uroot -pmysql;
连接到远程主机上的 mysql
mysql -h 127.0.0.1 -uroot -pmysql;
退出数据库
exit (回车)
修改数据库密码
修改密码需要使用mysqladmin命令
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、给root加个密码123
mysqladmin -u root -password 123
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、再将root的密码改为345。
mysqladmin -u root -p ab12 password 345
(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
3、命令行修改root密码:
mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’;
mysql> FLUSH PRIVILEGES;
4、显示当前的user:
mysql> SELECT USER();
数据类型
1.数字型
1.1整数型
tinyint: 占用一个字节,一共能表示256个数
有符号:-128 ~ 127
无符号:0~255
int:占用4个字节
有符号:-21亿 ~ 21亿
无字符:0 ~ 42亿
1.2小数型
浮点数:
float(M,D):单精度浮点数
double(M,D):双精度浮点数
定点数:
decimal(M,D):数据不会丢失的小数类型,常用于记录货币
2.文本型
char(M):定长字符,M表示最大的字符数.优势为运算速度快.常用在255个字符内的固定长度的字符.如:身份证,电话号码等.varchar(M):变长字符,M表示最大的字符数.优势为节省空间.常用在255个字符以内,长度不确定的字符.text:常用在256个字符以上的文本中
3.日期时间
-
datetime:固定的日期时间 -
timestamp:时间戳:当新增记录或更新记录时自动更新为当前系统时间,用于记录最后一次修改的时间或新插入记录的时间
4.字段属性
not null:设置该字段的值不能为空,不写就是默认可以为空default默认值:设置一个默认值,没有数据传入就是使用默认值.有数据传入则使用传入的值comment:备注用汉字备注字段,方便后期维护unique key:唯一值该字段的值不能重复,但可以为空primary key主键:
用于唯一标识一条记录
一个表最能只能有一个主键
不能为空
不能重复auto_increment自动增长:在新插入记录时,自动在本字段最大值的基础上加1,条件本字段的类型必须为整数型.常与主键一起使用,但不是必须与主键一起使用.
数据库的增删改查
1.查询数据库
#查询所有数据库
show databases;
2.创建数据库
#创建数据库的语法
create database `库名` charset=utf8;
// create database admin charset=utf8;
此时mysql会返回
Query OK, 1 row affected (0.03 sec)
此时mysql返回
+--------------------+
| Database |
+--------------------+
| information_schema |
| crawl |
| mysql |
| performance_schema |
| stock |
| sys |
+--------------------+
6 rows in set (0.07 sec)
3.修改数据库
#修改数据库(仅能修改选项,也就是字符集这些)
alter database `库名` [新选项];
4.删除数据库
#删除数据库(语法很简单,但后果很严重.一般你也没有权限,哈哈.)
drop database `库名`;
表的增删改查
1.创建表
#创建表前,先指定数据库
use `指定库名`;
#创建表的
create table `表名`(
`字段1` 字段1类型 字段1属性,
...
`字段N` 字段N类型 字段N属性);[选项]
其中的选项主要包括三大类:
- 字符集 charset=utf8 / GBK …
- 数据引擎 engine=innodb / mysiam
- 备注 comment='‘备注内容''
其它的字段类型和字段属性,后面有详细写到.
2.查询表
#查询所有表
show tables;
#条件查询
show tables like '%-';
#查询表结构
desc `表名`;
3.修改表
#修改表选项
alter table `表名` [新选项];
#修改表名
rename table `旧表命` to `新表名`;
#修改表内的字段
alter table `表名` change `旧字段名` `新字段名` 新字段类型;
#添加新字段到字段末尾
alter table `表名` add `新字段名` 类型 属性;
#添加字段到对应字段后
alter table `表名` add `新字段名` 类型 属性 after `对应字段`
#添加字段到最前面
alter table `表名` add `新字段名` 类型 属性 first;
例子:
alter table articles modify title varchar(255) CHARACTER SET utf8mb4;
注意不要加not null
4.删除表
#如果表存在,则删除表,否则报错
drop table if exists `表名`;
记录的增删改查
1. 查询记录(最常用)
#查询语法
select [选型] 字段列表 as 别名 from `表名` where 条件表达式;
# 查询数量
select count(*) from articles where tag_id=1;
2. 插入记录
#插入记录
insert into `表名`(`字段1`,...`字段`) values('值1',...,'值N');
#当一次传入所有值时,可以省不写字段
insert into `表名` values('值1',...,'值N');
#当需一次传入多条记录时
insert into `表名`(`字段1`,...`字段`) values
('值1',...,'值N'),
('值1',...,'值N'),
...,
('值1',...,'值N');
#当需一次传入多条记录,且字段全传入时
insert into `student` values(值列表1),(值列表2),(值列表n);
1、条件表达式:
逻辑运算符:and or not
比较运算符:+ - * / < > = !=
2、选项:
all:查询所有,不写默认就是所有
distinct:去重.重复指查询后的数据里,记录的所有字段全部相同,才认定为重复.
as:别名.给查询后的字段设置一个别名,方便查阅.
常见的聚合函数:count(),Max(),Min(),Sum(),avg()
3、连表查询 join
1.内连接 inner join
#将参与连接的两个表中符合连接条件的记录查询出来,不符合的过滤掉.
select * form `表1` inner join `表2` on 连接条件;
2.左外连接 left Join
#将参与连接的左表中即使不能匹配连接条件的记录也会查询出来,右表不符合的过滤掉
select * from `表1` left join `表2` on 连接条件;
3.右外连接 right join
#将参与连接的右表中即使不能匹配连接条件的记录也会查询出来,左表不符合的过滤掉
select * from `表1` right join `表2` on 连接条件;
3. 修改记录
#语法
update `表名` set `字段`='新值' where 条件表达式;
4. 删除记录
#语法
delete from `表名` where 条件表达式;
如何记忆
你看这个数据库这么多东西,这么多单词,时间长了,很容易忘记,那怎么才能记住呢?
-
show,create,alter,drop记忆单词s card(卡片) -
select,insert,update,delete记忆单词sudi(苏堤) -
int,float,varchar,datetime,timestamp记忆点fit div(适配div) -
not null,default,comment,primary key,auto_increment记忆单词pandic(恐慌)