Mysql的基本概念

一 . mysql 的 基 本 概 念

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

四 . 操 作Mysql

  • 常用的数据类型
数据名 作用
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 changed
mysql> show tables
    -> ;
+----------------+
| Tables_in_tour |
+----------------+
| sunsetglow     |
+----------------+
1 row in set

3.查 看 表 的 结 构 ( 字 段 )

use 数据库名;
desc 表名;
  • 示例
mysql> use tour;
Database changed
mysql> 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 tour
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> 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: 0

mysql> 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 表名\G
select * 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;

五. mysql 6 大 常 见 的 约 束

  • 主键约束 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 affected

mysql> insert into moon select * from sunsetglow;
Query OK, 12 rows affected
Records: 12  Duplicates: 0  Warnings: 0

mysql> 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 affected

mysql> select * from moon;
Empty set

mysql> truncate table moon;
Query OK, 0 rows affected

mysql> 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 主键表名 (主键字段);
  • 插入数据时,是先主表再外表;删除数据时,是先外表再主表

六. DCL 介 绍

1. 用 户 管 理

  • $\textcolor{Orange}{增} $
create user  '用户名'@'源地址'    identified by '密码';                     
mysql> create user 'xiaoxu'@'localhost' identified by'123456';
Query OK, 0 rows affected
mysql> 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 affected
mysql> set password = password('abc123');
Query OK, 0 rows affected
mysql> 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 changed
mysql> 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.cnf
skip-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: 1
mysql> 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 -pabc123
mysql> 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 1
mysql> 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)

你可能感兴趣的:(mysql,数据库)