【数据库】

一:

1.2 数据库的分类 层次式数据库 网络式数据库 关系型数据库
关系型数据库 和非关系型数据库 (NoSQL)

第一章:(选填题)

数据库系统的三级模式结构:外模式,内模式,逻辑模式、
外模式:数据库用户能够看见和使用的局部数据的逻辑结构和特征的藐视,书记库用户的数据视图,是与某应用有关的数据的逻辑表示。
逻辑模式:数据库中全体数据顶点逻辑结构和特征的描述,是所有用户的公共数据视图
内模式:数据物理结构和存储方法的描述,是数据在数据库内部的组织方式。
外模式–>视图 模式–>库表 内模式–>磁盘存储
内模式保证了物理独立性
外模式保证了逻辑独立性

第四章(选填题)数据库的安全性:
  1. 不安全因素:1. 非授权用户对数据库的恶意存取和破坏 2. 数据库中重要的数据泄露 3. 安全环境的脆弱性
  2. 数据库安全性控制:1. 用户鉴别:动态/静态口令鉴别 2. 存取控制 3. 自主存取控制方法
  3. 为什么要授权 : 授权是指授予(GRANT),和收回(REVOKE)是数据库安全性控制中自主存取控制的方法,是为了保护数据库,防止不合法的使用所造成的数据泄露,或更改破坏。
  4. 授权(GRANT)

授权的使用方法
GRANT 权限 对象类型 对象名TO 用户名 [with GRANT OPTION]

//权限
查询权限:SELECT 全部操作权限 ALLPRIVILEGES
对象类型:可以是TABLEVIEW 对象名 为对应的表名和
视图名字
用户名:可以是指定用户也可以是全体用户PUBLIC
//SQL不运行循环授权 即被授权者不能把权限再
授回给授权者或者其祖先

GRANT SELECT ON TABLE Student TO U1
//把查询权限给用户U1
  1. 收回权限(REVOKE)
revoke 权限 ON 对象类型 对象名 FROM 用户名 [CASCADE|RESTRICT];
CASCADE:级联回收。将用户传播出去的权限一并收回
RESTRICT:受限回收。若用户传播过该权限,回收将会失败
eg:
revoke update(sno)ON TABLE Student FROM U4;

目前层次式和网络式基本消失 !

1.4
SQL语句:

CREATE DATABASE youkedadb;
quit
exit
2.1表格
  1. 常用的数据类型:DOUBLE INT VARCHAR(可变的长字符串,可以类比于JAVA中的String类型);

BIGINT(长整型可以类比于long类型);

  1. 一行称为一条数据;
CURD:计算机语言中Create read Updata Delete 就是CRUD;创建 读取 更新 删除
  1. 创建:创建表格我们需要提交的属性1. 表名 2. 字段名 3. 字段的数据类型 ;
CREATE TABLE `user`(//创建一张叫做user的表格
  `id` CINT(10)NOT NULL,
  `mobile` VARCHAR(11) NOT NULL,
  `nickname` VARCHAR(40) NOT NULL,
  `gmt_created` datetime ,
  `gmt_modified` datetime NOT NULL,//字段名+数据类型+长度+是否为NULL
  PRIMARY KEY ( `id` )/这段代码的意思是这张表格的主键式id这个字段
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

主键的特点:1.已经约定的字段 不能为空 不能重复 作用是标识;
删除表格:

drop table table_name;//table是要删除的表格名字
DROP TABLE IF EXISTS table_name;//另一种写法 

插入:

INSERT INTO table_name(field1,field2,...fieldN)
VALUES
(value1,value2,...valueN);


INSERT INTO
  `user` (`id`, `mobile`, `nickname`, `gmt_created`)
VALUES
  (1, '13426069530', '叶冰', now());
/*user是表名
id mobile 是字段名
mobile的值是VARCHAR类型 所以要用' '包含
gmt_created是datetime类型,我们一般使用now()这个函数来获取服务器当前时间,并且将它
作为值插入。
*/
INSERT INTO table_name
VALUES
(value1,value2,...valueN);
INSERT INTO table_name
VALUES
(value1,value2,...valueN),
(value1,value2,...valueN);
查询
SELECT * FROM timi_adc;

SELECT
  id,
  hero_name
FROM
  timi_adc;//从指定的表中查询指定列的信息

  SELECT * FROM timi_adc;//查询所有的字段 * 表示所有的字段。

WHERE子句:实际的查询工作中我们很少查询限定的字段 我们更希望查询一种符合条件的数据 所以我们应该加上一个 限定

SELECT * FROM table_name WHERE condition;
//condition是指条件 他和if语句一样可以作简单的逻辑判断。
limit子句:
SELECT * FROM table_name LIMIT parameter;
//parameter是limit语句的参数。
SELECT
  *
FROM
  timi_adc
LIMIT
  5, 6;
  //这个sql语句的意思是查询timi_adc表的第6-11行
  //第一个参数5表示从第六行开始查,第二个参数是6,表是一共查询六条记录;


//查询第0-x行
SELECT
  *
FROM
  timi_adc
LIMIT
  5;
  //这个SQl的意思是查询user的第0-5行,也就是说这句话等价于
  SELECT * FROM timi_adc LIMIT 0,5;

//查询第x行
SELECT
  *
FROM
  timi_adc
LIMIT
  4, 1;
  //这句SQL的意思是查询timi_adc表第五行的数据;
  //和WHERE子句联合使用
排序(ORDER BY子句)

使用场景:在实际的应用场景中,我们需要对查询结果进行排序,就需要用到ORDER BY 子句
语法:

SELECT * FROM table_name ORDER BY field_name;
一般的查询语句查询数据结果是按照升序排序,int double 是从小到大,varchar是按照a-z排序,对于datetime是从过去到现在。
DESC关键词

ORDER BY 语句的排序默认是正序排序,关键词是ASC(一般不写),
逆序排序可以加上关键词DESC
使用方式:

SELECT
  *
FROM
  timi_adc
ORDER BY
  win_rate DESC;
  //

和其他子句连用
和LIMIT子句一样,ORDER BY子句一般和其他语句联合使用,比如我想查询胜率最高的三个射手,那么我们的查询语句可以这么写:

SELECT
  *
FROM
  timi_adc
ORDER BY
  win_rate DESC
LIMIT
  3;
更新:UPDATE语句

用法:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPADTE语句我们必须加入WHERE限定条件,否则的话UPDATE语句就会对整列起作用。
UPDATE
  timi_adc
SET
  ban_rate = 0.01
WHERE
  hero_name = '艾琳';
  //将王者荣耀中艾琳的ban率设置为1%
DELETE语句(删除语句)
delete from user where id=4;
//删除user表中id为4的行
delete from `user` where id<20;
//删除user中所有id小于20的数据
delete from user;
//删除uesr表中所有的数据
MySQL中基本语法
  1. show databases;//查看所有的数据库
  2. show create databases;//查看数据库属性
  3. use mysql01;//使用数据库
  4. alter database mysql01 character set gbk; //将指定的utf8的数据库修改为gbk的数据库
  5. drop database mysql01;//删除数据库
  6. show tables;//查看表
  7. desc 表名;//查看表的结构
  8. SELECT *表名 ;//查看表单内容;
备份与恢复
  1. LIKE查询
SELECT * FROM table_name WHERE condition LIKE condition;
“%” SQL LIK子句中,我们的使用百分号来表示任意字符,如果我们没有使用任何的%,那LIKE就当于“=”;

%放的位置会影响搜索结果,'%孙%'表示这个字符串含孙;
同理‘孙%’表示这个字符串以孙开头;
‘%孙’以孙结尾;

AND&OR

之前我们写WHERE语句只能有一个条件,and和or关键词可以让我们使用多个条件。

SELECT * FROM table_name WHERE conditionA AND/OR condtionB;


//例:
SELECT
  *
FROM
  timi_adc
WHERE
  win_rate > 0.5
  AND win_rate < 0.51
  OR win_rate < 0.47;
IN/NOT INY语句:

IN子句需要配合WHERE使用,它是一种精确查找。

SELECT * FROM table_name WHERE column IN (condtionA,condtionB);
//格式
SELECT
  *
FROM
  timi_adc
WHERE
  fever IN ('T0', 'T3');
  //查询在timi_adc表中热度为T0和t3的英雄
SELECT
  *
FROM
  timi_adc
WHERE
  fever = 'T0'
  OR fever = 'T3';
  //上下两个SQL等价
 // HWERE后跟列名
  
NOT IN/NOT LIKE
SELECT
  *
FROM
  timi_adc
WHERE
  fever NOT IN ('T0');
  //相当于否定条件,比如在timi_adc表中查询热度T0以外的英雄
NULL值的处理;
  1. SELECT命令以及WHERE子句来读取表中的数据是,如果表中的查询字段是NULL的,该命令可能无法执行。

NULL值的概念:
NULL值不等于空值,空值是不占用存储空间的,NULL占用存储空间。
我们不能使用=NULL或者!=NULL来查找NULL值NULL=NULL会返回NULL;

SELECT field_name1,field_name2
FROM table_name
WHERE field_name2 IS NOT NULL/IS NULL;

我们可以根据这个语法去表格中查询不为 NULL 或者为 NULL 的数据。
在这里,老师已经替大家内置了一张 student 表格:
image.png
我们根据语法,想要查询 id,mobile,其中 mobile 不为 NULL 的数据,可以这么写 SQL 语句:

SELECT
  id,
  mobile
FROM
  student
WHERE
  mobile IS NOT NULL;


//查询ID,NAME ,GRADE并且grade为 NULL的数据可以这样写SQL;
  SELECT
  id,
  name,
  grade
FROM
  student
WHERE
  grade IS NULL;


LEFT outer join 语句(10.18上课内容)//MySQL中的关联查询
  1. 联合查询
  2. join查询
  3. inner join (返回两个表中存在匹配的行)
SELECT column_name(s)  
FROM table1  
INNER JOIN table2  
ON table1.column_name = table2.column_name;|
  1. left outer join (返回左表的所有行,如果右表中没有匹配,返回结果为NULL)
SELECT column_name(s)  
FROM table1  
LEFT JOIN table2  
ON table1.column_name = table2.column_name;
  1. right outer join(同理返回结果为NULL)
SELECT column_name(s)  
FROM table1  
RIGHT JOIN table2  
ON table1.column_name = table2.column_name;
  1. FUll JOIN(返回左表和有右表中所有的行,如果一侧没有匹配返回NULL)
SELECT column_name(s)  
FROM table1  
FULL JOIN table2  
ON table1.column_name = table2.column_name;
  1. 子查询
SELECT *  
FROM table_name  
WHERE column_name IN (  
    SELECT column_name  
    FROM table_name  
    WHERE column_name = '一级目录'  
)  
AND column_name != '一级目录';



SELECTR *
FROM TB_CREACTL

  1. 多表查询;
10/19日上课内容
  1. My SQL和Navicat的区别

MySQL Workbench和Navicat都是数据库管理工具,但它们有一些明显的区别。
首先,MySQL Workbench是MySQL官方提供的免费数据库管理工具,主要用于数据库设计、建模、SQL开发和数据库管理等方面。它提供了直观的图形界面,可以方便地进行数据库设计和管理操作,适用于开发人员和数据库管理员。而Navicat是一款商业数据库管理工具,支持多种数据库系统,包括MySQL、Oracle、SQL Server等。它提供了丰富的功能和工具,如数据导入导出、数据同步、数据备份等,适用于开发人员、数据库管理员和数据分析师等。
其次,Navicat需要付费购买执照,而MySQL Workbench则是开源免费的。因为Navicat是一款商业产品,所以它提供的功能要比MySQL Workbench更加丰富。
总的来说,MySQL Workbench和Navicat在功能、适用场景和费用等方面存在差异,用户可以根据自己的需求和预算来选择适合自己的数据库管理工具。

CONCAT函数
SELECT column_name1,CONCAT(column_name2,str,column_name3),column_name4 FROM table_name;

我们来分析一下这个语法:

  • 首先这是一个查询语句,最基本的结构是 SELECT 列名 FROM 表名
  • CONCAT函数可以拼接列名,也可以拼接字符串
  • 在使用CONCAT函数的时候可以同时查询其他的列
  • CONCAT函数的参数之间用英文“,”分隔
SELECT
  id,
  concat(hero_name, '的胜率是', win_rate)
FROM
  timi_adc;
//查询表中ID 加胜率
SELECT
  concat(hero_name, '的胜率是', win_rate)
FROM
  timi_adc
WHERE
  id = 3;//查询ID=3的数据

别名

我们优化拼接的结果,给他起一个别名,比如我希望查询结果的列名叫result,那么我们可以这么写:

SELECT
  concat(hero_name, '的胜率是', win_rate) as result
FROM
  timi_adc
WHERE
  id = 3;
TRIM函数

用户数据输入不是符合要求的,该函数是为了保持格式正确来使用TRIM函数来清除数据
语法:

TRIM (str)
//TRIM函数语法就是把需要去除空格的数据放在TRIM()
//中

TRIM()函数可以去掉查询结果中的空格,但不会修改原数据,修改原数据需要配合UPDATE/DELETE语句使用

语法拓展
TRIM()函数可以精准的去掉前面或者后面的空格或者其他的字符,

TRIM( BOTH|LEADING|TRAILING removed_str FROM str);
  • TRIM函数可以加上LEADING来只除去前面的空格,或者加上TRAILING来只除去后面的空格,如果都不加,则默认是BOTH。
  • TRIM函数可以删除指定的字符串内容,如果不加,则默认删除空格。

比如我们要去掉id为21这条数据中fever尾部的Q,那么我们可以这么写查询语句:

SELECT
  TRIM(
    TRAILING 'Q'
    FROM
      fever
  )
FROM
  timi_adc
WHERE
  id = 21;

desc来降序查询

REPLACE()函数
  1. TRIM()函数不能去掉字符串中间的值,如果要修改中间的值,我们可以使用REPLACE()函数
UPDATE table_name 
SET colunm_name = 
REPLACE(column_name,string_find,string_to_replace) 
WHERE conditions;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值