数据库进阶
文章平均质量分 55
数据库进阶
HardyDragon_CC
谦虚使人进步
展开
-
2024 Windows10 | 搭建MySQL Cloudbeaver 可视化DBS | Docker Compose本地环境
Docker 方便一键安装 删除,爽。在使用 Cloudbeaver 连接mysql时,Host 填写 localhost 连不上,提示连接失败,mysql的容器的日志也没消息,下了 dbeaver 免安装运行版直接就连上了,后面尝试一下发现要写具体的ip地址才行。同时这个网页版的DBS的SQL功能看起来没有软件版丰富,凑合用得了。原创 2024-01-20 15:54:10 · 710 阅读 · 0 评论 -
mysql基础总结
mysql基础总结前言工具思维导图前言这段时间根据《MYSQL必知必会》这本书做了碎片化的输出,这里进行一个思维导图式的总结,回顾一下自己所学的同时总结一下知识点,方便自己日后查看。这本书重点讲解了mysql的增删改查,其中先讲查的内容占了三分之二。后面又讲了视图、游标也是关于查询的,存储过程和触发器以及事务管理的基本概念,期间也有关于建表和用户管理的相关知识。总体上阅读没有什么困难,比较好上手,之前看这本书是打算巩固一下mysql基础,然后打算去牛客网刷题。那么接下来关于mysql这部分可能会接着碎原创 2021-07-01 16:03:30 · 100 阅读 · 3 评论 -
mysql笔记(24)--安全管理
安全管理什么是安全管理?如何管理用户?创建用户删除用户设置访问权限修改密码查看当前使用的用户名思维导图--总结什么是安全管理?查询当前所有用户USE mysql;SELECT USER FROM `user` u ;如何管理用户?创建用户CREATE USER ben identified BY '12345'USE mysql;SELECT USER FROM `user` u ;IDENTIFIED BY指定的口令为纯文本,MySQL将在保存到user表之前对其进行加密。原创 2021-06-30 10:28:00 · 90 阅读 · 1 评论 -
mysql笔记(23)--管理事务处理
管理事务处理什么是事务处理?如何使用事务管理?使用ROLLBACK使用COMMIT使用保留点取消自动提交思维导图--总结什么是事务处理?MyISAM 不支持事务处理, InnoDB 支持。回忆 InnoDB 不支持全文本搜索, MyISAM 支持。事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错原创 2021-06-29 11:30:24 · 64 阅读 · 0 评论 -
mysql笔记(22)--使用触发器
使用触发器什么是触发器?如何使用触发器?创建触发器删除触发器INSERT触发器DELETE触发器UPDATE触发器思维导图--总结什么是触发器?在事件发生时自动执行所有这些例子的共同之处是它们都需要在某个表发生更改(增删改)时自动处理。这确切地说就是触发器。如何使用触发器?创建触发器USE mysql_must_study;DELIMITER $$$$CREATE TRIGGER newproductAFTER INSERTON products FOR EACH ROWSEL原创 2021-06-28 11:28:40 · 141 阅读 · 1 评论 -
mysql笔记(21)--使用游标
使用游标什么是游标?为什么需要游标?如何使用游标?如何创建游标?如何打开和关闭游标?如何使用游标数据?实际处理数据案例总结什么是游标?游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。MySQL游标只能用于存储过程(和函数)。为什么需要游标?有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。如何使用游标?如何创建游标?在创建存储过程中,原创 2021-06-27 11:01:23 · 121 阅读 · 0 评论 -
mysql笔记(20)--使用存储过程
使用存储过程什么是存储过程?为什么使用存储过程?如何创建存储进程?如何删除存储过程?如何使用存储过程?如何给存储过程添加参数?来看看 IN 在存储过程中的使用,传参功能?查询'存储过程'的信息总结:什么是存储过程?存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。也叫作 调用为什么使用存储过程?方便复用复杂的sql,提高性能。。。如何创建存储进程?DROP PROCEDURE IF EXISTS mysql_must_stu原创 2021-06-26 11:00:02 · 110 阅读 · 0 评论 -
mysql笔记(19)--使用视图
什么是视图?它不包含表中应该有的任何列或数据,它包含的是一个SQL查询,貌似也叫作虚拟表。视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。视图影响性能。为何要使用视图?在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和原创 2021-06-25 10:01:41 · 163 阅读 · 1 评论 -
mysql笔记(18)--创建表,修改表结构
关于使用sql创建表的样例:-- mysql_must_study.orders definitionCREATE TABLE `orders` ( `order_num` int NOT NULL AUTO_INCREMENT, `order_date` datetime NOT NULL, `cust_id` int NOT NULL, PRIMARY KEY (`order_num`), KEY `fk_orders_customers` (`cust_id`), CON原创 2021-06-24 10:25:09 · 138 阅读 · 1 评论 -
mysql笔记(17)--UPDATE、DELETE
确定要更新的表名set 更新的值,更新多个使用逗号分隔;同样可以使用select的结果更新。确定更新行的where 过滤条件UPDATE customers SET cust_email = 'elmer@163.com'WHERE cust_id = 10005;在表名前使用 ignore 更新多行时,可以忽略更新失败的行,更新其他成功的。删除和更新都要注意指定where条件,不然对所有行生效就麻了。DELETE不需要列名或通配符。DELETE删除整行而不是删除列。为了删除指..原创 2021-06-23 10:32:12 · 131 阅读 · 1 评论 -
mysql笔记(16)--INSERT
插入语句的使用方式:插入完整的行:需要指定表名和被插入到新行中的值。INSERT INTO customers VALUES(NULL, 'Pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL , NULL );这是表结构:分析:对于第一个参数为NULL,理由?第一列cust_id原创 2021-06-22 12:32:40 · 106 阅读 · 2 评论 -
mysql笔记(15)
两个最常使用的引擎为 MyISAM 和 InnoDB ,前者支持全文本搜索,而后者不支持.为什么要使用全文本搜索?使用 like 或 正则 是有极限的。由于使用了索引,其性能更好,查询速度更加快。类似使用(散列表)哈希表存储。如何使用全文本搜索?创建表时使用 MyISAM 数据库引擎创建表时明确 索引,一般在创建表时启用全文本搜索。在定义之后,MySQL 自动维护该索引。在增加、更新或删除行时,索引随之自动更新。MATCH() 函数 指定被搜索的列, Against() 指定要使用原创 2021-06-21 10:43:51 · 91 阅读 · 1 评论 -
mysql笔记(14)
union(并查询/组合查询) 类似 与 where和or的搭配,例如:UNION指示MySQL执行两条SELECT语句,并把输出组合成单个查询结果集。SELECT vend_id ,prod_id ,prod_price FROM products p WHERE prod_price <=5UNION SELECT vend_id ,prod_id ,prod_price FROM products p WHERE vend_id IN (1001,1002);---SEL原创 2021-06-20 10:40:19 · 84 阅读 · 0 评论 -
mysql笔记(13)--联结
使用表别名目的:缩短mysql语句在单条select中重复使用表名对表使用别名 貌似可以省略 as ,之前就是那样做的,不知道其他的dbms可不可以。SELECT concat(vend_name,'(',vend_country,')') AS vend_titleFROM vendors v ORDER BY vend_name ;SELECT cust_name ,cust_contact FROM customers AS c ,orders AS o,orderitems原创 2021-06-19 10:30:29 · 81 阅读 · 0 评论 -
mysql笔记(12)
外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。等值联结(equijoin)/内部联结如果数据存储在多个表中,怎样用单条SELECT语句检索出数据?答案是使用联结在from后添加多个表,然后注意使用完全限定名区分,利用WHERE子句建立联结关系。应该保证所有联结都有WHERE子句,否则MySQL将返回比想要的数据多得多的数据SELECT vend_name ,prod_name,prod_priceFROM vendors v,product原创 2021-06-18 10:31:56 · 78 阅读 · 2 评论 -
mysql笔记(11)
寻找订购物品TNT2的所有客户,原本可以通过三个select查询得到。SELECT cust_name ,cust_contact FROM customers cWHERE cust_id IN (10001,10004);SELECT cust_id FROM orders o WHERE order_num IN (20005,20007);SELECT order_num FROM orderitems o WHERE prod_id = 'TNT2';可以利用se原创 2021-06-17 09:54:47 · 108 阅读 · 0 评论 -
mysql笔记(10)--GROUP BY 分组数据
使用 GROUP BY 分组数据,从输出中可以看到,供应商1001有3个产品,供应商1002有2个产品,供应商1003有7个产品,而供应商1005有2个产品;注意不要和 order by 弄混了。SELECT vend_id ,count(*) AS num_prods FROM products p GROUP BY vend_id ;使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值SELECT vend_id ,count(*) AS num_p原创 2021-06-16 09:51:09 · 237 阅读 · 0 评论 -
mysql笔记(9)
avg() 求平均值,AVG()函数忽略列值为NULL的行SELECT avg(prod_price) AS avg_priceFROM products p ;count() 确定表中行的数目或符合特定条件的行/列的数目使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值SELECT count(cust_email) AS num_cust FROM customers原创 2021-06-15 11:49:23 · 61 阅读 · 1 评论 -
mysql笔记(8)
upper() 函数可以将字母转大写SELECT vend_name ,upper(vend_name) AS vend_name_upFROM vendors v ORDER BY vend_name ;日期的格式为 年-月-日 :2005-09-01SELECT cust_id ,order_num FROM orders o WHERE order_date = '2005-09-01'以上语句有关日期的判断更严格些需要使用 date() 提取日期部分判断;同理time() 是原创 2021-06-14 10:03:57 · 71 阅读 · 1 评论 -
mysql笔记(7)
字段(field) 基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常用在计算字段的连接上。使用 concat() 函数在mysql中将两列的值拼接起来后返回,中间的参数使用 逗号,分隔。SELECT concat(vend_name,'(',vend_country,')') FROM vendors v ORDER BY vend_name ;使用MySQL的RTrim()函数来删除数据右侧多余的空格来整理数据,这里的 显示 貌似自动去掉空格了,所以原创 2021-06-12 16:56:44 · 134 阅读 · 1 评论 -
mysql笔记(6)
REGEXP 使用正则表达式SELECT prod_name FROM products p WHERE prod_name REGEXP '1000'ORDER BY prod_name ;正则里面的 . 表示 匹配任意一个字符SELECT prod_name FROM products p WHERE prod_name REGEXP '.000'ORDER BY prod_name ;为区分大小写,可使用BINARY关键字SELECT prod_name FROM pr原创 2021-06-11 12:01:02 · 456 阅读 · 2 评论 -
mysql笔记(5)
通配符:在搜索串中,%表示任何字符出现任意次数注意串需要单引号括起来。这里表示的是以 jet开头的字符串SELECT prod_id ,prod_name FROM products p WHERE prod_name LIKE 'jet%';通配符可以放在串的任何位置,前中后。SELECT prod_id ,prod_name FROM products p WHERE prod_name LIKE '%anvil%';虽然似乎%通配符可以匹配任何东西,但有一个例外,即NUL原创 2021-06-10 13:38:03 · 55 阅读 · 0 评论 -
mysql笔记(4)
where 语句可以配合 AND、OR使用,在需要明确顺序的情况使用括号。IN取合法值的由逗号分隔的清单,全都括在圆括号中。IN功能和OR一样,但是比OR更快且简洁SELECT vend_id ,prod_id ,prod_price ,prod_name FROM products p WHERE vend_id IN (1002,1003)ORDER BY prod_name ;可以使用NOT配合IN BETWEEN EXISTS进行取反操作。SELECT vend_id ,prod_原创 2021-06-09 13:48:35 · 67 阅读 · 2 评论 -
mysql笔记(3)
使用 where 进行条件查询:SELECT prod_price ,prod_name FROM products p WHERE prod_price = 2.5; SELECT prod_price ,prod_name FROM products p WHERE prod_price = 2.5ORDER BY prod_name DESC ; -- order by 只能在最后<> 和 != 作用相同。between 和 and 关键字配合使用,取两个值之间原创 2021-06-08 12:59:54 · 79 阅读 · 1 评论 -
mysql笔记(2)
SELECT prod_name FROM products p ORDER BY prod_name ;SELECT prod_id ,prod_price ,prod_name FROM products p ORDER BY prod_price ,prod_name ;SELECT prod_id ,prod_price ,prod_name FROM products p ORDER BY prod_price DESC ;ORDER BY 子句可以按照关键字排序。排序关键字可以多个,原创 2021-06-07 15:07:48 · 88 阅读 · 0 评论 -
mysql笔记(1)
为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择.select prod_name from products; SELECT prod_desc ,prod_id ,prod_name FROM products p ;SELECT * FROM products p ;// 返回不同的值,DISTINCT 即去重SELECT DISTINCT vend_id FROM products p;// 限制输出结果数量 LIMITSELECT prod_n原创 2021-06-06 15:54:42 · 50 阅读 · 0 评论