目录
一、数据库的基本操作
1、查看数据库结构
1.1、查看数据库信息
show database
1.2、切换到数据库中
use 数据库名
1.3、查看数据库中的表信息
show tables
show tables in mysql
1.4、显示数据表的结构(字段)
describe user;
字段解释:
- Field:字段名称
- type:数据类型
- Null :是否允许为空
- Key :主键
- Type:数据类型
- Null :是否允许为空
- key :主键
- Default :默认值
- Extra :扩展属性,例如:标志符列(标识了种子,增量/步长)1 2
- id:1 3 5 7
1.5、常用的数据类型
整型 (int
):
- 描述:用于表示整数类型的数据。
- 存储大小:通常为4字节(32位)。
- 示例:
int age = 25;
单精度浮点数 (float
):
- 描述:用于表示带有小数的数字,精度较低。
- 存储大小:4字节(32位)。
- 精度:准确到小数点后六位。
- 示例:
float price = 19.99;
双精度浮点数 (double
):
- 描述:用于表示带有小数的数字,精度较高。
- 存储大小:8字节(64位)。
- 示例:
double temperature = 36.6;
字符型 (char
):
- 描述:用于定义单个字符,固定长度。
- 存储大小:通常为1字节(8位),但在某些实现中可定义为20字节。
- 示例:
char grade = 'A';
- 注意:如果存入数据的实际长度小于指定长度,会补空格至指定长度。如果实际长度大于指定长度,低版本数据库可能会截取数据,高版本数据库可能会报错。
可变长度字符型 (varchar
):
- 描述:用于定义可变长度的字符数据。
- 存储大小:根据实际数据长度分配空间,最大长度可以设定。
- 示例:
varchar name = 'John';
文本 (text
):
- 描述:用于存储大量的文本数据。
- 存储大小:可以存储非常大的文本数据。
图片 (image
):
- 描述:用于存储图像数据。
- 存储大小:根据图像大小变化。
十进制数 (decimal(5,2)
):
- 描述:用于存储定点小数,精确控制小数位数。
- 存储大小:总长度5位,小数点后2位。
- 示例:
decimal price = 123.45;
注意:Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错
主键是唯一的,但主键可以由多个字段构成
2、数据库管理—SQL语句
2.1、SQL语句概述
2.1.1、SQL语句概念
SQL(Structured Query Language,结构化查询语言)是一种用于访问、管理和操作关系型数据库的标准化编程语言。SQL 语句可用于数据库的创建、查询、更新、删除等操作,广泛应用于数据管理系统中。
SQL 语句的主要功能:
- 数据库定义:通过 SQL 语句定义数据库结构,如创建、修改和删除数据库及表。
- 数据操纵:使用 SQL 语句插入、删除、更新和查询表中的数据。
- 权限控制:通过 SQL 管理用户的访问权限,确保数据库的安全性。
- 事务控制:支持事务的提交和回滚,确保数据操作的原子性和一致性。
2.1.2、SQL语句分类
DDL(数据定义语言):用于定义和管理数据库对象,如创建、删除、修改数据库、表、索引等。
- 操作:
CREATE
,DROP
,ALTER
DML(数据操纵语言):用于对数据库表中的数据进行操作,如插入、删除、修改数据。
- 操作:
INSERT
,DELETE
,UPDATE
DQL(数据查询语言):用于从数据表中查询符合条件的数据。
- 操作:
SELECT
DCL(数据控制语言):用于管理数据库用户或角色的权限和访问控制,涉及数据的安全性和事务控制。
- 操作:
GRANT
,REVOKE
,COMMIT
,ROLLBACK
2.2、管理数据库
数据定义语言,用于创建数据库对象,如库、表、索引等
2.2.1、创建新的数据库或表
//创建新的数据库
create database 数据库名;
//创建新的表
create table 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
create table cxc (id int not null,name char(10) not null,score decimal(4,2),passwd char(50) default'',primary key (id));
desc cxc;
show tables;
2.2.2、删除数据库或表
//删除指定的数据库
drop database 数据库名;
//删除当前数据库中的指定表
drop table 表名;
//删除指定的数据库中的表
drop table 数据库名.表名;
2.3、DML管理表中的数据记录
数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
2.3.1、表中插入数据
insert into 表名 (字段1, 字段2, [...]) values (字段1的值, 字段2的值, [...]);
2.3.2、更新、修改表中数据
update 表名 set 字段名1 = 字段值1 [, 字段名2 = 字段值2] [where 条件表达式];
2.3.3、删除表中的数据
delete from 表名 where 条件表达式; //删除具体的一条数据
delete from 表名; //删除表里所有的数据,但字段和结构还存在
2.4、DQL查询数据记录
SELECT 字段名1,字段名2[,...] FROM 表名[WHERE 条件表达式];
二、数据表高级操作
1、清除表命令的区别
特性/命令 | DROP TABLE 表名 | TRUNCATE TABLE 表名 | DELETE FROM 表名 |
---|---|---|---|
语言类 | 属于 DDL | 属于 DDL | 属于 DML |
回滚恢复 | 不可回滚(无法恢复) | 不可回滚(无法恢复) | 可回滚(可恢复) |
是否带 WHERE | 不可带 WHERE | 不可带 WHERE | 可带 WHERE |
删除情况 | 表内容和结构删除 | 表内容删除(结构保留) | 表结构保留,表内容视 WHERE 执行情况 |
删除速度 | 删除速度快 | 删除速度快 | 删除速度慢,需要逐行删 |
1.1、drop table 表名
drop table语句用于完全删除表,包括表结构和所有数据。执行drop table将永久删除整个表,需要小心使用,因为数据无法恢复
drop table table_name(表名)
1.2、truncate table 表名
delete清空表后,返回的结果内有删除的记录条目
delete工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用delete from删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录
truncate table 表名
1.3、delete from 表名
delete清空表后,返回的结果内有删除的记录条目;
delete 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用delete from 删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。
delete from 表名;
2、创建临时表
临时表创建成功之后,使用SHOWTABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。
如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除临时表。
create temporary table 表名 (字段1 数据类型,字段2 数据类型[, ...]
create temporary table class (id int(4) zerofill primary key auto_increment,name varchar(15) not null,cardid int(18) not null unique key,work varchar(60));
insert into oppo values(1,121,80,password('123456'));
insert into oppo values(2,333,81,password('123456'));
insert into oppo values(3,666,82,password('123456'));
当退出数据库再重新进入,临时数据库会自动删除,不会保留数据或数据库结构!
3、克隆表
这是准备克隆的数据
create table jjg like huawei; //复制huawei表的格式字段
insert into jjg select * from huawei; //复制huawei表中的数据内容
三、数据库用户管理
1、登录用户管理
1.1、新建用户
create user '用户名'@'来源地址' [identified by [password] '密码'];
//说明
//'用户名':指定将创建的用户名
//'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录,可用通配符%
//'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密
若使用加密密码,需要先使用select password('密码');获取密文,再在语句中添password '密文';
若省略“identified by"部分,则用户的密码将为空(不建议使用)
创建登录用户
create user 'wjh'@'localhost' identified by '123456';
加密码创建用户
1.2、重命名指定
1.2.1、修改用户的用户名
rename user 'xz'@'localhost' to 'xxy'@'localhost';
1.2.2、修改用户密码
set password = password('abc123');
修改指定用户密码
set password for 'zmx'@'localhost'=password('123456');
1.3、删除用户
drop user 'xy'@'localhost';
1.4、忘记root密码解决方法
该操作必须是在数据库本机且为root用户,才可进行
修改/etc/my.cnf 配置文件,免密登陆mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables //添加,使登录mysql不使用授权表
systemctl restart mysqld //重启mysqld服务
然后使用SQL语句修改密码
登录测试新密码
撤销添加的免密码认证设置,重启数据库服务
重启服务
2、数据库用户授权
授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'来源地址' [identified by '密码'];
- 权限列表:列出授权的数据库操作权限,用逗号分隔。如
select, insert, update
。使用all
表示所有权限,可以授权执行任何操作。 - 数据库名.表名:指定授权操作的数据库和表名称,可以使用
*
作为通配符。例如,school.*
表示school
数据库中的所有表。 - '用户名'@'来源地址':指定用户名称和允许访问的来源地址。来源地址可以是具体的域名、ip地址或使用
%
作为通配符。例如,'zhangsan'@'localhost'
表示用户 zhangsan 只能从本地主机连接。 identified by '密码'
:设置用户连接数据库时的密码。如果省略此部分,则用户的密码为空。
常用的用户权限
权限 | 描述 |
---|---|
insert | 插入数据 |
select | 查询数据 |
update | 更新表的数据 |
delete | 删除表中数据 |
create | 创建库,表 |
drop | 删除库,表 |
references | 外键引用 |
index | 建立索引 |
alter | 更改表属性 |
create temporary tables | 创建临时表 |
lock tables | 锁表 |
execute | 执行存储过程 |
create view | 创建视图 |
show view | 显示视图 |
create routine | 创建存储过程 |
alter routine | 修改存储过程 |
event | 事件操作 |
trigger | 创建触发器 |
刷新权限
flush privileges;
查看权限
show grants for '用户名'@'来源地址';
撤销权限 (revoke
)
revoke 权限列表 on 数据库名.表名 from '用户名'@'来源地址';
在修改用户权限后,需要刷新权限表!!