关系型数据库
数据结构 二维表格 库 -> 表 -> 列(字段):用来描述对象的一个属性
行(记录):用来描述一个对象的信息
Mysql(5.7/8.0) Mariadb PostgreSQL Oracle SQL Server DB2
阿里云RDB 华为高斯 腾讯TDBA 阿里oceanbase 人大金仓 达梦
非关系型数据库
数据结构 键值对 key:value
缓存型 Redis Memcached
文档型 MongoDB
搜索型 Elasticsearch
时序型 Prometheus
SQL语句 DDL DML DQL DCL
DDL 用于创建数据库对象:库 表 索引
create database 库名;
create table 表名 (字段名1 数据类型 [字段属性], 字段名2 数据类型 [字段属性], ...., primay key(字段));
drop table 表名;
drop database 库名;
修改表结构
alter table 表名 add 字段 数据类型;
alter table 表名 change 字段1 字段2 数据类型;
alter table 表名 add 属性(字段); #为字段增加属性
alter table 表名 drop 字段名; # 删除字段
show databases;
use 库名;
show tables;
show tables from 库名;
desc 表名;
DML 用于管理表数据
insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
insert into 表名 values (按照字段顺序的所有字段的值);
delete from 表名 where 条件表达式;
update 表名 set 字段=值, ... where 条件表达式;
DQL 用于根据条件查询表数据
select 字段1,字段2,... from 表名 where 条件表达式;
select * from 表名\G
select * from 表名 limit N; 显示表前N行
select * from 表名 limit N,M; 显示从第N行之后的M行记录(不包含第N行)
mysql 6大常见的约束
主键约束 primay key 主键字段不允许有重复的记录,不允许为null,一个表只能有一个主键
唯一性约束 unique key 唯一键字段不允许有重复的记录,但允许为null,一个表可以有多个唯一键
非空约束 not null
默认值约束 default
自增约束 auto_increment
外键约束 foreign key
克隆表
create table 新表 like 源表;
insert into 新表 (select * from 源表); 数据一样,表结构一样
create table 新表 (select * from 源表); 数据一样,表结构可能不一样
清空表
delete from 表名; 一条一条的删除,效率较慢,自增长字段仍然会按照清空前的顺序自增
truncate table 表名; 直接重置表,清空效率快,自增长字段会从1重新开始
临时表
create temporary table 表名 (....); 临时表只能在当前会话中有效,且退出当前会话则会失效
外键约束
主键表: alter table 表名 add primay key (主键字段);
外键表: alter table 表名 [constraint FK_外键别名] add foreign key (外键字段) references 主键表名 (主键字段);
插入数据时,是先主表再外表;删除数据时,是先外表再主表
DCL
用户管理
create user '用户名'@'源地址' identified by '密码';
localhost(本地)/%(所有)
select user,host,authentication_string from mysql.user;
rename user '旧用户名'@'源地址' to '新用户名'@'源地址';
drop user '用户名'@'源地址';
set password [for '用户名'@'源地址'] = password('.....');
找回root密码
1)修改配置文件,在[mysqld]下添加skip-grant-tables
2)重启mysqld服务,使用 mysql 命令直接进入免密进入mysql
3)执行 update mysql.user set authentication_string=password('....') where user='root';
4)还原配置文件,重启服务,使用账号密码验证登录
权限管理
grant 权限1,权限2,... on 库名.表名 to '用户名'@'源地址' [identified by '密码'];
all *.*
show grants for '用户名'@'源地址';
revoke 权限1,权限2,... on 库名.表名 from '用户名'@'源地址';
all