1、数据(data)
- 描述事物的符号记录
- 包括数字文字图形图像声音档案记录等
- 以记录形式按同意的格式进行存储
2、表
- 将不同的记录组织在一起
- 用来存储具体数据
3、数据库
-
表的集合,是存储数据的仓库
-
以一定的组织方式存储相互有关的数据集合
-
是按照数据结构来组织,存储和管理数据的仓库
-
数据库中有表,表中有记录
4、数据库管理系统
- 是实现对数据库资源有效组织,管理和存取的系统软件
数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理功能、通信功能
5、数据库系统
-
是一个人机系统,由硬件、oS、数据库、DBMS、应用软件和数据库用户组成
-
用户可以通过DBMS或应用程序操作数据库
1、第一代数据库
- 自20世纪60年代起,第一代数据库系统问世
- 是层次模型与网状模型的数据库系统
- 为统一管理和共享数据提供了有力的支撑。
2、第二代数据库
- 20世纪70年代初,第二代数据库——关系数据库开始出现
- 20世纪80年代初,IBM公司的关系数据库系统DB2问世,开始逐步取代层次与网状模型的数据库,成为行业主流
- 到目前为止,关系数据库系统仍占领数据库应用的主要地位
3、第三代数据库
-
自20世纪80年代开始,适应不同领域的新型数据库系统不断涌现
-
面向对象的数据库系统,实用性强、适应面广
-
20世纪90年代后期,形成了多种数据库系统共同支撑应用的局面·
-
—些新的元素被添加进主流数据库系统中
- 例如,Oracle支持的“关系-对象”数据库模型
1、SQL Server (微软公司产品)
- 面向Windows操作系统
- 简单,易用
2、Oracle (甲骨文公司产品)
- 面向所有主流平台
- 安全、完善、操作复杂
3、DB2 (IBM 公司产品)
- 面向所有主流平台
- 大型、安全、完善
4、MySQL (甲骨文公司收购)
- 免费、开源、体积小
5、数据库
-
关系型数据库典型代表:Mysql(5.7/8.0)、Mariadb、 Oracle、PsetgreSQL、SQL Server、DB2、
-
国产数据库代表:阿里云RDB 华为:高斯 腾讯 TDBA 阿里 Oceanbase
6、关系型数据库
-
关系数据库系统是基于关系模型的数据库系统
-
关系模型的数据结构使用简单易懂的二维数据表
-
关系模型可用简单的“实体-关系”(E-R)图来表示
-
E-R图中包含了实体(数据对象)、关系和属性三个要素
-
关系数据库的存储结构是二维表格
-
在每个二维表中
- 每一行称为一条记录,用来描述一个对象的信息
- 每一列称为一个字段,用来描述对象的一个属性
7、非关系型数据库介绍
-
非关系数据库也被称作NoSQL (Not Only s QL)
-
存储数据不以关系模型为依据,不需要固定的表格式
-
非关系型数据库的优点
-
数据库可高并发读写
-
n 对海量数据高效率存储与访问
-
数据库具有高扩展性与高可用性
-
8、非关系型数据库典型代表
-
缓存型:Redis Mecached
-
文档型:MongoDB
-
搜索型:ElasticSearch(ES)
-
时序型:Prometheus InfluxDB
- 常用的数据类型
数据名 | 作用 |
---|---|
int | 整型 无符号【0,232-1】,有符号【-231,2^32-1】 |
float | 单精度浮点 4字节32位 |
double | 双精度浮点 8字节64位 |
char | 固定长度的字符类型 |
varchar | 可变长度字符类型 |
text | 文本 |
image | 图片 |
decimal(5,2) | 五个有效长度数字,小数点后面有2位 |
1、查看当前服务器中的数据库
show databases;
- 示例
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || bbs || mysql || performance_schema || sys || tour |+--------------------+6 rows in set
2、查看数据库中的表
use 数据库名;show tables;/show tables form 数据库;
- 示例
mysql> use tour;Database changedmysql> show tables -> ;+----------------+| Tables_in_tour |+----------------+| sunsetglow |+----------------+1 row in set
3、查看表的结构 ( 字段 )
use 数据库名;desc 表名;
- 示例
mysql> use tour;Database changedmysql> desc sunsetglow -> ;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || name | char(4) | YES | | NULL | || age | int(11) | YES | | NULL | || sex | char(2) | YES | | NULL | |+-------+---------+------+-----+---------+-------+4 rows in set
4、SQL 语句
- SQL语句用于维护管理数据库,包括数据查询、数据更新、
5、SQL 语言分类
-
DDL: 数据定义语言,用于创建数据库对象,如库、表、索引等
-
DML:数据操纵语言,用于对表中数据进行管理
-
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
-
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限
6、创建及删除数据库和表
- 创建新的数据库
create database 数据库名;
-
- 示例
mysql> create database sun;Query OK, 1 row affected (0.00 sec)
- 创建新的表
create table 表名 (字段1 数据类型,字段2 数据类型【......】【,primary key(主键名)】);
-
- 示例
mysql> create table kiki (id int not null,name char(10) not null,sorce decimal(5,2),primary key(id));Query OK, 0 rows affected (0.01 sec)mysql> show tables;+----------------+| Tables_in_tour |+----------------+| kiki || moon || stars || sunset |+----------------+4 rows in set (0.00 sec)
7、修改表名和表结构
- 修改表名
alter table 旧的表名 rename 新的表名
-
- 示例
mysql> use tourReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> alter table sunsetglow rename sunset;Query OK, 0 rows affected (0.01 sec)
- 扩展表结构(增加字段)
alter table 表名 add 字段 数据类型 default ' 默认值' ;
-
- 示例
mysql> alter table kiki add address varchar(50) default 'none';Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0
- 修改字段(列)名,唯一键
alter table 表名 change 旧列名 新列名 数据类型 [unique key];
mysql> alter table kiki change name student varchar(20) unique key;Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> desc kiki;+---------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+--------------+------+-----+---------+-------+| id | int(11) | NO | PRI | NULL | || student | varchar(20) | YES | UNI | NULL | || sorce | decimal(5,2) | YES | | NULL | || address | varchar(50) | YES | | none | |+---------+--------------+------+-----+---------+-------+4 rows in set (0.00 sec)
8、DML 用于管理表数据
- 增
insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);insert into 表名 values (按照字段顺序的所有字段的值);例:insert into sunset (id,name,score,passwd) values (2,'xu',80,'123456');
- 删
delete from 表名 where 条件表达式;例:delete from sunset where id=4;
- 改
update 表名 set 字段=值, ... where 条件表达式;例:update sunset set name='xu',score='99'where id=3;
- 查
select 字段1,字段2,... from 表名 where 条件表达式;select * from 表名\Gselect * from 表名 limit N; 显示表前N行select * from 表名 limit N,M; 显示从第N行之后的M行记录(不包含第N行)例:select name number from sunset;select name number from sunset where id=2;select * from sunset limit 2;select * from sunset limit 2,3;
9、修改表结构
- 修改表名
alter table 旧表名 rename 新表名; 例:alter table sunset rename wen;
- 增加表字段
alter table 表名 add 新字段 数据类型 字段属性;例:alter table xu add address varchar(50) default'fire';
- 修改表字段名
alter table 表名 change 旧字段名 新字段名 数据类型 字段属性; 例:alter table xu change xiaoxu use_name varchar(10) unique key;
- 删除字段
alter table 表名 drop 字段名; 例:alter table xu drop address;
- 主键约束 primay key 主键字段不允许有重复的记录,不允许为null,一个表只能有一个主键
- 唯一性约束 unique key 唯一键字段不允许有重复的记录,但允许为null,一个表可以有多个唯一键
- 非空约束 not null
- 默认值约束 default
- 自增约束 auto_increment
- 外键约束 foreign key
1.克隆表
create table 新表 like 源表;insert into 新表 (select * from 源表); 数据一样,表结构一样create table 新表 (select * from 源表); 数据一样,表结构可能不一样
- 示例
mysql> create table moon like sunsetglow;Query OK, 0 rows affectedmysql> insert into moon select * from sunsetglow;Query OK, 12 rows affectedRecords: 12 Duplicates: 0 Warnings: 0mysql> select * from moon;+----+--------+-----+-----+| id | name | age | sex |+----+--------+-----+-----+| 1 | 张源泉 | 56 | 男 || 2 | 李凯丽 | 25 | 女 || 3 | 伍连德 | 55 | 男 || 4 | 吴珊珊 | 25 | 女 || 5 | 张三 | 55 | 男 || 6 | 李思 | 61 | 男 || 7 | 王武 | 50 | 男 || 8 | 黄丽丽 | 52 | 女 || 9 | 王鹏鹏 | 66 | 男 || 10 | 李思思 | 72 | 女 || 11 | 章萍 | 51 | 女 || 12 | 梅芳 | 58 | 女 |+----+--------+-----+-----+12 rows in set
2、清空表
delete from 表名; 一条一条的删除,效率较慢,自增长字段仍然会按照清空前的顺序自增truncate table 表名; 直接重置表,清空效率快,自增长字段会从1重新开始
- 示例
mysql> delete from moon;Query OK, 12 rows affectedmysql> select * from moon;Empty setmysql> truncate table moon;Query OK, 0 rows affectedmysql> select * from moon;Empty set
3、临时表
create temporary table 表名 (....); 临时表只能在当前会话中有效,且退出当前会话则会失效
- 示例
mysql> create temporary table light( -> id int(4) zerofill primary key auto_increment -> ,name varchar(10) not null, -> cardid int(18) not null unique key, -> hobby varchar(50)) ;Query OK, 0 rows affected
4、外键约束 ( 了解即可 )
- 主键表
alter table 表名 add primay key (主键字段);
- 外键表
alter table 表名 [constraint FK_外键别名] add foreign key (外键字段) references 主键表名 (主键字段);
- 插入数据时,是先主表再外表;删除数据时,是先外表再主表
1、用户管理
- $\textcolor{Orange}{增} $
create user '用户名'@'源地址' identified by '密码';
mysql> create user 'xiaoxu'@'localhost' identified by'123456';Query OK, 0 rows affectedmysql> select password('abc123');+-------------------------------------------+| password('abc123') |+-------------------------------------------+| *6691484EA6B50DDDE1926A220DA01FA9E575C18A |+-------------------------------------------+1 row in set
- $\textcolor{Orange}{删} $
drop user '用户名'@'源地址';
mysql> drop user 'xiaowen'@'localhost';Query OK, 0 rows affected
- $\textcolor{Orange}{改} $
rename user '旧用户名'@'源地址' to '新用户名'@'源地址';set password [for '用户名'@'源地址'] = password('.....');
mysql> rename user 'xiaoxi'@'localhost' to 'xiaowen'@'localhost';Query OK, 0 rows affectedmysql> set password = password('abc123');Query OK, 0 rows affectedmysql> set password for 'xiaoxu'@'localhost' = password('abc123');Query OK, 0 rows affected
- $\textcolor{Orange}{查} $
use mysql;select user,host,authentication_string from mysql.user;
mysql> use mysql;Database changedmysql> select user,host,authentication_string from mysql.user;+---------------+-----------+-------------------------------------------+| user | host | authentication_string |+---------------+-----------+-------------------------------------------+| root | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A || mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE || mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE || bbsadmin | % | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C || localhost | % | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C || root | % | *6691484EA6B50DDDE1926A220DA01FA9E575C18A || xiaoxu | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A || xiaoxu | % | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |+---------------+-----------+-------------------------------------------+8 rows in set
2、找回 root 密码
- 修改配置文件,在[mysqld]下添加skip-grant-tables
[root@www ~]# vim /etc/my.cnfskip-grant-tables#添加,使登录mysql不使用授权表
- 重启mysqld服务,使用 mysql 命令直接进入免密进入mysql
[root@www ~]# systemctl restart mysqld.service
- 执行 update mysql.user set authentication_string=password(‘…’) where user=‘root’;
mysql> update mysql.user set authentication_string = password('abc123') where user='root';Query OK, 0 rows affected, 1 warning (0.00 sec)Rows matched: 2 Changed: 0 Warnings: 1mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)mysql> quit
- 还原配置文件,重启服务,使用账号密码验证登录
[root@www ~]# mysql -u root -pabc123
3、权限管理
- 授权
grant 权限1,权限2,... on 库名.表名 to '用户名'@'源地址' [identified by '密码'];grant all ,... on 库名.表名 to *.* [identified by '密码'];
-
- 示例
[root@www ~]# mysql -uroot -pabc123mysql> grant select on tour.* to 'xiaoxu'@'localhost' identifmysql> grant select on tour.* to 'xiaoxu'@'localhost' identified by 'abc123';Query OK, 0 rows affected, 2 warnings (0.00 sec)mysql> grant all [privileges] on *.* to 'xiaoxu'@'%' identified by 'abc123';ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[privileges] on *.* to 'xiaoxu'@'%' identified by 'abc123'' at line 1mysql> grant all on *.* to 'xiaoxu'@'%' identified by 'abc123';Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)mysql> quit
- 查看权限
show grants for '用户名'@'源地址';
-
- 示例
mysql> show grants for 'xiaoxu'@'%';+---------------------------------------------+| Grants for xiaoxu@% |+---------------------------------------------+| GRANT ALL PRIVILEGES ON *.* TO 'xiaoxu'@'%' |+---------------------------------------------+1 row in set (0.00 sec)
- 撤销权限
revoke 权限1,权限2,... on 库名.表名 from '用户名'@'源地址';revoke all ,... on 库名.表名 from '用户名'@'源地址';
-
- 示例
mysql> revoke all on *.* from 'xiaoxu'@'%';Query OK, 0 rows affected (0.00 sec)
来源地址:https://blog.csdn.net/2301_76858832/article/details/131239384