概念:
按照一定的数据结构来存储和管理数据的仓库
Mysql的客户端工具:
字符界面
mysql
图形界面
MySQL Workbench
第三方工具(Windows)
SQLyog
navicat
各文件的安装位置:
数据库相关文件(datadir目录)
/var/lib/mysql
可执行文件
/usr/bin
服务器-mysqld
/usr/sbin
启动/关闭Mysql服务器:
使用操作系统工具systemctl管理mysql服务
systemctl status mysqld
systemctl start mysqld
systemctl stop mysqld
systemctl restart mysqld
连接至Mysql服务器:
mysql -uroot -p
Enter password:(密码)
忘记root密码后的重置
设置mysql启动参数
[root@jayss bin]# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
重启mysqld
[root@jayss etc]# systemctl restart mysqld
登录mysql,不输入用户和密码直接回车
[root@jayss etc]# mysql
修改密码
mysql> flush privileges
mysql> alter user root@localhost identified by 'Root@1995';
还原启动参数
[root@jayss ~]# systemctl unset-environment MYSQLD_OPTS="--skip-grant-tables"
简单信息查询
查看MySQL版本
mysql> select version();
查看当前用户
mysql> select user();
查看当前数据库
mysql> select database();
查看当前连接的状态
mysql> status
查看当前时间
mysql> select now();
查看表结构
mysql> desc t;
执行SQL脚本文件:
[root@jayss ~]# mysql -u root -p jayss < t.sql
库级操作语句:
显示所有的库:show databases;
创建库:create databases db_name;
删除库:drop database db_name;
进入数据库:use db_name;
表级操作语句:
显示所有表:show tables;
创建表:create tble table_name;
显示创建表的信息:show create table table_name;
删除表:drop table table_name;
字段类型
数值类型:
数值类型 | 特性 |
---|---|
tinyint | 用一个字节存放整数(0,255) |
smallint | 两个字节(0,65535) |
mediumint | 三个字节(0,16777215) |
int | 四个字节(0,4294967295) |
bigint | 八个字节 |
float(m,n) | 单精度浮点型(四个字节) |
double(m,n) | 双精度浮点型,m总个数,d小数位(八字节) |
字符类型:
字符类型 | 特性 |
---|---|
char(size) | 定长字符串(0-255字节) |
varchar(size) | 变长字符串(0-65535字节) |
tinyblolb | 不超过255个字符串的二进制字符串(0-255字节) |
tinytext | 短文本字符串(0-255字节) |
bolob | 二进制形式的长文本数据( 0-65 535字节) |
text | 长文本数据(0-65 535字节) |
mediumblob | 二进制形式的中等长度文本数据(0-16 777 215字节) |
mediumtext | 中等长度文本数据( 0-16 777 215字节) |
longbolob | 二进制形式的极大文本数据(0-4 294 967 295字节) |
longext | 极大文本数据( 0-4 294 967 295字节) |
时间日期类型:
时间日期类型 | 特性 |
---|---|
date | 日期,格式:2019-01-27 |
time | 时间,格式:12::12:30 |
datetime | 时间日期,格式:2019-01-27 12:12:30 |
timestamp | 自动存储记录修改的时间 |
year | 存放年 |
约束条件:
约束是一种限制
通过对表中的数据做出限制来确保表中数据的完整性和唯一性
约束类型 | 关键字 | 特点 |
---|---|---|
默认 | default | 插入数据时,若无明确为字段赋值则自动赋予默认值 |
非空 | not null | 限制一个字段的值不能为空,insert的时候必须为该字段赋值 |
唯一 | unique key | 限制一个字段的值不重复,该字段的数据不能出现重复的 |
自增长 | auto_increment | 自动编号,和主键组合使用,一个表里面只能有一个自增长 |
主键 | primary key | 通常每张表都需要一个主键来体现唯一性,每张表里面只能有一个主键 |
外键 | foreign key | 保持数据的一致性,我有的你一定有, 你没有的, 我绝对没有 |
查询
select语基本结构:
select … 指定要查询的列名
from … 指定要查询的表名
where … 指定查询条件
group by … 指定要分组列
having … 指定过滤分组的条件
order by … 指定排序列
模糊查询:
1.任意多个字符:%
2.任意一个字符:_
常用聚合函数:
统计个数:count(column)
列出字段全部值:group_conact(column)
求和:sum(column)
平均值:avg(column)
最大值:max(column)
最小值:min(column)
简单查询:
只指定表名:select * from table_name;
指定列名:select ename,sal from table_name;
使用列别名:select ename as emp_name from table_name;
附加条件:select ename from table_name where sal>2000;
排序:select ename from table_name order by sal;
连接查询:
内连接:
1.无条件内连接:
Mysql> select * from tb1 [inner] join tb2
2.有条件内连接
Mysql> select * from tb1 inner join tb2
-> on tb1_id =tb2_id;
外连接:
1.左外连接:(以左表为基准)
mysql> select * from tb1 left join tb2
-> on tb1_id= tb2_id;
2.右外连接:(以右表为基准)
mysql> select * from tb1 right join tb2
-> on tb1_id= tb2_id;
操作:
插入数据:
指定字段插入:
insert into tb_name(字段) values(值);
全字段插入:
insert into tb_name values(值);
多行插入:
insert into tb_name(字段) values(值1),(值2)...;
修改数据:
修改所有数据:
update tb_name set value_1=value_2;
修改多个:
update tb_name set value1_=value_2,value_3=value_4;
修改满足条件的数据:
update tb_name set value_1=value_2 where id=1
删除数据:
删除表中所有的数据:
delete from tb_name;
删除表中满足条件的数据:
delete from tb_name where id1;
修改表结构:
修改表名:
alter table tb_name rename to new_name;
修改字段名:
alter table tb_name change name new_name 字段类型;
修改字段类型:
alter table tb_name modify 字段名 字段类型;
添加字段:
alter table tb_name add 字段名 类型;
删除字段:
alter table tb_name drop 字段名;
表关系:
一对一
一对多
多对多
用户管理
密码:
1.密码策略相关参数:
mysql> show variables like 'validate%';
2.查看密码策略制定参数:
mysql> show variables like 'validate_password_policy';
3.修改密码策略参数:(修改密码策略级别为0)
mysql> set global validate_password.policy=0;
mysql> select @@validate_password.policy;
用户:
1.内置用户:
'root'@'localhost'
'mysql.sys'@'localhost'
'mysql.session'@'localhost'
'mysql.infoschema'@'localhost'
2.创建用户
mysql> create user law identified by 'jayss'; #默认为jayss@'%'
mysql> create user tian@'%' identified by 'tian';
mysql> create user law@192.168.244.255 identified by 'jayss';
3.删除用户
mysql> drop user jayss;
4.锁住/解锁用户
mysql> alter user jayss account lock;
mysql> alter user jayss account unlock;
5.修改口令:
mysql> alter user jayss@'%' identified by 'jayssjayss';
权限层次:
关键字 | 权限层次 |
---|---|
global | 服务器全局生效的权限 |
database | 数据库生效的权限 |
table | 指定表生效的权限 |
column | 指定列生效的权限 |
routine | 存储过程、函数生效的权限 |
查询权限信息:
查询自己的权限:
mysql> show grants;
root帐号查询其他帐号:
mysql> show grants for user1@localhost;
mysql> show grants for jayss;
优化
index种类:B-Tree、R-Tree、hash
创建索引:
指定主键或附带not null的唯一约束
自动创建clustered index
创建普通索引
1.mysql> create table t(a int, b char(10), c char(10), index idx_b(b));
2.mysql> alter table t add index idx_a(a);
3.mysql> create index idx_c on t(c);
多列复合索引
mysql> create index idx_com on emp(empno, ename, sal);
删除索引:
1.mysql> drop index idx_a on t;
2.mysql> alter table t drop index idx_abc;
查看索引信息:
mysql> show index from t\G
欢迎技术交流
WeChat......