目录
远程连接的方式
修改数据库uuid流程
数据库的概念
关系型数据库
非关系型数据库
关系型数据和非关系型数据库优缺点
mysql的数据类型
数据库的管理
sql中的名词
sql语言的分类
1.DDL
创建库和表的语句 create
删除库 drop databases
2.DML:
插入数据 insert
修改和更新 update
删除表的数据 delete
3.DQL
查询语句 select 、desc
查看指定行查询 limit
去重查询 distinct
where 语句 条件的筛选
模糊查询 like
修改表名和修改表结构 alter
修改表名
给表添加一个列
修改字段的数据类型
删除列
修改列的名称
约束条件
主键约束 primary key
创建主键
外键约束
非空约束 not null
唯一性约束 not null unique key
自增约束 auto_increment
主键和外键如何联动
删除外键(索引名称)
删除主键
复制表
复制表里的数据
直接复制表里的数据并创建新的表
临时表 temporary
清空表
面试题:如何删除表内数据,但是保留表和表结构
drop 删除表
delete from 表名
truncate table 表名
数据库的用户管理
创建用户 create
删除用户
设置用户权限 grant
查看用户权限
只给用户查的权限
给用户多个权限
取消权限 revoke
mysql本地免密登录
sql语句 数据库用来增删改查的语句
备份 数据库的数据进行备份
主从复制,读写分离 (高可用)
远程连接的方式
drop user root@'%';
flush privileges;
清空用户信息(如果下面设置不行清空再操作即可)
mysql -u root -p123456
#进入数据库交互界面
show databases;
create user 'root'@"%" identified by '123456';
#创建用户并设置密码
grant all privileges on *.* to 'root'@'%';
#赋予远程连接的权限
flush privileges;
#刷新生效
alter user 'root'@'%' identified with mysql_native_password by "123456";
#修改加密方式,可以进行远程连接
修改数据库uuid流程
启动MySQL服务
systemctl restart mysqld
进入数据库
mysql -u root -p123456
我们的数据库都一样,用户root,密码123456
#进入数据库操作
select uuid();
#使用uuid函数生成新的uuid,在下方框里会生成新的uuid,把它复制下来保存,就是很长的那一段
show variables like 'datadir';
#查看auto.cnf文件存放的目录,在下方框里显示
#这一步可以不用做,因为我们源码安装的MySQL
#我们的auto.cnf存放的目录都是/usr/local/mysql/data/
quit
#退出数据库
修改auto.cnf文件
vim /usr/local/mysql/data/auto.cnf
server-uuid=(填入刚才生成的新的uuid)
重启MySQL服务
systemctl restart mysqld
数据库uuid修改完成
数据库的概念
数据库:组织,存储,管理数据的仓库
数据库的管理系统(DBMS):实现对数据有效组织,管理和存取的系统软件
软件:mysql、oracle、sql-server、MariaDB、postgreSQL大象数据库
关系型数据库
关系型数据库:mysql 、oracle、postgreSQL
关系型数据存储的结构:是一张二维的表格,表里有行和列
列是对象,字段
行是对象的信息,字段的属性
行+列组成一张表
非关系型数据库
缓存型数据库:redis
索引型数据库:ES
文档型数据库:MongoDB
以键值对形式存储的结构:key value
关系型数据和非关系型数据库优缺点
关系型数据库的优点:表的结构清晰,逻辑容易整理,记录的数据比较完整
缺点:读写速度比较慢,并发量差,数据迁移比较麻烦
非关系型数据库的优点:高并发速写,对海量数据依旧可以保持高效率的存储和访问,架构可拓展
缺点:键值对形式存储,数据逻辑比较复杂,数据是保存在缓存(内存)当中 (尤其是redis),如果意外重启所有数据就会丢失
mysql的数据类型
char:固定长度的自读类型,用于存储固定长度的字符串
varchar:可变长度的字符类型,存储的是可变长度的字符串
char和varchar的区别:
char定义好了长度之后,不论写的值是多少,都会占用固定长度的字节大小,保存在磁盘上都是4字节
varchar在保存字符串时,多少就保存多少,在保存的字符串结尾默认有一个隐藏的结束符,会多占一个字节
varchar比char要节约磁盘空间
char的读写速度性能要高于varchar。char是连续的磁盘空间,保存的内容是连续的;varchar在增删改查之后,会产生一个磁盘空间的碎片文件,影响读写性能
int 存储的数据类型为整数
float 存储的是单精度浮点数,小数点 格式:float(m,d); m表示总位数,d表示小数位数
double 存储的是双精度浮点数 格式:double(m,d);
date 用于存储日期 格式 YYYY-MM-DD
datetime 用于存储日志和时间 格式 YYYY-MM-DD HH:MM:SS
timestamp :和datetime类似,但是它可以自动记录当前时间
smallint 存储小整数
bigint 存储大整数
decimal(5,2);存储精度的浮点数 5表示总位数,2表示小数位
数据库的管理
增删改查——sql语句
sql中的名词
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:funcrion
调度器:exent
sql的语言规范:
在数据库系统中,sql语句不区分大小写,但是建议用大写;sql语句可以分单行和多行,但是必须要以“;”结尾
命令规范:库名、表名、列的名字,都必须以字母开头,后面可以用数字,也可以跟上特殊符号,不要使用mysql的保留字(table,select,show databases);数据库名,表名,用户名严格区分大小写
sql语言的分类
1.DDL 数据库定义语言:创建数据库的对象语言,比如库、表和索引等等比如create drop
2.DML 数据库操作语言:对表里的数据进行管理 比如 select update insert delete
3.DQL 数据库查询语言:数据库的查询语言 select
4.DCL 数据控制语言:控制和管理数据库用户的角色和权限 grant 赋权 revoke 取消权限
5.TCL 事务控制语言:用来管理数据库的事务,用于脚本开发,存储过程等等,比如commit rollback savepoint
1.DDL
创建库和表的语句 create
create 创建 create database xy102 创建库 create table test 创建表
删除库 drop databases
drop 删除 drop databases xy102
xshell里面查看表
key:表示是否是主键或者外键
default:如果没有数据的默认展示结果
extra:提供列的附加信息,比如自增长等等
2.DML:
插入数据 insert
insert into 表名(字段1,字段2,字段3) values(1,2,3);
null和空值之间的区别:
null就是啥也没有,就是为空;空值也是值,只是值是空
insert into test01 values(4,' ',null); 空格也是值,但是null不是值就是空的
插入固定时间
插入当前时间
修改和更新 update
update 表名 set 列名=值 where 条件;
update test01 set score=90 where id = 4;
删除表的数据 delete
delete from 表名 where 条件;
delete from test01 where id=2;
3.DQL
查询语句 select 、desc
select score from test01;
select name,score from test01;
desc test01\G;查询表的结构
查看指定行查询 limit
select * from test01 limit 2,3; 第二行后面的三行
select * from test01 limit 0,3; 第一行到第三行
去重查询 distinct
select distinct name from test01;
where 语句 条件的筛选
and 逻辑且 or 逻辑或
select * from test01 where id=7 and score=71;
模糊查询 like
select * from test01 where name like '顾%'; 顾% 以什么为开头 %顾 以什么为结尾
select * from test01 where name like '%顾%'; 包含内容
修改表名和修改表结构 alter
修改表名
alter table test01 rename test02; 修改表名改为test02
给表添加一个列
alter table test01 add address varchar(50) default '地址不详';
修改字段的数据类型
alter table test01 modify column address char(10);
alter table test01 modify column address char(10) default '地址详情';
删除列
alter table test01 drop address;
修改列的名称
alter table test01 change name username char(10);
数据库的增删改查:查
约束条件和用户管理:删
约束条件
主键约束 primary key
用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且值不能为null。一个表只能有一个主键
创建主键
外键约束
用于建立表与表之间关系,确保外键中的值与另一个表的主键值匹配,保证数据引用的完整性。多表联查,不要超过三张,超过三张表会降低查询效率
非空约束 not null
保证列中的值不含null的值
唯一性约束 not null unique key
确保列中的所有值都是唯一的,类似主键,但是一个表可以有多个唯一约束。
自增约束 auto_increment
在列生成的每一行都会自动生成一个唯一标识符,通常和主键一起使用,每次插入新行时,自增列的值会自动增加
自增长插入
主键和外键如何联动
主键和外键
1.外键就是和主表进行关联的列,不需要设置为从表的主键,但是不能为空,必须和主表的数据类型保持一致。外键的值和主键的值要相同
2.先插入主表的数据,再插入从表的数据
3.删除表的外键不是直接删除外键的列名,而是删除外键的索引,show create table 表名:查看表的详细信息
删除外键(索引名称)
4.删除主键不需要加上主键的列名。如果有extra的额外属性,比如自增长,要先移除属性,然后才能删除主键。
删除主键
5.删除主键的方式:alter进行修改
复制表
create table stu_01 like student;
desc stu_01;
复制表里的数据
insert into stu_01 select * from student;
直接复制表里的数据并创建新的表
create table stu_02 (select * from student);
临时表 temporary
临时表创建完成之后,在库里面是看不到的,但是依然可以增删改查
清空表
面试题:如何删除表内数据,但是保留表和表结构
drop 删除表
delete from 表名
一行一行的清空表数据,速度比较慢,如果有自增长字段,delete清空之后,会继续按照原来的序号,继续递增
truncate table 表名
清空表,保留表的结果,但是清空之后原有的记录全部抹去,自增长也将从头开始,速度比较快
数据库的用户管理
root都是相同的
host:可以登录的主机
localhost:指的是本地登录
%:任意主机(ip地址)
权限上:localhost > % 的权限
创建用户 create
create user 'gfw'@'192.168.233.10' identified by '123456';
root@localhost 安装完mysql之后就有了,不需要额外设置。其他的都需要人工创建,其他的用户也不设置成localhost,都是设置主机名
删除用户
drop user 'gfw'@'192.168.233.10';
设置用户权限 grant
grant all privileges on *.* to 'gfw'@'192.168.233.10' ;
all 给与所有权限 远程登录,数据库的操作权限(增删改查)
*.* :* 表示库, *表示库里的表
information_schema:这个库的作用包含了mysql服务器中所有其他数据库,表、列、索引权限等详细的元数据的信息,可以查询数据库的结构和元信息
performance_schema:包含mysql的服务性能和资源利用情况,查询语句的执行时间和锁定信息
查看用户权限
show grants for 'gfw'@'192.168.233.10';
只给用户查的权限
grant select on xy102.* to 'gfw'@'192.168.233.10' ;
给用户多个权限
grant insert,update,alter,delete on xy102.* to 'gfw'@'192.168.233.10' ;
取消权限 revoke
revoke all privileges on *.* from 'gfw'@'192.168.233.10' ;
revoke insert,update,alter,delete on xy102.* from 'gfw'@'192.168.233.10' ;
mysql本地免密登录
vim /ect/my.cnf
添加 skip-grant-tables