实验8 数据库完整性、安全设计

这篇具有很好参考价值的文章主要介绍了实验8 数据库完整性、安全设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第1关 执行 CREATE USER 创建以2022100904为用户名的用户,同时设置其密码为root1234

任务描述
执行 CREATE USER 创建以2022100904为用户名的用户,同时设置其密码为root1234

相关知识
创建用户的语法为如下:

CREATE USER '用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY  '密码';
SELECT mysql.user.Host, mysql.user.User FROM mysql.user WHERE USER = '2022100904';

第2关 给予创建的用户2022100904在mydata数据库中授予"J" 表 SELECT 权限

任务描述
给予创建的用户2022100904mydata数据库中授予"J"SELECT 权限(注意创建权限时的用户名为'用户名'@'localhost'),不允许转授此权限给其它用户。

相关知识
1、现已创建以2022100904为用户名的用户。
2、现在mydata数据库中已构建J表。
3、使用 GRANT 语句将对象权限授予用户和角色。
对象权限的授权语句语法为:

GRANT <特权> ON [<对象类型>] <对象> TO <用户或角色>{,<用户或角色>} [WITH GRANT OPTION]; 
<特权>::= ALL [PRIVILEGES] | <动作> {, <动作>} 
<动作>::= SELECT[<列清单>] | INSERT[<列清单>] | UPDATE[<列清单>] | DELETE | REFERENCES[<列清单>] | EXECUTE| READ| WRITE| USAGE 
<列清单>::= <列名> {,<列名>} 
<对象类型>::= TABLE | VIEW | PROCEDURE | PACKAGE | CLASS | TYPE | SEQUENCE | DIRECTORY | DOMAIN 
<对象> ::= [<模式名>.]<对象名> 
<对象名> ::= <表名> | <视图名> | <存储过程/函数名> |<包名> |<类名> |<类型名> |<序列名> | <目录名> | <域名> 
<用户或角色>::= <用户名> | <角色名>

使用说明
(1)授权者必须是具有对应对象权限以及其转授权的用户;
(2)如未指定对象的<模式名>,模式为授权者所在的模式。DIRECTORY 为非模式对象,没有模式;
(3)如设定了对象类型,则该类型必须与对象的实际类型一致,否则会报错;
(4)带 WITH GRANT OPTION 授予权限给用户时,则接受权限的用户可转授此权限;
(5)不带列清单授权时,如果对象上存在同类型的列权限,会全部自动合并;
(6)对于用户所在的模式的表,用户具有所有权限而不需特别指定。 当授权语句中使用了 ALL PRIVILEGES 时,会将指定的数据库对象上所有的对象权限都授予被授权者。

GRANT SELECT ON TABLE J TO '2022100904'@'localhost';

第3关 给予创建的用户2022100904、2022100908授予"J"表 的ALL PRIVILEGES权限

任务描述
给予创建的用户20221009042022100908mydata数据库中授予"J"ALL PRIVILEGES权限(注意创建权限时的用户名为'用户名'@'localhost'),不允许转授此权限给其它用户。

GRANT ALL ON TABLE J TO '2022100904'@'localhost','2022100908'@'localhost';

第4关 给予创建的用户2022100904在mydata数据库中授予“J”表的UPDATE和INSERT权限

任务描述
给予创建的用户2022100904mydata数据库中授予“J”表的UPDATEINSERT权限,允许转授此权限给其它用户。
相关知识
1、现已创建用户名为2022100904的用户。
2、工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。
J表如下图:
实验8 数据库完整性、安全设计
现已在mydata数据库中已构建J表,结构信息如下:实验8 数据库完整性、安全设计
3、使用 GRANT 语句将对象权限授予用户和角色。
对象权限的授权语句语法为:

GRANT <特权> ON [<对象类型>] <对象> TO <用户或角色>{,<用户或角色>} [WITH GRANT OPTION]; 
<特权>::= ALL [PRIVILEGES] | <动作> {, <动作>} 
<动作>::= SELECT[<列清单>] | INSERT[<列清单>] | UPDATE[<列清单>] | DELETE | REFERENCES[<列清单>] | EXECUTE| READ| WRITE| USAGE 
<列清单>::= <列名> {,<列名>} 
<对象类型>::= TABLE | VIEW | PROCEDURE | PACKAGE | CLASS | TYPE | SEQUENCE | DIRECTORY | DOMAIN 
<对象> ::= [<模式名>.]<对象名> 
<对象名> ::= <表名> | <视图名> | <存储过程/函数名> |<包名> |<类名> |<类型名> |<序列名> | <目录名> | <域名> 
<用户或角色>::= <用户名> | <角色名>
GRANT UPDATE,INSERT 
ON TABLE J 
TO '2022100904'@'localhost'
WITH GRANT OPTION;

第5关 回收用户2022100904在mydata数据库中授予的 “J” 表 SELECT权限

任务描述
回收用户2022100904mydata数据库中授予的 "J"SELECT权限(回收权限时的用户名为'用户名'@'localhost')。
相关知识
1、现已创建以2022100904为用户名的用户。
2、现在mydata数据库中已构建J表。
3、已授予用户2022100904mydata数据库中的 "J"SELECT 权限
4、使用 REVOKE 语句回收已授予的数据库对象的权限
对象权限的回收语句语法为:

REVOKE [GRANT OPTION FOR] <特权> ON [<对象类型>]<对象> FROM <用户或角色> {,<用户或角色>} [<回收选项>];
<特权>::= ALL [PRIVILEGES] | <动作> {, <动作>}
<动作>::= SELECT | INSERT | UPDATE | DELETE | REFERENCES | EXECUTE | READ | WRITE | USAGE
<对象类型>::= TABLE | VIEW | PROCEDURE | PACKAGE | CLASS | TYPE | SEQUENCE | DIRECTORY | DOMAIN
<对象> ::= [<模式名>.]<对象名>
<对象名> ::= <表名> | <视图名> | <存储过程/函数名> |<包名> |<类名> |<类型名> | <序列名> | <目录名> | <域名>
<用户或角色>::= <用户名> | <角色名>
<回收选项> ::= RESTRICT | CASCADE

使用说明
(1)权限回收者必须是具有回收相应对象权限以及转授权的用户;
(2)回收时不能带列清单,若对象上存在同类型的列权限,则一并被回收;
(3)使用 GRANT OPTION FOR 选项的目的是收回用户或角色权限转授的权利,而不回收用户或角色的权限;并且 GRANT OPTION FOR 选项不能和 RESTRICT 一起使用,否则会报错;
(4)在回收权限时,设定不同的回收选项,其意义不同。 若不设定回收选项,无法回收授予时带 WITH GRANT OPTION 的权限,但也不会检查要回收的权限是否存在限制; 若设定为 RESTRICT,无法回收授予时带 WITH GRANT OPTION 的权限,也无法回收存在限制的权限,如角色上的某权限被别的用户用于创建视图等; 若设定为 CASCADE,可回收授予时带或不带 WITH GRANT OPTION 的权限,若带 WITH GRANT OPTION 还会引起级联回收。利用此选项时也不会检查权限是否存在限制。另外,利用此选项进行级联回收时,若被回收对象上存在另一条路径授予同样权限给该对象时,则仅需回收当前权限。
用户A给用户B授权且允许其转授,用户 B 将权限转授给用户 C。当用户 A 回收用户 B 的权限的时候必须加 CASCADE 回收选项。

REVOKE SELECT 
ON TABLE J 
FROM '2022100904'@'localhost';

第6关 回收用户2022100904、2022100908在mydata数据库的中授予 的J表ALL PRIVILEGES权限

任务描述
回收账号20221009042022100908mydata数据库的中授予 的JALL PRIVILEGES权限(注意回收权限时的用户名为'用户名'@'localhost'

REVOKE ALL
ON TABLE J 
FROM '2022100904'@'localhost','2022100908'@'localhost';

第7关 回收用户2022100904在mydata数据中授予的“J”表UPDATE和INSERT的权限

任务描述
回收用户2022100904mydata数据中授予的“J”UPDATEINSERT的权限。(注意回收权限时的用户名为'用户名'@'localhost'

REVOKE UPDATE,INSERT 
ON TABLE J 
FROM '2022100904'@'localhost';

第8关 创建角色名为 R1的角色

任务描述
创建角色 'R1'
相关知识
创建用户的语法为如下:

CREATE ROLE '角色名';
CREATE ROLE 'R1';

第9关 给予创建的角色R1在mydata数据库中授予"J" 表 的SELECT 、UPDATE、INSERT权限

任务描述
给予创建的角色R1mydata数据库中授予"J" 表 的SELECTUPDATEINSERT权限。
相关知识
1、现已创建角色R1
2、现在mydata数据库中已构建J表。
3、使用 GRANT 语句将对象权限授予用户和角色。
对象权限的授权语句语法为:

GRANT <特权> ON [<对象类型>] <对象> TO <用户或角色>{,<用户或角色>} [WITH GRANT OPTION]; 
<特权>::= ALL [PRIVILEGES] | <动作> {, <动作>} 
<动作>::= SELECT[<列清单>] | INSERT[<列清单>] | UPDATE[<列清单>] | DELETE | REFERENCES[<列清单>] | EXECUTE| READ| WRITE| USAGE 
<列清单>::= <列名> {,<列名>} 
<对象类型>::= TABLE | VIEW | PROCEDURE | PACKAGE | CLASS | TYPE | SEQUENCE | DIRECTORY | DOMAIN 
<对象> ::= [<模式名>.]<对象名> 
<对象名> ::= <表名> | <视图名> | <存储过程/函数名> |<包名> |<类名> |<类型名> |<序列名> | <目录名> | <域名> 
<用户或角色>::= <用户名> | <角色名>

使用说明
(1)授权者必须是具有对应对象权限以及其转授权的用户;
(2)如未指定对象的<模式名>,模式为授权者所在的模式。DIRECTORY 为非模式对象,没有模式;
(3)如设定了对象类型,则该类型必须与对象的实际类型一致,否则会报错;
(4)带 WITH GRANT OPTION 授予权限给用户时,则接受权限的用户可转授此权限;
(5)不带列清单授权时,如果对象上存在同类型的列权限,会全部自动合并;
(6)对于用户所在的模式的表,用户具有所有权限而不需特别指定。 当授权语句中使用了 ALL PRIVILEGES 时,会将指定的数据库对象上所有的对象权限都授予被授权者。

GRANT SELECT,UPDATE,INSERT 
ON TABLE J 
TO R1 ; 

第10关 给予创建的用户2022100904授予角色R1权限

任务描述
给予创建的用户2022100904授予角色R1权限。

相关知识
1、现已创建用户2022100904
2、现已创建角色R1,角色R1mydata数据库中被授予"J" 表 的SELECTUPDATEINSERT权限。
3、现在mydata数据库中已构建J表。
4、授予用户角色权限语法:

GRANT'角色名' TO '用户名'@'localhost';
GRANT 'R1' TO '2022100904'@'localhost';

第11关 给予已授权限的角色R1在mydata数据库中再次授予"J" 表 的DELETE权限

任务描述
给予已授权限的角色R1mydata数据库中再次授予"J" 表 的DELETE权限。

相关知识
1、角色R1在mydata数据库中被授予"J" 表 的SELECTUPDATEINSERT权限。。
2、现在mydata数据库中已构建J表。
3、使用 GRANT 语句将对象权限授予用户和角色。

GRANT DELETE
ON TABLE J 
TO R1 ; 

第12关 回收角色R1 对 J 表的 INSERT 权限

任务描述
回收角色R1J表的 INSERT 权限。

相关知识
1、角色R1mydata数据库中被授予"J" 表 的SELECTUPDATEINSERTDELETE权限。
2、现在mydata数据库中已构建J表。
3、使用 REVOKE 语句回收已授予的数据库对象的权限
对象权限的回收语句语法为:

REVOKE [GRANT OPTION FOR] <特权> ON [<对象类型>]<对象> FROM <用户或角色> {,<用户或角色>} [<回收选项>];
<特权>::= ALL [PRIVILEGES] | <动作> {, <动作>}
<动作>::= SELECT | INSERT | UPDATE | DELETE | REFERENCES | EXECUTE | READ | WRITE | USAGE
<对象类型>::= TABLE | VIEW | PROCEDURE | PACKAGE | CLASS | TYPE | SEQUENCE | DIRECTORY | DOMAIN
<对象> ::= [<模式名>.]<对象名>
<对象名> ::= <表名> | <视图名> | <存储过程/函数名> |<包名> |<类名> |<类型名> | <序列名> | <目录名> | <域名>
<用户或角色>::= <用户名> | <角色名>
<回收选项> ::= RESTRICT | CASCADE

使用说明
(1)权限回收者必须是具有回收相应对象权限以及转授权的用户;
(2)回收时不能带列清单,若对象上存在同类型的列权限,则一并被回收;
(3)使用 GRANT OPTION FOR 选项的目的是收回用户或角色权限转授的权利,而不回收用户或角色的权限;并且 GRANT OPTION FOR 选项不能和 RESTRICT 一起使用,否则会报错;
(4)在回收权限时,设定不同的回收选项,其意义不同。 若不设定回收选项,无法回收授予时带 WITH GRANT OPTION 的权限,但也不会检查要回收的权限是否存在限制; 若设定为RESTRICT,无法回收授予时带 WITH GRANT OPTION 的权限,也无法回收存在限制的权限,如角色上的某权限被别的用户用于创建视图等; 若设定为 CASCADE,可回收授予时带或不带
WITH GRANT OPTION 的权限,若带 WITH GRANT OPTION 还会引起级联回收。利用此选项时也不会检查权限是否存在限制。另外,利用此选项进行级联回收时,若被回收对象上存在另一条路径授予同样权限给该对象时,则仅需回收当前权限。
用户A给用户B授权且允许其转授,用户 B 将权限转授给用户 C。当用户 A 回收用户 B 的权限的时候必须加 CASCADE 回收选项。

REVOKE INSERT 
ON TABLE J 
FROM R1 ; 

第13关 通过角色R1回收用户2022100904的被授予J表的SELECT 、UPDATE、INSERT权限

任务描述
通过角色R1回收用户2022100904的被授予J表的SELECTUPDATEINSERT权限。

相关知识
1、现已创建用户2022100904
2、现已创建角色R1,角色R1mydata数据库中被授予J表 的SELECTUPDATEINSERT权限。
3、用户2022100904已被授予角色R1权限。
4、现在mydata数据库中已构建J表。
5、回收用户角色权限语法:

REVOKE '角色名' FROM '用户名'@'localhost';
REVOKE 'R1' FROM '2022100904'@'localhost';

第14关 编写一个名为INSERT_S的触发器,在S表执行 INSERT 语句后被激发

任务描述
编写一个名为INSERT_S的触发器,在S表执行 INSERT 语句后被激发,此触发器将新供应商的SNOSNAMESTATUSCITY及执行此操作的用户(USER)插入N_S表,N_S表比S表增添操作用户一列。
相关知识
1、供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成.
S表如下图:
实验8 数据库完整性、安全设计
现已构建S表,结构信息如下:
实验8 数据库完整性、安全设计
2、N_S表由供应商的SNOSNAMESTATUSCITY及执行此操作的用户USER组成,现已构建该表,结构信息如下:
实验8 数据库完整性、安全设计
3、Mysql触发器语法:
实验8 数据库完整性、安全设计
创建触发器样例:删除tab1表记录后自动将tab2表中对应的记录删去。
实验8 数据库完整性、安全设计
注意:
1、获取用户名称的函数为USER();
实验8 数据库完整性、安全设计

DELIMITER $$
CREATE TRIGGER INSERT_S
AFTER INSERT ON S
FOR EACH ROW
BEGIN
INSERT INTO N_S (SNO,SNAME,STATUS,CITY,USER)VALUES(NEW.SNO,NEW.SNAME,NEW.STATUS,NEW.CITY,USER());
END $$
DELIMITER ;

第15关 编写一个名为UPDATE_S的触发器,检查S表的STATUS,只允许0-100之间,如果超过100后,改为100。

任务描述
编写一个名为UPDATE_S的触发器,检查S表的STATUS,只允许0-100之间,超过100后,改为100

DELIMITER $
CREATE TRIGGER UPDATE_S BEFORE                        
UPDATE ON S
FOR EACH ROW
BEGIN
    IF NEW.STATUS>100 
    THEN SET NEW.STATUS=100;
    END IF;
END$
DELIMITER ;

第16关 编写一个名为UPDATE_SPJ的触发器,当SPJ表中有更新某条记录时,自动更新表SPJ_SUMQTY表

任务描述
编写一个名为UPDATE_SPJ的触发器,当SPJ表中有更新某条记录时,自动更新表SPJ_SUMQTY表。
相关知识
1、供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY
SPJ表如下图:
实验8 数据库完整性、安全设计
现已构建SPJ表,结构信息如下:
实验8 数据库完整性、安全设计
2、SPJ_SUMQTY表为工程零件数量统计表,由工程项目代码(JNO)、零件代码(PNO)、统计供应数量SUMQTY组成,其中SUMQTYSPJ表中的工程项目代码(JNO)、零件代码(PNO)、供应数量(QTY),根据JNOPNO汇总得到。
SPJ_SUMQTY表如下图:
实验8 数据库完整性、安全设计
现已构建SPJ_SUMQTY表,结构信息如下:
实验8 数据库完整性、安全设计

DELIMITER $$
CREATE TRIGGER UPDATE_SPJ
AFTER UPDATE ON SPJ
FOR EACH ROW
BEGIN
    UPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY + NEW.QTY - OLD.QTY 
    WHERE PNO = NEW.PNO AND JNO = NEW.JNO;
END $$
DELIMITER;

第17关 编写一个名为DELETE_SPJ的触发器,当SPJ表中有删除某条记录时,自动更新表SPJ_SUMQTY表

任务描述
编写一个名为DELETE_SPJ的触发器,当SPJ表中有删除某条记录时,自动更新表SPJ_SUMQTY表。

DELIMITER $$
CREATE TRIGGER DELETE_SPJ
AFTER DELETE ON SPJ
FOR EACH ROW
BEGIN
    UPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY - OLD.QTY 
    WHERE SPJ_SUMQTY.PNO = OLD.PNO AND SPJ_SUMQTY.JNO = OLD.JNO;
    DELETE FROM SPJ_SUMQTY WHERE SPJ_SUMQTY.SUMQTY <=0;
END $$
DELIMITER ;

第18关 编写一个名为INSERT_SPJ的触发器,当SPJ表中有插入某条记录时,自动更新表SPJ_SUMQTY表

任务描述
编写一个名为INSERT_SPJ的触发器,当SPJ表中有插入某条记录时,自动更新表SPJ_SUMQTY表。文章来源地址https://www.toymoban.com/news/detail-487843.html

DELIMITER $$
CREATE TRIGGER INSERT_SPJ
AFTER INSERT ON SPJ
FOR EACH ROW
BEGIN
    UPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY + NEW.QTY 
    WHERE SPJ_SUMQTY.PNO = NEW.PNO AND SPJ_SUMQTY.JNO =NEW.JNO;
    IF NEW.JNO NOT IN (SELECT JNO FROM SPJ_SUMQTY)
    OR NEW.PNO NOT IN (SELECT PNO FROM SPJ_SUMQTY)
        THEN INSERT INTO SPJ_SUMQTY VALUES (NEW.JNO,NEW.PNO,NEW.QTY);
    END IF;
END $$
DELIMITER ;

到了这里,关于实验8 数据库完整性、安全设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库系统概论—安全、完整性

    数据库的安全性指保护数据库以防 不合法 使用所造成的数据泄露、更改或破坏 2.1用户身份鉴别 静态口令鉴别 动态口令鉴别 生物鉴别特征 智能卡鉴别 2.2存取控制 自主存取控制:给用户限权(DAC,C1级) 强制存取控制:给数据库对象一定的密级(MAC,B1级) 2.3自主存取控制方法(授

    2024年02月03日
    浏览(19)
  • 【MySQL】数据库完整性和安全性

    目录   一、完整性 1.概念 2.sql语言支持的两种约束     2.1静态约束          撤销追加约束          断言     2.3动态约束           触发器 二、安全性 用DBMS对数据库实现的两个特性  1.概念 指dbms保证的db的一种特性,在任何情况下的正确性、有效性、一致性 原理图

    2023年04月24日
    浏览(53)
  • MySQL数据库完整性

    数据库的完整性是指数据的正确性和相容性。 数据的正确性是指数据符合现实世界语义,反映当前实际情况;数据的相容性是指数据库在同一对象的不同关系表中的数据是符合逻辑的。 数据的完整性:为了防止数据库中存在不和语义的数据 数据的安全性:为了保护数据库防

    2024年02月15日
    浏览(21)
  • 深入理解数据库事务:确保数据完整性与一致性

    在现代信息系统中,数据是至关重要的资产之一。作为一名后端开发人员,与数据库的交道必不可少,为了确保数据的完整性、一致性和可靠性,数据库引入了事务的概念。本次将带您深入了解数据库事务的重要性、特性以及如何在应用程序中正确地使用事务来维护数据的稳

    2024年02月12日
    浏览(19)
  • 数据安全—数据完整性校验

    1、数据安全保障三要素即 保密性 完整性、可用性 机密性:要求数据不被他人轻易获取,需要进行数据加密。 完整性:要求数据不被他人随意修改,需要进行签名技术 可用性:要求服务不被他人恶意攻击,需要进行数据校验 2、为保证数据完整性如下图所示 1)将要提交的参

    2024年02月09日
    浏览(26)
  • 数据采集与安全:保护隐私与数据完整性

    随着互联网和大数据技术的发展,数据采集成为了企业和组织中不可或缺的一部分。数据采集的目的是为了收集和分析大量的数据,以便于提取有价值的信息和洞察。然而,随着数据采集的扩大,隐私和数据完整性问题也逐渐成为了关注的焦点。 数据隐私和数据完整性是数据

    2024年04月11日
    浏览(19)
  • 物理安全对工控系统数据完整性的影响如何评估和管理?

    随着工业自动化和数字化程度的不断提高, 工业控制系统的数据安全性和完整性日益受到重视. 工业控制系统 (ICS) 是指那些应用于制造、交通和其他领域的关键基础设施的计算机系统和网络设备. 这些系统通常涉及大量敏感信息如工艺参数和历史记录等的数据交换与存储. 因此

    2024年02月21日
    浏览(17)
  • 轨道交通信号安全完整性等级(SIL)

    轨道交通行业中,对于信号系统、车辆子系统等安全相关的系统有安全完整性(SIL)等级的要求,需要进行通用产品层安全评估和工程特定应用项目安全评估,已经形成了行业共识。对于初次了解SIL的人,在实际应用中存在着对SIL的错误理解,并且不恰当地应用SIL。本文解答

    2024年02月04日
    浏览(20)
  • Windows安全中心内存完整性无法打开问题的处理方法

    Windows11安全中心内存完整性无法打开 今天电脑使用过程中突然看到系统桌面右下角任务栏中 windows安全中心图标出现了警告信息,如下图红框所示: 点击该图标进入windows安全中心的 安全性概览 界面,如下图: 在该界面可以看到出现安全警告的原因是“内存完整性已经关闭

    2024年02月02日
    浏览(18)
  • mysql索引--普通索引,唯一索引,主键索引,参照完整性约束,数据完整性约束

    -- 方法1:create index -- 对employee表的员工部门号列创建普通索引depart_ind -- create index depart_ind on employees(员工部门号); -- 对employee表的姓名和地址列创建复合索引ad_ind; -- create index ad_ind on employees(姓名,地址); -- 对departments表的部门名称列创建唯一索引un_ind; -- create unique index un_ind

    2023年04月21日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包