MySQL数据库管理

一. 数据库基本操作

1.查看数据库结构

1.1 查看数据库信息

#查看数据库中的所有库

show databases;

1.2 查看数据库中的表信息

方式一:

use  数据库名;
show tables;

方式二:

# 格式  show  tables  from  库名

 show tables from mysql;

1.3 显示数据表的结构(字段)

describe [数据库名.] 表名;

可缩写成:  desc [数据库名.]表名;

由于屏幕占比问题与字段数量问题,会导致有些表结构的效果呈现并不好。(默认查看为横向的查看 ) 

纵向查看方式:

desc  表名\G;

字段名称理解:

Field字段名称
Type数据类型
Null是否允许为空
Key主键
Default默认值
Extra扩展属性

1.4 常见的数据类型

int(n)4个字节(32个比特位),整数型,范围(-2147483648~2147483647)
float(m,d)单精度浮点,8位精度,4字节32位。m数字总个数,d小数位
double(m,d)双精度浮点,16位精度,8字节64位 。m总个数,d小数位
char固定长度的字符类型
varchar可变长度的字符类型
text文本
image图片
decimal(5,2)5个有效长度数字,小数点后面有2位(例如123.56)
bigint(n)8个字节,整数型,范围(+-9.22*10的18次方)

重点了解:char 和 varchar 的区别

CHAR(4)存储需求VARCHAR(4)存储需求
''' '4个字节''1个字节
'ab''ab '4个字节'ab '3个字节
'abcd''abcd'4个字节'abcd'5个字节
'abcdefgh''abcd'4个字节'abcd'5个字节

CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。 

字节大小:

  • char无论是否有值,都会占用固定长度的字节大小,保存在磁盘上都是4字节。
  • varchar在保存字符时,默认会加一个隐藏的结束符,因此结束符会多算一个字节。

优劣比较:

  • varchar比char节省磁盘空间。
  • 但varchar类型的数据读写速度比char慢,因为char是连续的磁盘空间,而varchar在多次增删改查中会产生一些磁盘空间碎片

2. SQL语句概述

关系型数据库,都是使用SQL语句来管理数据库中的数据。

SQL,即结构化查询语言(Structured Query Language) 。

SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。

2.1 SQL中的名词介绍

  • 数据库:database
  • 表:table,行:row 列:column
  • 索引:index
  • 视图:view
  • 存储过程:procedure
  • 存储函数:function
  • 触发器:trigger
  • 事件调度器:event scheduler,任务计划
  • 用户:user
  • 权限:privilege

2.2 SQL语言规范

  • 在数据库系统中,SQL 语句不区分大小写,建议用大写。
  • SQL语句可单行或多行书写,默认以 " ; " 结尾。
  • 关键词不能跨多行或简写。
  • 用空格和TAB 缩进来提高语句的可读性。
  • 子句通常位于独立行,便于编辑,提高可读性。

数据库对象和命名:
    数据库的组件(对象):

    数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等。

    命名规则:

  • 必须以字母开头,后续可以包括字母,数字和三个特殊字符(# _ $)
  • 不要使用MySQL的保留字,如 table、select、show、databases。
  • 数据库名、表名、用户名区分大小

2.3 SQL语言分类

1、DDL:数据定义语言(Data Definition Language),用于创建数据库对象,如库、表、索引等。

例如:CREATE,DROP,ALTER 等。

2、DML:数据操纵语言(Data Manipulation Language),用于对表中的数据进行管理。

例如: SELECT、UPDATE、INSERT、DELETE 等。

3、DQL:数据查询语言( Data Query Languag ),用于从数据表中查找符合条件的数据记录。

例如: SELECT

4、DCL:数据控制语言(Data Control Language),用于设置或者更改数据库用户或角色权限

例如: GRANT,REVOKE

5、TCL:事务控制语言(Transaction Control Language),用于管理数据库中的事务。 TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面。

例如: COMMIT,ROLLBACK,SAVEPOINT

3. MySQL数据库基本的增删改查命令

3.1 创建数据库及数据库表

create database study;

#格式
 CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]);

create table class (id int not null,name char(15) not null,score decimal(4,2),passwd char(45) default'',primary key (id));

#解释
id 字段:这是一个整数类型(int)字段,标记为"not null",表示该字段不允许存储NULL值。同时,它被指定为主键(primary key),这意味着每一行的id字段值必须是唯一的,通常用于唯一标识表中的每一条记录。

name 字段:这是一个固定长度字符类型(char(15))字段,同样不允许存储NULL值。这意味着每个name字段的值必须是一个最多包含15个字符的字符串,若实际输入的字符数少于15个,剩余部分会被填充为空格以达到15个字符的长度。

score 字段:这是一个十进制类型(decimal(4,2))字段,用于存储带小数点的分数。"(4,2)"表示该字段可以存储最大共4位数字,其中包含2位小数,例如0.00到999.99之间的数值。

passwd 字段:这是一个固定长度字符类型(char(45))字段,用于存储密码信息,默认值(default)被设置为空字符串('')。这意味着如果没有为passwd字段提供值,它将自动填充一个空字符串。

当这条SQL语句被执行后,数据库中将创建一个名为class的表,包含id、name、score和passwd这四个字段。



 主键:共同点:字段的值都是唯一的,不允许有重复值。

3.2 插入数据

方式一:指定字段插入数据

​#为指定字段插入值

INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);    
#注意字段的属性not null,则必须为该字段插入值
 
insert into class (id,name,score,passwd) values(1,'xyl',90,PASSWORD('123'));

如果不加 PASSWORD,直接按照字段顺序插入

为所有字段插入值
insert into 表名 values (所有字段的值);   
#每个字段值用逗号相隔;

3.3 查找数据库表中的数据

 SELECT * FROM 表名;      #查询表中所有记录
 ​
 #按条件查找数据记录,且只显示指定字段的值
 SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
 ​
 #mysql的分页语句:
 select * from 表名 limit 2; 

 select * from 表名 limit 2,3;       
#显示第2行后的前3行(即显示第3~5行)
 

3.4 修改表中的数据

修改时:建议指定的条件表达式为主键,主键具有唯一性,避免错改

UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];

3.5 删除表中的数据

 DELETE FROM 表名 [WHERE 条件表达式];     #删除一定要加条件,不然会删除整个表

不加条件删

3.6 删除指定的表

DROP TABLE 数据库名.表名;
或
USE 库名;
DROP TABLE 表名;

3.7 删除指定的库

DROP DATABASE 数据库名;

4. 表结构的管理

4.1 修改表名

 ALTER TABLE 旧表名 RENAME 新表名

4.2 扩展表结构(增加字段)

 ALTER TABLE 表名 ADD 字段名 数据类型;

4.3 修改字段名,添加唯一键 change

 ALTER TABLE 表名 CHANGE 旧字段名 新字段名 [数据类型] [约束];

4.4 删除字段 drop

 ALTER TABLE 表名 DROP 字段名;

4.5 复制表结构

方式一:创建新表,导入数据
create table 新表名 like 旧表名;
#通过LIKE方法,复制旧表的结构生成新表
 
insert into 新表名 (select * from 旧表名);     
#再将旧表数据导入新表

方式二:复制表
 create table 新表名 (select * from 旧表名);

区别:

第一种 like 的  迁移表  表的结构、属性、约束、数据都有

第二种  备份数据 表的复制内容(数据)

4.6 临时表的创建

CREATE TEMPORARY TABLE 表名(字段1 数据类型,字段2 数据类型[, ...] [, PRIMARY KEY (主键名)]);

创建方式与创建表完全一致,最大的区别是,临时表只在当前的数据库连接生效,当数据库连接断开或重新连接终端时,该临时表均失效,无法查看,但可以查询到。

create temporary table class1 (id int(6) zerofill primary key auto_increment,name varchar(20) not null,cardid int(18) not null unique key,hobby varchar(30),haoma int(11));

#解释
这条SQL语句用于创建一个临时表class1,临时表只在当前会话期间存在,会话结束后自动删除。临时表的具体结构如下:

id 字段:整数类型(int),设置了宽度为6且自动填充零(zerofill),这意味着即使实际值小于6位数,也会在其前面填充零以使总长度达到6位。同时,该字段被定义为主键(primary key)和自动递增(auto_increment),这意味着每当插入新行时,id字段的值会自动加1,且每一行的id值在整个临时表中必须是唯一的。

name 字段:变长字符串类型(varchar(20)),不允许存储NULL值(not null),最多可存储20个字符长度的字符串。

cardid 字段:整数类型(int),宽度为18,也不允许存储NULL值。该字段还被定义为唯一键(unique key),即在cardid列中的所有值必须独一无二,不可重复。

hobby 字段:变长字符串类型(varchar(30)),可以存储最多30个字符长度的兴趣爱好描述,允许存储NULL值。

haoma 字段:整数类型(int),宽度为11,可以存储不超过11位的整数电话号码,允许存储NULL值。

执行这条SQL语句后,将在当前数据库会话中创建一个临时表class1,具备上述五个字段和相应的约束条件。

4.7 清除表的两种方式比较

方式一:delete清空 
 delete from 表名;
方式二:truncate清空 
 truncate table 表名;  

两者区别:

(1)delete 清空属于按照行清空,一行一行进行,效率低,速度慢(对于表数据较多的情况) truncate 相当于删除表数据,保留表结构,重新创建一个与原表结构相同的表 

(2)当数据表中有自增型约束字段时,delete 清除表数据后,在插入数据时,自增字段的数值会接着被删除表数据的最后一个自增数,计数。(eg:被删除表数据最后一行id(自增),为10,再创建时,该id从11开始)。truncate 清空后,自增型字段会从1开始计数。

删除类型小结:

drop table table_name

  • 属于DDL
  • 不可回滚(无法恢复)
  • 不可带where
  • 表内容和结构删除
  • 删除速度快

truncate table table_name

  • 属于DDL
  • 不可回滚
  • 不可带where
  • 表内容删除
  • 删除速度快

delete from table_name

  • 属于DML
  • 可回滚(可恢复)
  • 可带where
  • 表结构在,表内容要看where执行的情况
  • 删除速度慢,需要逐行删除

不再需要一张表的时候,用drop
想删除部分数据行时候,用delete,并且带上where子句
保留表而删除所有数据的时候用 truncate

其它比较:
速度
drop> truncate > delete
安全性
delete 最好

5. mysql 中常见的约束

  • 主键约束(primary key) PK

主键具有唯一性,不可重复性,不可为空的特点。一般用于删除,查询时条件语句的条件。主键在一张表中只能有一个

  • 自增长约束(auto_increment)

该约束针对于整数类型的字段,当插入该字段数据为空时,系统会根据上一个数,自动加1

  • 非空约束(not null)

该约束到字段后,该字段中的数据插入不能为空

  • 唯一性约束(unique)

该约束添加后,该字段的数据每行均为唯一的,不可重复。唯一性约束可以在一张表中有多个

  • 默认值约束(default)

默认值约束,为该字段设置初始值,如果没有为该字段插入数据,就为初始值

  • 零填充约束(zerofill)

零填充针对整数型的字段,例如int默认为11位,除了填写的数字以外其他用零填充

  • 外键约束(foreign key)FK

外键约束,至少将两张表进行关联。我们将这两张表分为主表和从表,主表的主键作为从表的外键。增加数据时,先进行主表操作,如果增加的数据外键值在主表中没有,就要先在主表中添加。

若进行删除操作,就要先进行从表操作,只要将从表有关主表(主键值)全部清除后,才能清除该主表的主键值

二. 数据库用户管理

1. 登录用户的管理

1.1 登录用户的创建

明文密码创建用户格式:

CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];

#解释
'用户名':指定将创建的用户名.
'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录
  可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文';
若省略“IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)

加密密码创建用户:

 SELECT PASSWORD('密码');    #先获取加密的密码
 ​
 CREATE USER 'hyx2'@'localhost' IDENTIFIED BY PASSWORD '加密的密码';

1.2 查看用户密码的信息

用户信息存放在 mysql 数据库下的 user 表(MySQL 服务下存在一个系统自带的 mysql 数据库)。

去找到用户:

查看用户信息,创建后的用户保存在mysql数据库的user表里

use mysql;

select user,authentication_string,Host from user;

1.3  登录用户用户名的更改

重命名指定

rename user 'hyx'@'locahost' to 'hyx1'@'localhost'

1.4 修改用户密码

 set password = password('123456');

退出再登录看看

1.5 删除登录用户

drop user 'hyx1'@'localhost';

1.6 修改其他用户密码

set password for 'xhz'@'localhost' = password('123456');

普通用户只有修改自身密码的权限

root用户是超级管理员,它不仅可以修改自身密码,还能修改其他用户的密码。 

1.7 忘记root密码的解决方法

该操作必须是在数据库本机且为root用户,才可进行

① 修改 /etc/my.cnf 配置文件,免密登录mysql

② 重启数据库服务

③ 无密码登录之后,修改数据库用户中的 root 密码

update mysql.user SET AUTHENTICATION_STRING = PASSWORD('123') where user='root'
#用于更新MySQL数据库系统表mysql.user中的用户root的密码。AUTHENTICATION_STRING是MySQL 5.7.0以后版本中用于存储密码的字段名

④ 登录测试新密码

⑤ 撤销添加的免密码认证设置,重启数据库服务

2. 管理登录用户的权限

2.1 常见的用户权限

权限   权限说明   权限级别
CREATE    创建数据库、表或索引的权限    数据库、表或索引
DROP   删除数据库或表的权限    数据库或表
GRANT OPTION      赋予权限选项 数据库或表
REFERENCES   引用权限    数据库或表
ALTER    更改表的权限   数据表
DELETE     删除表数据的权限  数据表
INDEX     操作索引的权限   数据表
INSERT    添加表数据的权限   数据表
SELECT   查询表数据的权限   数据表
UPDATE   更新表数据的权限   数据表
CREATE VIEW      创建视图的权限 视图
SHOW VIEW      查看视图的权限 视图
ALTER ROUTINE    更改存储过程的权限   存储过程
CREATE ROUTINE   创建存储过程的权限    存储过程
EXECUTE    执行存储过程权限   存储过程
FILE     服务器主机文件的访问权限  文件管理
CREATE TEMPORARY TABLES      创建临时表的权限 服务器管理
LOCK TABLES   锁表的权限   服务器管理
CREATE USER     创建用户的权限 服务器管理
RELOAD       执行 flush privileges, refresh, reload 等刷新命令的权限服务器管理
PROCESS       查看进程的权限 服务器管理
REPLICATION CLIENT      查看主从服务器状态的权限  服务器管理
REPLICATION SLAVE      主从复制的权限 服务器管理
SHOW DATABASES    查看数据库的权限   服务器管理
SHUTDOWN     关闭数据库的权限   服务器管理
SUPER    超级权限    服务器管理
ALL [PRIVILEGES]    所有权限
USAGE       没有任何权限  

2.2 查看用户已有权限的操作

show grants;
#查看当前用户(自己)的权限

show grants for 'xhz'@'localhost';

#查看其他用户的权限

2.3 授权操作

[NO_AUTO_CREATE_USER], 即在grant语句中禁止创建空密码的账户,使用grant语法创建用户必须带上 “identified by”关键字设置账户密码,否则就被认为是非法的创建语句。 

2.3.1 对存在的用户进行授权
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];

权限列表:  用于列出授权使用的各种数据库操作,以逗号进行分隔如"select, insert,update"。 使用"all"表示所有权限(实际上部分权限仍无法使用,只包括大部分权限),可授权执行任何操作。

数据库名.表名:  用于指定授权操作的数据库和表的名称,其中可以使用通配符*。 例如,使用"mysql.*" 表示授权操作的对象为mysql数据库中的所有表。  ​  '用户名'@'来源地址':  用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。 来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址。

IDENTIFIED BY:  用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。

grant select,insert on study.class to 'xhz'@'localhost';

show grants for 'xhz'@'localhost';

2.3.2 对不存在的用户进行创建并授权 
 GRANT ALL PRIVILEGES ON *.* TO  '用户名'@'来源地址' IDENTIFIED BY '密码';

2.4 撤销用户权限

 revoke 权限列表/ALL on 库名.表名 from '用户名'@'来源地址';

2.5 用户的远程登录

用户授权

 grant all privileges on *.* to 'cnm'@'192.168.44.%' identified by '123';

总结:

查看数据库和表:

show databases;

use 库名;

show tables;

desc 表名;

desc 表名\G

show  table 表名;

创建及删除数据库和表:

create database 库名;

create table 表名(字段1 数据类型 [属性], 字段2 .....);

DROP TABLE [数据库名.]表名;

DROP DATABASE 数据库名;

表数据的增删改查:
insert into 表名 values (所有字段的值);

insert into 表名 (指定字段名称) values(字段的值);

delete from 表名 [where ...];

update 表名 set 字段=值[, 字段2=....] [where ...];

select 字段1[,字段2....] from 表名 [where ...];

select * from 表名;

### 回答1: Android SQLite数据库可以通过以下几种方式进行查看: 1. 使用Android Studio自带的Database Inspector工具,可以直接查看应用程序中的SQLite数据库。在Android Studio中,选择View -> Tool Windows -> Database Inspector,然后选择要查看的设备和应用程序即可。 2. 使用第三方SQLite数据库管理工具,例如SQLite Expert Personal、SQLite Manager等。这些工具可以直接连接到设备上的SQLite数据库,并提供了更多的功能,例如导入/导出数据、执行SQL语句等。 3. 在应用程序中使用SQLiteOpenHelper类提供的getReadableDatabase()或getWritableDatabase()方法获取SQLite数据库的实例,然后使用SQLiteDatabase类提供的查询方法进行查询。例如: ``` SQLiteOpenHelper dbHelper = new MyDatabaseHelper(context); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query("table_name", null, null, null, null, null, null); if (cursor.moveToFirst()) { do { // 处理查询结果 } while (cursor.moveToNext()); } cursor.close(); ``` 以上是三种常见的Android SQLite数据库查看方式,具体选择哪种方式取决于具体的需求和情况。 ### 回答2: Android SQLite 数据库是Android应用程序中最常用的数据库,主要用于数据存储和管理。在应用开发的过程中,开发人员需要不断的查看管理这些数据,以便及时修改和优化应用程序。Android提供了多种方式来查看管理SQLite数据库。 1. Android Studio 在Android Studio中,可以通过打开“Device File Explorer”,找到正在使用应用程序的设备,进入应用程序的“data/data/com.package.name/database”目录,即可找到应用程序的数据库,并进行查看管理。 2. ADB命令 ADB命令可以直接访问系统数据库,并在命令行界面对SQLite数据库进行操作。如: adb shell sqlite3 /data/data/com.package.name/databases/database_name.db 3. 第三方工具 Android平台上还有一些非常出色的第三方数据库管理工具,如SQLite Database Browser等,这些工具提供了更多的功能和选项,能够更加灵活和便捷地操作SQLite数据库。 总的来说,Android SQLite数据库查看管理涉及到多个方面,需要开发人员熟练掌握相关知识和技术,才能够更好地实现应用程序的开发和维护。 ### 回答3: 首先,Android SQLite数据库是一个轻量级的关系型数据库,用于存储应用程序的数据。通过SQLiteOpenHelper类创建和管理数据库。Android Studio提供了两个工具来查看管理SQLite数据库,分别是Device File Explorer和SQLite Explorer插件。 Device File Explorer 设备文件浏览器可以在Android模拟器或实际物理设备上查看应用程序数据,包括SQLite数据库文件。要使用设备文件浏览器,打开Android Studio并连接模拟器或物理设备。然后,选择菜单栏中的"View"-> "Tool Windows"-> "Device File Explorer"来打开设备文件浏览器。 在"Device File Explorer"窗口中,可以找到应用程序的包名并展开它,然后找到该应用程序的数据库文件,通常是以".db"或".sqlite"为扩展名。单击数据库文件,即可在右侧窗格中查看和下载数据库文件。 SQLite Explorer插件 SQLite Explorer是一款用于管理SQLite数据库的Android Studio插件。要使用它,打开Android Studio并选择菜单栏中的"File"-> "Settings"-> "Plugins"。在搜索栏中搜索SQLite Explorer,然后安装它并重新启动Android Studio。 安装成功后,可以在Android Studio右侧边栏中找到SQLite Explorer图标。单击该图标,即可打开插件并浏览SQLite数据库。在"Data Sources"选项卡中,可以添加数据库文件并对其进行操作,如查看表、索引和触发器,或者执行查询语句和更改数据。 总体而言,通过设备文件浏览器或SQLite Explorer插件,可以很容易地查看管理Android SQLite数据库。对于开发人员和测试人员来说,这些工具非常有用,可以快速查找和修复数据库问题和错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值