一、数据库的基本概念
1、数据(Data)
- 描述事物的的符号记录
- 包括数字、文字、图形、图像、声音、档案记录等
- 以"记录"形式按统一的格式进行存储
2、表
- 将不同的记录组织在一起
- 用来存储具体数据
3、数据库
- 表的集合,存储数据的仓库
- 以一定的组织方式存储的相互有关的数据集合
- 是按照数据结构来组织、存储和管理数据的仓库
4、数据库管理系统 (DBMS)
- 是实现对数据库资源有效组织、管理和存取的系统软件
- 数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理功能、通信功能
5、数据库系统
- 是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
- 用户可以通过DBMS或应用程序操作数据库
二、认识关系型数据库
1、关系型数据库概述
- 关系数据库系统是基于关系模型的数据库系统
- 数据结构使用简单易懂的二维数据表
- 可用简单的"实体-关系" (E-R)图来表示
- E-R图中包含了实体(数据对象)、关系和属性三个要素
2、关系型数据库的结构
- 关系型数据库的存储结构是:二维表格
- 每一行称为:一条记录,用来描述一个对象的信息
- 每一列称为:一个字段,用来描述对象的一个属性
三、关系型数据库代表:MySQL数据库
1、Mysql 概述
- 一款深受欢迎的开源关系型数据库
- Oracle旗下的产品
- 遵守GPL协议、可以免费使用和修改
- 特点:
- 性能卓越、服务稳定
- 开源、无版权限制、成本低
- 多线程、多用户
- 基于C/S(客户端/服务器)架构
- 安全可靠
2、常用的数据类型
- int :整数型
- float:单精度浮点型 4字节 32位
- double:双精度浮点型 8字节 64位
- char:固定长度的字符类型
- varchar:可变长度的字符类型
- text:文本
- image:图片
四、SQL语句的使用
1、查看数据库结构
1.1、查看当前服务器中的数据库
show databases
1.2、查看某数据库中的所有表
use 数据库名;
show tables;
1.3、查看表的结构(字段)
1、describe 数据库名.表名;
2、use 数据库名; ### describe 可缩写成:desc
describe 表名;
3、show create table 表名\G; ### 以列表方式竖向显示字段(包括键名)
2、创建、删除数据库和库中的表
2.1、创建的新数据库
create database 数据库名;
2.2、创建新的表
create table 表名(字段1 数据类型 [属性],字段2 数据类型 [属性]...);
2.3、删除数据库
drop database 数据库名;
2.4、删除表
drop table 数据库名.表名;
3、表中数据记录的 增删改查
3.1、向表中插入新的数据记录
1):insert into 表名(字段1,字段2,...)values(字段1的值,字段2的值...);
2):insert into 表名 values(字段1的值,字段2的值...); ##values前面字段省略时,注意后面字段的值要跟表中字段一一对应
3.2、查询表中数据记录
1):select * from 表名; ## 查看表中所有数据记录
2):select 字段1,字段2... from 表名; ## 根据给出的字段名查询记录
3):select * from 表名 [where 条件表达式]; ## 根据条件查询记录
4):select * from 表名\G; ## 以列表方式竖向显示数据
5):select * from 表名 limit [数字n]; ## 查询前n行记录
6):select * from 表名 limit [数字n],[数字m]; ## 查询第n行后的前m行记录
4、修改、更新表中记录
update 表名 set 字段名1=字段1的值,字段名2=字段2的值.. [where 条件表达式];
5、删除表中数据
delete from 表名 [where 条件表达式];
6、修改表名和表的结构
6.1、修改表名
alter table 旧表名 rename 新表名;
6.2、增加新的字段
alter table 表名 add 字段1 数据类型 [属性];
6.3、修改字段属性
alter table 表名 CHANGE 旧字段名 新字段名 数据类型 [键名];
6.4、删除字段
alter table 表名 drop 字段名;
6.5、添加字段的 键名
1):create table 表名 (字段1,字段2,键名(字段名) ); ## 创建表的时候添加
2):alter table 表名 ADD 键名(字段名);
6.6、删除键名
alter table 表名 DROP 键名;
五、数据库的高级操作
5.1、复制表的结构和数据(克隆表)
1、create 表1 like 表2; ##复制表的结构
2、insert into 表1 select * from 表2; #将表2查询的数据导入表1中
3、create table 表2 (select * from 表1); ##创建表2的时候,从表1中复制其字段属性和数据
5.2、清空表的内容
1):delete from 表名; ##自增列不会被重置
2):truncate table 表名; ## 自增列会被重置为1
六、数据库用户管理
6.1、新建用户
create user '用户名' @ '来源地址' [identified by '密码'];
6.2、查看用户信息
select User,authentication_string,Host from 表名;
6.3、重命名用户
rename user '旧用户名'@'localhost' to '新用户名'@'localhost';
6.4、删除用户
drop user '用户名'@'localhost';
6.5、修改密码
set password = password('新密码'); ##修改当前登录用户的密码
set password for '用户名'@'localhost'=password(新密码); ## 修改其他用户密码
6.6、忘记 root 密码的解决方法
1、修改/etc/my.cnf 配置文件,不使用密码直接登录MySQL
vim /etc/my.cnf
[mysqld] ### 在mysql块添加
skip-grant-tables ### 登录mysql不使用授权
systemctl restart mysqld
mysql ### 使用mysql直接登录
## 修改root密码
update mysql.user set authentication_string = password('新密码') where user='root';
plush privileges; ## 刷新权限
quit ## 退出mysql
## 注意把/etc/my.cnf 配置文件里的skip-grant-tables一行删除。
## 使用新密码登录mysql
七、数据库用户的授权
7.1、授予权限
Grant语句:用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将会创建新的用户:当指定的用户名存在时,GRANT语句用于修改用户信息。
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED by '密码'];
- 权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如"select,insert,update"使用"all"表示所有权限,可授权执行任何操作。
- 数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符"*" 例如:使用"kgc.*"表示授权操作的对象为kgc数据库中的所有表
- '用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、ip地址,还可以使用"%"通配符,表示某个区域或网段内的所有地址
- IDENTIFIED by:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED by"部分,则用户密码为空。
示例:允许zhangsan 用户在本地查询kgc数据库中所有表的数据记录,但禁止查询其他数据库中的表记录
GRANT select ON kgc.* TO 'zhangsan'@'localhost' IDENTIFIED by 'abc123';
示例:允许用户lisi 在所有终端远程连接 mysql,并拥有所有权限
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED by 'abc123';
7.2、查看权限
show grant for '用户名'@'来源地址';
例:
show grant for 'lisi'@'%';
7.3、撤销权限
revoke 权限列表 ON 数据库名.表名 from '用户名'@'来源地址';
例:
revoke all ON *.* from 'zhangsan'@'%';