MySQL:增删改查、临时表、授权相关示例

news2024/12/23 17:08:51

目录

概念

数据完整性

主键

数据类型

精确数字

近似数字

字符串

二进制字符串

日期和时间

MySQL常用语句示例

SQL结构化查询语言

显示所有数据库

显示所有表

查看指定表的结构

查询指定表的所有列

创建一个数据库

创建表和列

插入数据记录

查询数据记录

修改表中数据

在mysql内修改root用户登录mysql的密码

在终端修改mysql的root用户登录密码

克隆

删除

delete

truncate

临时表

授权

授权用户

授权远程用户

查看指定账户的授权

撤销指定账户授权

Windows通过Navicat连接MySQL服务器


概念

数据完整性

数据的正确性

  • 数据完整性
    • 每一行必须是唯一的实体(每个实体必须唯一)
  • 域完整性
    • 检查每一列是否有效
  • 引用完整性
    • 确保所有表中数据的一致性,不允许引用不存在的值
  • 用户定义的完整性
    • 指定特定的业务规则

主键

  • 用于唯一标识表中的行数据
  • 由一个或多个字段组成
  • 具有唯一性
  • 不允许取空值(NULL)
  • 一个表只能有一个主键

数据类型

精确数字

近似数字

字符串

二进制字符串

日期和时间


MySQL常用语句示例

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言用于存取数据以及查询、更新和管理关系数据库系统。

SQL结构化查询语言

  • DDL数据定义语言
    • create
    • drop(针对数据库对象)
    • alter
  • DML数据操纵语言
    • insert
    • update
    • delete(针对表中的记录)
  • DQL数据查询语言
    • select
    • show
    • describe
  • DCL数据控制语言
    • grant
    • revoke
    • commit(事务)
    • rollback(回滚)

首先登录数据库,以便进行下一步实验

[root@localhost ~]# mysql -uroot -p
Enter password: 输入密码

显示所有数据库

在登录进数据库后,可以使用show databases;来列出所有数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
  • information_schema:数据库本身所需的信息(库、表信息)
  • mysql:程序运行时所需要的数据,主要是用户认证的信息

显示所有表

需要在数据库内输入show tables才能生效

进入mysql数据库
mysql> use mysql    # 不用加分号结尾
mysql> show tables;

查看指定表的结构

查看user表的结构

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |      

查询指定表的所有列

这里使用select语句查询user表的所有列,\G表示以垂直方式显示,代替默认的水平方式,水平方式输出会看起来很杂乱

mysql> select * from user\G;

创建一个数据库

create 类型 名称

mysql> create database auth;
Query OK, 1 row affected (0.00 sec)
mysql> use auth;    # 更改当前操作的数据库为auth
Database changed

创建表和列

使用create语句创建名为users表并添加两列数据

DEFAULT ' ':该列默认为空(这里表示密码默认为空)

创建完后,可以使用show tables;查看该表

mysql> create table users (user_name char(16) not null, user_passwd char(48) default '', primary key(user_name));
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+----------------+
| Tables_in_auth |
+----------------+
| users          |
+----------------+

插入数据记录

在users表的指定列中插入信息

insert语法:insert into 表名 (列名1, 列名2) values (值1, 值2);

mysql>use auth;
mysql>insert into users(user_name, user_passwd) values ('tom', '123456')
mysql>insert into users(user_name, user_passwd) values ('jerry', '654321');

查询数据记录

查询users表中所有列,以及添加where过滤指定列的所有信息

mysql> select * from auth.users;
+-----------+-------------+
| user_name | user_passwd |
+-----------+-------------+
| jerry     | 654321      |
| tom       | 123456      |
+-----------+-------------+

mysql> select user_name, user_passwd from auth.users where user_name='tom';
+-----------+-------------+
| user_name | user_passwd |
+-----------+-------------+
| tom       | 123456      |
+-----------+-------------+

修改表中数据

修改auth数据库中users表中的user_name为tom的行中的user_passwd列的值为000,并且使用加密算法加密该值

然后使用select语句查询,可以看到user_passwd列的值被加密了

mysql> update auth.users set user_passwd=password('000') where user_name='tom';
mysql> select * from auth.users;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| jerry     | 654321                                    |
| tom       | *B66FEB4CF5216D971C066EB920EC03B27A5A3F40 |
+-----------+-------------------------------------------+
在mysql内修改root用户登录mysql的密码

更新mysql库下user表中的authentication_string列,调用password对密码进行加密,where条件为root用户

使用flush privileges;命令重新加载授权表,使当前对授权的更改生效,而无需重新启动MySQL服务。

mysql> update mysql.user set authentication_string=password('123456') where user='root';
mysql> flush privileges;
[root@localhost ~]# mysql -uroot -p
Enter password: 输入刚才设置的密码
mysql>
成功登录
在终端修改mysql的root用户登录密码
[root@localhost ~]# mysqladmin -uroot -p123456 password 'pwd123'
[root@localhost data]# mysql -uroot -p
Enter password: 输入密码
mysql>

克隆

利用users表克隆一个名为user01的表,但是克隆后的新表是没有内容的

mysql> create table user01 like auth.users;

mysql> show tables;
+----------------+
| Tables_in_auth |
+----------------+
| user01         |
| users          |
+----------------+

将users表的内容全部插入到user01新表中

mysql> insert into user01 select * from auth.users;

mysql> select * from user01;
+-----------+-------------+
| user_name | user_passwd |
+-----------+-------------+
| tom       | 123456      |
+-----------+-------------+

删除

delete

使用delete from 表名 where 列名来删除指定行

如果不在结尾加where,是删除指定的表。可以自由搭配

mysql> delete from auth.users where user_name='jerry';

mysql> select * from auth.users;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| tom       | *B66FEB4CF5216D971C066EB920EC03B27A5A3F40 |
+-----------+-------------------------------------------+

truncate

mysql> truncate table user01;

mysql> select * from user01;
Empty set (0.00 sec)
  • truncate table 表名;
    • 功能:truncate table用于快速且高效地删除表中的所有数据,但保留表的结构(即表定义)。
    • 操作:它是一个DDL(数据定义语言)命令,不是一个事务,并且不能通过回滚来恢复删除的数据。
    • 速度:由于不记录删除的每一行数据,而是直接释放数据页,因此truncate table操作通常比delete from更快。
  • delete from 表名;
    • 功能:delete from用于从表中删除指定的行数据。
    • 操作:它是一个DML(数据操作语言)命令,它可以作为一个事务来执行,并且可以通过事务回滚来撤销删除操作。
    • 记录:delete from操作会将每一行删除操作的记录写入事务日志,并且在执行时会触发触发器(如果有的话)。
  • 延续id的区别
    • 如果使用delete清除一个表后,添加新内容的id会延续之前的id。
    • 而使用truncate清除一个表后,添加新内容的id会还原,从1开始。

临时表

临时表用于临时存放一些数据,如果退出mysql管理系统,再进来就找不到在临时表中存储的数据了

mysql> create temporary table test(id int(10) not null auto_increment, name char(116) character set utf8 collate utf8_bin not null primary key (id));
mysql> insert into test (name) values ('tom');
mysql> select * from test;
+----+------+
| id | name |
+----+------+
|  1 | tom  |
+----+------+

退出后,再进入。找不到test临时表

mysql> quit

[root@localhost data]# mysql -uroot -p
Enter password: 输入密码

mysql> select * from test;
ERROR 1046 (3D000): No database selected

授权

授权是一组权限的集合,比如授权select命令给某个用户,这里select就是一个角色,只是这个角色的名称叫select

权限是单个的,但是授权这个操作是将一组权限的集合分配给用户

比如使用 grant select on 库名.表名 to '用户名'@'localhost'; 是授予指定用户可以在指定数据库中的指定表中执行select的权限

授权用户

指定tom用户在本机只能使用select语句查询访问auth库中的所有表

mysql> grant select on auth.* to 'tom'@'localhost' identified by '123456';

这里的localhost表示授权本机

根据需求和实际情况也可以写成IP地址或网段,网段的格式在主机部分要写成%(192.168.10.%)或允许所有主机('root'@'%'

此时查询mysql库中的user表可以看到刚刚授权的tom用户的授权信息被生成出来了,此时退出mysql

mysql> select * from mysql.user\G;
*************************** 4. row ***************************
                  Host: localhost    # 允许该用户在什么地方登录
                  User: tom    # 账号名
                  # 省略部分信息

                plugin: mysql_native_password    # 当你对该用户设置密码时,利用该插件对密码进行加密
 authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9    # 加密过的密码
      password_expired: N
 password_last_changed: 2024-07-23 22:02:46
     password_lifetime: NULL
        account_locked: N

mysql> exit

在终端使用tom账户也可以登录了

再使用select语句查询授权过的auth库内的表,可以查询

如果查询别的库的信息,就不行了

[root@localhost ~]# mysql -utom -p123456
mysql>
mysql> select * from auth.users;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| tom       | *B66FEB4CF5216D971C066EB920EC03B27A5A3F40 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from mysql.user;
ERROR 1142 (42000): SELECT command denied to user 'tom'@'localhost' for table 'user'

授权远程用户

指定授权任何主机(%)都可以使用root用户登录mysql,并且拥有所有库的所有表的访问权限

这里的123456密码,是远程主机登录的密码,而不是本地主机登录的密码

mysql> grant all on *.* to root@'%' identified by '123456';
mysql> flush privileges;

在102主机安装MySQL客户端

[root@localhost ~]# yum -y install mysql
[root@localhost ~]# mysql -uroot -p123456 -h 192.168.10.101 -P 3306
MySQL [(none)]>

查看指定账户的授权

使用show命令查看指定账户的权限

mysql> show grants for 'tom'@'localhost';
+-----------------------------------------------+
| Grants for tom@localhost                      |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO 'tom'@'localhost'       |
| GRANT SELECT ON `auth`.* TO 'tom'@'localhost' |
+-----------------------------------------------+

撤销指定账户授权

首先确保是有mysql管理权的用户登录mysql,比如root

如果完成了上方的操作,要执行这里的命令记得exit退出,换成root用户登录进mysql

这里使用revoke语句从'tom'@'localhost'用户上撤销在auth数据库下所有表的所有权限

revoke的语法: revoke 权限 on 库名.表名 from '用户名'@'地址'; 

这里的权限就是你授权的权限,比如select、insert、update、delete等

[root@localhost ~]# mysql -uroot -p
Enter password: 输入密码
mysql> revoke all on auth.* from 'tom'@'localhost';

Windows通过Navicat连接MySQL服务器

前提是授权时将地址设为指定IP或%

在计算机管理开启MySQL服务

软件内左上角连接 ——》MySQL

主机IP填为MySQL服务器的IP,密码填为在MySQL服务器设置的

然后可以在左边列表看到连接的MySQL服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1953597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游泳馆押金原路退回源码解析

<dl class"list "><dd class"address-wrapper dd-padding"><div class"address-container"><cyberdiv style"color:#f0efed;font-size:14px;float:right;position:absolute;right:10px;top: 2px;">●●●<…

正点原子imx6ull-mini-linux字符驱动模板(0)

1&#xff1a;驱动模块的加载和卸载 module_init(xxx_init); //注册模块加载函数 module_exit(xxx_exit); //注册模块卸载函数 1.1&#xff1a;新建一个用于存放linux驱动的目录,当然这个目录位置没有要求。创建要加载的模块chrbase.c cd ~/linux/drivers makdir linux_driv…

【安卓】Android Studio简易计算器(实现加减乘除,整数小数运算,正数负数运算)

目录 前言 运算效果 一、创建一个新的项目 二、编写xml文件&#xff08;计算器显示页面&#xff09; 三、实现Java运算逻辑 ​编辑 完整代码 xml文件代码&#xff1a; Java文件代码&#xff1a; 注&#xff1a; 前言 随着移动互联网的普及&#xff0c;手机应用程序已…

fetchApi === 入门篇

目录 fetch 基本认知 fetch 如何使用 Response对象&#xff08;了解&#xff09; 常见属性 常见方法 fetch 配置参数 fetch发送post请求 fetch 函数封装 fetch 实战 - 图书管理案例 渲染功能 添加功能 删除数据 完整代码 fetch 基本认知 思考&#xff1a; 以前开发…

PCIe总线-Linux内核PCIe软件框架分析(十一)

1.简介 Linux内核PCIe软件框架如下图所示&#xff0c;按照PCIe的模式&#xff0c;可分为RC和EP软件框架。RC的软件框架分为五层&#xff0c;第一层为RC Controller Driver&#xff0c;和RC Controller硬件直接交互&#xff0c;不同的RC Controller&#xff0c;其驱动实现也不相…

永结无间Ⅰ--基于 LLM 的 AGI

在过去几周&#xff0c;传奇人物 Francois Chollet 发起的ARC 挑战引起了不小的轰动。这项挑战让很多 AI 研究人员感到困惑&#xff0c;它表明了所有 AI 系统都存在泛化能力不足的问题。ARC 上上一次 SOTA AI 的准确率约为 34%&#xff0c;而在同一挑战中&#xff0c;Mechanica…

【React】Context机制跨层传递数据详解

文章目录 一、React Context的概念二、创建和使用Context1. 创建Context2. 使用Provider提供数据3. 使用Consumer获取数据 三、使用useContext Hook四、动态更新Context值五、Context的实际应用场景1. 主题切换2. 用户认证状态 六、注意事项 在开发React应用时&#xff0c;我们…

【C语言】深入探讨数组传参

一、数组传参简介 在C语言中&#xff0c;数组传参是一个常见的操作&#xff0c;尤其是在处理大量数据或需要多次访问相同数据集时。理解如何传递数组以及这些方法之间的差异是编写高效和安全代码的关键。在这篇博客中&#xff0c;我们将详细讨论C语言中数组传参的几种常见方法&…

【网络】应用层协议(自定义协议)(序列和反序列化)

应用层协议&#xff08;自定义协议&#xff09;&#xff08;序列和反序列化&#xff09; 一、引言--应用层的使用二、应用层1、网络版本计算器&#xff08;1&#xff09;协议定制和序列反序列化&#xff08;2&#xff09;网络版计算器协议定制i、封装有效载荷&#xff08;默认上…

数据结构——单链表OJ题(上)

目录 一、移除链表元素 1.思路 2.注意 3.解题 二、反转链表 思路1&#xff1a;三指针翻转法 &#xff08;1&#xff09;注意 &#xff08;2&#xff09;解题 思路2&#xff1a;头插法 &#xff08;1&#xff09;注意 &#xff08;2&#xff09;解题 三、链表的中间结…

depcheck 前端依赖检查

介绍 depcheck 是一款用于检测项目中 未使用依赖项 的工具。 depcheck 通过扫描项目文件&#xff0c;帮助你找出未被引用的依赖&#xff0c;从而优化项目。 优势&#xff1a; 简单易用: 仅需几个简单的命令&#xff0c;就能够扫描并列出未使用的依赖项&#xff0c;让你快速了…

The Schematic workflow failed. See above.

在使用 ng new 新建Angular项目的时候会报一个错误&#xff1a;The Schematic workflow failed. See above. 解决办法&#xff1a; 只需要在后面加上 --skip-install 参数&#xff0c;就不会报错了。 ng new myapp --skip-install

打工人电脑里都需要的远程控制软件有哪些?这4款不能错过

不巧前几天台风&#xff0c;实在没办法到公司&#xff0c;但是项目还得继续&#xff0c;这时候远程控制电脑的技巧可谓是帮了我大忙了。不知道平常的你偶尔会不会也需要远程控制电脑的操作&#xff0c;如果有就继续看下去吧。 1.向日魁远程控制 直通车>>https://down.o…

AJAX-Promise 详解

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 前言 一、Promise基本概念 1.1 定义 1.2 状态 1.3 构造函数 二、Promise基本用法 2.1 then() 2.2 ca…

ThinkPHP一对一关联模型的运用(ORM)

一、序言 最近在写ThinkPHP关联模型的时候一些用法总忘&#xff0c;我就想通过写博客的方式复习和整理下一些用法。 具体版本&#xff1a; topthink/framework&#xff1a;6.1.4topthink/think-orm&#xff1a;2.0.61 二、实例应用 1、一对一关联 1.1、我先设计了两张表&#x…

根据题意写出完整的css,html和js代码【购物车模块页面及功能实现】

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 问题描述 根据题意写出完…

基于微信小程序+SpringBoot+Vue的社区超市管理系统(带1w+文档)

基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 为了让商品信息的管理模式进行升级&#xff0c;也为了更好的维护商品信息&#xff0c;社区超市管理系统的开发运用就显得很有必要&#xff0c;因为它不仅可…

C# 植物大战僵尸

Winform 版本开发 高效率、流畅植物大战僵尸 git地址&#xff1a;冯腾飞/植物大战僵尸

go语言day19 使用git上传包文件到github Gin框架入门

git分布式版本控制系统_git切换head指针-CSDN博客 获取请求参数并和struct结构体绑定_哔哩哔哩_bilibili &#xff08;gin框架&#xff09; GO: 引入GIn框架_go 引入 gin-CSDN博客 使用git上传包文件 1&#xff09;创建一个github账户&#xff0c;进入Repositories个人仓…

我在百科荣创企业实践——简易函数信号发生器(6)

对于高职教师来说,必不可少的一个任务就是参加企业实践。这个暑假,本人也没闲着,报名参加了上海市电子信息类教师企业实践。7月8日到13日,有幸来到美丽的泉城济南,远离了上海的酷暑,走进了百科荣创科技发展有限公司。在这短短的一周时间里,我结合自己的教学经验和企业的…