临时表、视图与系统函数_Lab2
MySQL数据库操作 Lab1.md
body { font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif); font-size: var(--vscode-markdown-font-size, 14px); padding: 0 26px; line-height: var(--vscode-markdown-line-height, 22px); word-wrap: break-word }
#code-csp-warning { position: fixed; top: 0; right: 0; color: rgba(255, 255, 255, 1); margin: 16px; text-align: center; font-size: 12px; font-family: sans-serif; background-color: rgba(68, 68, 68, 1); cursor: pointer; padding: 6px; box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.25) }
#code-csp-warning:hover { text-decoration: none; background-color: rgba(0, 122, 204, 1); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.25) }
body.scrollBeyondLastLine { margin-bottom: calc(100vh - 22px) }
body.showEditorSelection .code-line { position: relative }
body.showEditorSelection .code-active-line:before, body.showEditorSelection .code-line:hover:before { content: ""; display: block; position: absolute; top: 0; left: -12px; height: 100% }
body.showEditorSelection li.code-active-line:before, body.showEditorSelection li.code-line:hover:before { left: -30px }
.vscode-light.showEditorSelection .code-active-line:before { border-left: 3px solid rgba(0, 0, 0, 0.15) }
.vscode-light.showEditorSelection .code-line:hover:before { border-left: 3px solid rgba(0, 0, 0, 0.4) }
.vscode-light.showEditorSelection .code-line .code-line:hover:before { border-left: none }
.vscode-dark.showEditorSelection .code-active-line:before { border-left: 3px solid rgba(255, 255, 255, 0.4) }
.vscode-dark.showEditorSelection .code-line:hover:before { border-left: 3px solid rgba(255, 255, 255, 0.6) }
.vscode-dark.showEditorSelection .code-line .code-line:hover:before { border-left: none }
.vscode-high-contrast.showEditorSelection .code-active-line:before { border-left: 3px solid rgba(255, 160, 0, 0.7) }
.vscode-high-contrast.showEditorSelection .code-line:hover:before { border-left: 3px solid rgba(255, 160, 0, 1) }
.vscode-high-contrast.showEditorSelection .code-line .code-line:hover:before { border-left: none }
img { max-width: 100%; max-height: 100% }
a { text-decoration: none }
a:hover { text-decoration: underline }
a:focus, input:focus, select:focus, textarea:focus { outline-offset: -1px }
hr { border-top: 0; border-right: 0; border-bottom: 2px solid; border-left: 0; height: 2px }
h1 { padding-bottom: 0.3em; line-height: 1.2; border-bottom-width: 1px; border-bottom-style: solid }
h1, h2, h3 { font-weight: normal }
table { border-collapse: collapse }
table>thead>tr>th { text-align: left; border-bottom: 1px solid }
table>thead>tr>th, table>thead>tr>td, table>tbody>tr>th, table>tbody>tr>td { padding: 5px 10px }
table>tbody>tr+tr>td { border-top: 1px solid }
blockquote { margin: 0 7px 0 5px; padding: 0 16px 0 10px; border-left-width: 5px; border-left-style: solid }
code { font-family: Menlo, Monaco, Consolas, "Droid Sans Mono", "Courier New", monospace, "Droid Sans Fallback"; font-size: 1em; line-height: 1.357em }
body.wordWrap pre { white-space: pre-wrap }
pre:not(.hljs), pre.hljs code>div { padding: 16px; border-radius: 3px; overflow: auto }
pre code { color: var(--vscode-editor-foreground); tab-size: 4 }
.vscode-light pre { background-color: rgba(220, 220, 220, 0.4) }
.vscode-dark pre { background-color: rgba(10, 10, 10, 0.4) }
.vscode-high-contrast pre { background-color: rgba(0, 0, 0, 1) }
.vscode-high-contrast h1 { border-color: rgba(0, 0, 0, 1) }
.vscode-light table>thead>tr>th { border-color: rgba(0, 0, 0, 0.69) }
.vscode-dark table>thead>tr>th { border-color: rgba(255, 255, 255, 0.69) }
.vscode-light h1, .vscode-light hr, .vscode-light table>tbody>tr+tr>td { border-color: rgba(0, 0, 0, 0.18) }
.vscode-dark h1, .vscode-dark hr, .vscode-dark table>tbody>tr+tr>td { border-color: rgba(255, 255, 255, 0.18) }
.hljs-comment, .hljs-quote { color: rgba(142, 144, 140, 1) }
.hljs-variable, .hljs-template-variable, .hljs-tag, .hljs-name, .hljs-selector-id, .hljs-selector-class, .hljs-regexp, .hljs-deletion { color: rgba(200, 40, 41, 1) }
.hljs-number, .hljs-built_in, .hljs-builtin-name, .hljs-literal, .hljs-type, .hljs-params, .hljs-meta, .hljs-link { color: rgba(245, 135, 31, 1) }
.hljs-attribute { color: rgba(234, 183, 0, 1) }
.hljs-string, .hljs-symbol, .hljs-bullet, .hljs-addition { color: rgba(113, 140, 0, 1) }
.hljs-title, .hljs-section { color: rgba(66, 113, 174, 1) }
.hljs-keyword, .hljs-selector-tag { color: rgba(137, 89, 168, 1) }
.hljs { display: block; overflow-x: auto; color: rgba(77, 77, 76, 1); padding: 0.5em }
.hljs-emphasis { font-style: italic }
.hljs-strong { font-weight: bold }
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe WPC", "Segoe UI", "Ubuntu", "Droid Sans", sans-serif, "Meiryo"; padding: 0 12px }
pre { background-color: rgba(248, 248, 248, 1); border: 1px solid rgba(204, 204, 204, 1); border-radius: 3px; overflow-x: auto; white-space: pre-wrap; overflow-wrap: break-word }
pre:not(.hljs) { padding: 23px; line-height: 19px }
blockquote { background: rgba(127, 127, 127, 0.1); border-color: rgba(0, 122, 204, 0.5) }
.emoji { height: 1.4em }
code { font-size: 14px; line-height: 19px }
:not(pre):not(.hljs)>code { color: rgba(201, 174, 117, 1); font-size: inherit }
.page { page-break-after: always }
实验一 MySQL数据库操作
实验目的:
掌握MySQL安装、配置与登录方法,使用MySQL客户创建数据库及对数据库表完成各种操作
实验内容:
1、 安装MySQL数据库管理系统,5.7.X(建议5.7.23及以上)或8.X版本都可以。客户端不限。
2、 使用MySQL客户端创建数据库,并且在库中按照设计创建数据库表,并把数据插入各表中。
实验过程及要求:
1、学习并掌握MySQL的登录方法,能够使用官方的MySQL客户端(或者其他能够连接MySQL的客户端)连接并登录到MySQL服务器,能够在服务器上进行各种操作。
2、创建数据库LearnMySQL,按照给定Excel文件中表定义创建各数据表,建立表的各约束关系,创建索引。(创建表、约束关系、索引的SQL命令写在下面的空白处)
3、把给定Excel文件中的数据录入(导入)到各数据表。
4、往数据库的honor表中插入至少20条以上有效记录,在该表上创建全文索引。
(1)使用Select命令列出honor表所有记录,结果贴在下面。
(2)写出创建全文索引的过程与对应命令。
(3)基于全文索引写至少3条查询语句,并且贴出查询结果。
实现操作过程
前提说明 -> 在操作过程中遇到的一些小问题,以及这些问题的解决方法:
原因分析:
- 通常表示在服务器端和客户端都没有启用加载本地数据的功能。这可能是由于安全设置或配置限制所致
- 一般情况下是 local_infile=OFF 导致不能从本地导入
- 未启用的话会导致 Mysql对其安全性的保护,从而拒绝连接
show global variables like 'local_infile';
-- 表示找到全局配置中的local file文件所在
显然会显示 OFF
需要对其进行修改为 true
SET GLOBAL local_infile = true; -- 将local_file的值修改为 ON
值得注意的是 在我们重启之后依旧是OFF,所有我们需要对my.ini进行修改
my.ini是在Window下面的文件
Docker和Linux中的文件是叫my.cnf,文件路径在/etc/mysql/my.cnf
这里增加配置 copy到配置文件就可以了
[mysql]
local_infile=ON
[client]
local_infile=ON
这个样子我们就对其local_file的读权限打开了
原因分析:
如果是这个样子的 我们不能直接对全局的文件进行随意读取
否则会报错,mysql为保护安全性而设置的,这里我们需要进入配置文件 mysql.ini
MySQL服务器配置了--secure-file-priv选项,限制了从文件加载数据的操作
本质是为了增加数据库的安全性而采取的一项措施。
解决方法
- 选择一个允许加载数据的目录:可以通过修改MySQL的配置文件,将--secure-file-priv选项设置 为一个允许加载数据的目录。你可以在配置文件中找到该选项并修改它。修改后,重新启动 MySQL服务器使更改生效 解决方法
- 将数据文件移动到允许的目录:另一种方法是将数据文件移动到MySQL允许加载数据的目录 中。你可以通过查看MySQL配置文件中--secure-file-priv选项指定的目录,或者使用以下SQL查询 来获取允许的目录位置
这里我使用修改 --secure-file-priv的方法 找到my.ini配置文件 修改secure_file_priv
用管理员权限 覆盖my.ini
show variables like "secure_file_priv"; -- 显示配置路径
这个样子我们可以对文件进行读取了 ,我修改了文件名字,叫test.csv
这里可以做个了解:
secure_file_priv="null" -- 对全局所有的文件都不能读取
secure_file_priv="指定路径" -- 只能读取当前指定路径下的文件夹内容 也就是信任
secure_file_priv="" -- 对读取文件夹位置不做限制
先quit出MySQL的控制台,再使用如下命令登入:
mysql -u root -p --local-infile
首先先了解对参数的认识,这些是LOAD DATA 语法的介绍
load data [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name, )]
这个 是ChatGPT 给出的解释
LOAD DATA INFILE` 是一个 MySQL 的语句,用于将外部数据文件加载到数据库表中。
[low_priority] -- (可选):使用低优先级执行加载操作,以允许其他操作在加载过程中进行。
[local] -- (可选):指定数据文件位于本地客户端而不是服务器上。
infile 'file_name.txt' -- :指定要加载的数据文件的路径和名称。
[replace|ignore] -- (可选):指定当加载的数据与表中的数据冲突时的处理方式。`REPLACE` 表示替换冲突的数据,`IGNORE` 表示忽略冲突的数据。
into table tbl_name -- :指定要加载数据的目标表的名称。
[fields terminated by 't'] -- (可选):指定字段之间的分隔符。默认为制表符。
[OPTIONALLY] enclosed by '' -- (可选):指定字段值的包围符号。默认为空。
[escaped by '\''] -- (可选):指定转义字符。默认为反斜杠。
[lines terminated by 'n'] -- (可选):指定行之间的分隔符。默认为换行符。
[ignore number lines] -- (可选):指定要忽略的行数。
[(col_name, )] -- (可选):指定要加载的列的列表。如果省略,则默认加载所有列。
这些参数允许你根据数据文件的格式和需求来配置加载操作。你可以根据实际情况提供适当的参数。
请注意,使用 LOAD DATA INFILE
进行数据加载需要适当的权限,并且在安全性方面要谨慎。确保仅从可信的来源加载数据,并仔细验证数据的格式和内容,以避免潜在的安全问题。
- 在MySQL中将数据加载到表中并指定列:
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2 ;
- 如果我有100列并且我只想导入2列
LOAD DATA INFILE 'file.csv'
INTO TABLE t1
(column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
只需将column1,column2等替换为您的列名,然后将@dummy放在CSV中您要忽略的列中.
- 在load data infile语句中指定CSV中的列名称.
LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);
测试指定读取成功 代码演示
数据表
实现代码
create table test1 (
pid varchar(255)
); -- 建立测试表
LOAD DATA LOCAL INFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\FILE_Data\CSV\test.csv'
INTO TABLE test1
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@col1, @col2, @col3, @col4, @col5,@col6,@col7,@col8)
set pid=@col2; -- 读取表数据并指定
实现结果
至此 目前的一些问题全部被解决 接下来是这次实验报告的具体实现
1、连接并登录MySQL客户端,并在终端进行操作
2、创建数据库LearnMySQL,按照给定Excel文件中表定义创建各数据表,建立表的各约束关系,创建索引。(创建表、约束关系、索引的SQL命令写在下面的空白处)
- 建立数据库LearnMySQL
create database if not exists LearnMySQL;
use LearnMySQL;
这里我设计的是3NF的结构
-- 创建 Course 表
CREATE TABLE Course (
cid INT PRIMARY KEY,
cname VARCHAR(255),
credit INT,
pcid INT,
chour INT,
cattr VARCHAR(255),
cnum INT,
did VARCHAR(2)
);
-- 创建 Department 表
CREATE TABLE Department (
did VARCHAR(2) PRIMARY KEY,
dname VARCHAR(255)
);
-- 创建 CourseHour 表
CREATE TABLE CourseHour (
chour INT PRIMARY KEY,
cid INT
);
-- 创建外键约束关系
ALTER TABLE Course
ADD CONSTRAINT fk_course_pcid
FOREIGN KEY (pcid) REFERENCES Course (cid);
ALTER TABLE CourseHour
ADD CONSTRAINT fk_coursehour_cid
FOREIGN KEY (cid) REFERENCES Course (cid);
-- 创建索引
CREATE INDEX idx_course_did ON Course (did);
3、把给定Excel文件中的数据录入(导入)到各数据表。
因为给定实验数据表有点问题 我这里自己造了组数据
这里我们使用 LOAD DATA 的方法
LOAD DATA LOCAL INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\FILE_Data\\CSV\\test.csv'
INTO TABLE course
FIELDS TERMINATED BY ',' -- 列分割
LINES TERMINATED BY '\n' -- 行分割
IGNORE 1 LINES ;
LOAD DATA LOCAL INFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\FILE_Data\CSV\test.csv'
INTO TABLE CourseHour
FIELDS TERMINATED BY ',' -- 列分割
LINES TERMINATED BY '\n' -- 行分割
IGNORE 1 LINES
(@col1, @col2, @col3, @col4, @col5,@col6,@col7,@col8)
set chour=@col5,cid=@col2;
LOAD DATA LOCAL INFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\FILE_Data\CSV\test.csv'
INTO TABLE Department
FIELDS TERMINATED BY ',' -- 列分割
LINES TERMINATED BY '\n' -- 行分割
IGNORE 1 LINES
(@col1, @col2, @col3, @col4, @col5,@col6,@col7,@col8)
set did=@col8,dname=@col2;
4、往数据库的honor表中插入至少20条以上有效记录,在该表上创建全文索引。
(1)使用Select命令列出honor表所有记录,结果贴在下面。
(2)写出创建全文索引的过程与对应命令。
(3)基于全文索引写至少3条查询语句,并且贴出查询结果。
-- 创建"honor"表
CREATE TABLE honor (
cid INT,
cname VARCHAR(50),
credit INT,
pcid INT,
chour INT,
cattr VARCHAR(50),
cnum INT,
did INT,
PRIMARY KEY (cid)
);
-- 插入记录
INSERT INTO honor (cid, cname, credit, pcid, chour, cattr, cnum, did)
VALUES
(1, 'Mathematics', 3, NULL, 36, 'Science', 100, 1),
(2, 'English', 3, NULL, 48, 'General Education', 80, 2),
(3, 'Physics', 4, 1, 48, 'Science', 60, 1),
(4, 'Computer Science', 3, NULL, 36, 'Science', 120, 3),
(5, 'History', 3, 2, 36, 'General Education', 90, 2),
(6, 'Chemistry', 4, 1, 48, 'Science', 70, 1),
(7, 'Biology', 4, 1, 48, 'Science', 80, 1),
(8, 'Art', 2, NULL, 24, 'General Education', 50, 4),
(9, 'Geography', 3, 2, 36, 'General Education', 60, 2),
(10, 'Physical Education', 2, NULL, 24, 'General Education', 120, 5),
(11, 'Economics', 3, NULL, 36, 'Social Science', 70, 6),
(12, 'Music', 2, NULL, 24, 'General Education', 40, 4),
(13, 'Psychology', 3, 11, 36, 'Social Science', 60, 6),
(14, 'Sociology', 3, 11, 36, 'Social Science', 50, 6),
(15, 'Statistics', 3, 1, 36, 'Science', 80, 1),
(16, 'Literature', 3, 2, 36, 'General Education', 70, 2),
(17, 'Political Science', 3, 11, 36, 'Social Science', 60, 6),
(18, 'Philosophy', 3, NULL, 36, 'General Education', 40, 7),
(19, 'Engineering', 4, 4, 48, 'Science', 90, 3),
(20, 'Foreign Language', 3, 2, 36, 'General Education', 80, 2);
-- 在"honor"表的"cattr"列上创建全文索引
ALTER TABLE honor ADD FULLTEXT INDEX idx_cattr (cattr);
基于全文索引的三个查询示例:
- 查找包含关键词"Science"的课程:
SELECT * FROM honor WHERE MATCH(cattr) AGAINST('Science');
- 查找属于"General Education"类别且学分大于等于3的课程:
SELECT * FROM honor WHERE MATCH(cattr) AGAINST('General Education') AND credit >= 3;
- 查找属于"Social Science"类别且教学单位编号为6的课程:
SELECT * FROM honor WHERE MATCH(cattr) AGAINST('Social Science') AND did = 6;
临时表、视图与系统函数_Lab2的更多相关文章
- Oracle的学习三:java连接Oracle、事务、内置函数、日期函数、转换函数、系统函数
1.java程序操作Oracle java连接Oracle JDBC_ODBC桥连接 1.加载驱动: Class.forName("sun.jdbc.odbc.JdbcodbcDriver& ...
- 第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(3)
原文:第三章--使用系统函数.存储过程和DBCC SQLPERF命令来监控SQLServer(3) 本文为这个系列最后一篇.将是如何使用DBCC命令来监控SQLServer日志空间的使用情况. 前言: ...
- 视图、存储函数、存储过程、触发器:MySQL系列之五
一.视图 视图:VIEW,虚表,保存有实表的查询结果,实际数据不保存在磁盘 物化视图:实际数据在磁盘中有保存,加快访问,MySQL不支持物化视图 基表:视图依赖的表 视图中的数据事实上存储于" ...
- SQL Server系统函数:元数据函数
原文:SQL Server系统函数:元数据函数 1.列的长度.列名 --列的长度 select COL_LENGTH('dbo.wct', --表名 'wcid') --列名 --列名 select ...
- SQL Server 2005 的动态管理视图DMV和函数DMF
优化 的动态管理视图DMV和函数DMF SQL Server 05提供了动态管理视图Dynamic Management Views和函数 Functions,方便了我们对系统运行情况的监控,故障诊断 ...
- Sql Server函数全解(五)之系统函数
系统信息包括当前使用的数据库名称,主机名,系统错误消息以及用户名称等内容.使用SQL SERVER中的系统函数可以在需要的时候获取这些信息.下面介绍系统函数的作用和使用方法. 1.返回表中指定字段的 ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- Delphi常用系统函数总结
Delphi常用系统函数总结 字符串处理函数 Unit System 函数原型 function Concat(s1 [, s2,..., sn]: string): string; 说明 与 S : ...
- DNS主从服务,子域授权,view视图,日志系统,压力测试
DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140 ...
- 15系统函数&数据类型转换(必学)-大话数据库视频教程
大纲:系统函数的用法,case...when的用法,cast关键字的用法,convert的用法 优酷超清地址: 腾讯超清地址: 百度网盘下载地址:http://pan.baidu.com/s/1dDe ...
随机推荐
- oracle 19c rpm 个性化配置安装
简单来说就是: 1.安装preinstall : oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm 2.安装 ee : oracl ...
- React框架学习基础篇-HelloReact-01
一直想掌握一门前端技术,于是想跟着张天宇老师学习,便开始学习React,以此来记录一下我的学习之旅. 学习一门新的技术首先是去官网看看,React官网链接是[https://zh-hans.react ...
- SpringBoot定义优雅全局统一Restful API 响应框架完结撒花篇封装starter组件
之前我们已经,出了一些列文章. 讲解如何封统一全局响应Restful API. 感兴趣的可以看我前面几篇文章 (整个starter项目发展史) SpringBoot定义优雅全局统一Restful AP ...
- 多光源渲染方案 - Many Lights Sampling
目录 Importance Sampling(IS) Light BVH [2018~2019] 预构建 BVH 重建 BVH 基于 BVH node 的 IS Real-time Stochasti ...
- 关于DVWA靶场高难度命令执行的代码审计
需要的环境:dvwa 使用的工具:PHP手册 high难度源代码: <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target ...
- 超越.NET极限:我打造的高精度数值计算库
超越.NET极限:我打造的高精度数值计算库 还记得那一天,我大学刚毕业,紧张又兴奋地走进人生第一场.NET工作面试.我还清楚地记得那个房间的气氛,空调呼呼地吹着,面试官的表情严肃而深沉.我们进行了一番 ...
- Scala的基本使用
@ 目录 Scala的基本使用 一.基础语法 1.1 变量 1.1.1 var和val 1.1.2 自动类型推断 1.2 数据类型 1.2.1 基础数据类型 1.2.2 增强数据类型 1.3 操作符 ...
- 安装 配置 正向 解析 DNS方法
安装 配置 正向 解析 DNS方法 1,安装dhcp [root@localhost ~]#yum install bind* -y 2,关闭防火墙和selinux [root@localhost ~ ...
- quarkus依赖注入之九:bean读写锁
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...
- java入门2..0
java的运行原理 1.在本地磁盘中创建一个文本文件为Demo.java的源文件 2.在源文件中编写java代码如下: public class Demo public static void ,ma ...