首页 > 数据库 >《mysql必知必会》读书笔记

《mysql必知必会》读书笔记

时间:2024-06-15 22:45:04浏览次数:14  
标签:cust 读书笔记 必知 price mysql prod id SELECT name

信息

《MySQL必知必会》 福塔 人民邮电出版社

摘录

基本概念

数据库

保存有组织的数据的容器(通常是一个文件或一组文件)。

某种特定类型数据的结构化清单。

模式

关于数据库和表的布局及特性的信息。有时,模式用作数据库的同义词。

主键

一列或一组列,其值可以唯一区分表中的每一行。应该总是定义主键。

使用

连接

使用mysql命令行连接或者图形化客户端连接,本人使用MySqlWorkbench图形化客户端。

选择库

在mysql命令行中通过use xx选择数据库,在MySqlWorkbench中通过双击库来选择数据库

检索

SELECT prod_id, prod_name, prod_price FROM products;
SELECT * FROM products;
-- 检索不同行
SELECT DISTINCT vend_id FROM products;
SELECT prod_name FROM products LIMIT 5;
-- 从行5开始最多展示5行,MySql的行从0开始计数
SELECT prod_name FROM products LIMIT 5, 5;
-- 全限定表明
SELECT products.prod_name FROM crashcourse.products;

排序

-- 只对prod_price倒序
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;
-- 最贵商品
FROM products ORDER BY prod_price DESC LIMIT 1;

过滤

SELECT prod_name, prod_price FROM products WHERE prod_price = 2. 50;

WHERE 子句操作符 BETWEEN AND 在指定两个值之间(包含)

SELECT prod_name FROM products WHERE prod_price IS NULL;

组合过滤,不要依赖默认计算次序,多用括号

SELECT prod_name, prod_price FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;

IN一般比OR执行更快

SELECT prod_name, prod_price FROM products WHERE vend_id IN (1002, 1003) ORDER BY prod_name;

MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反

SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name;

匹配

通配符LIKE

正则表达式REGEXP

计算字段

SELECT Concat( RTrim( vend_name), ' (', RTrim( vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;
SELECT prod_id, quantity, item_price, quantity* item_price AS expanded_price FROM orderitems WHERE order_num = 20005;

函数

聚集函数

AVG()\COUNT()\MAX()\MIN()\SUM()

SELECT AVG( prod_price) AS avg_price FROM products;

使用COUNT(*)对表中行的数目进行计数, 使用COUNT(column) 对特定列中具有值的行进行计数,忽略NULL值。

SELECT SUM( item_price*quantity) AS total_price FROM orderitems WHERE order_num = 20005;

分组

除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。

GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

WHERE在数据分组前进行过滤, HAVING在数据分组后进行过滤。

SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;
SELECT vend_id, COUNT(*) AS num_prods FROM products WHERE prod_price >= 10 GROUP BY vend_id HAVING COUNT(*) >= 2;

查询子句顺序

SELECT | FROM | WHERE | GROUP BY | HAVING | ORDER BY | LIMIT

子查询

SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');

联结

外键

外键为某个表中的一列,它包含另一个表的主键,定义了两个表之间的关系

存在一个商品表和一个供应商信息表,供应商ID是供应商信息表的主键,这个供应商ID是商品表的外键,它将商品表和供应商信息表关联。

联结样例

SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;
SELECT customers.cust_id, orders.order_num FROM customers LEFT OUTER JOIN orders ON orders.cust_id = customers.cust_id;
SELECT customers.cust_name, customers.cust_id, COUNT( orders.order_num) AS num_ord FROM customers LEFT OUTER JOIN orders ON customers. cust_id = orders. cust_id GROUP BY customers.cust_id;

组合

SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price <= 5 UNION SELECT vend_id, prod_id, prod_price FROM products WHERE vend_id IN (1001, 1002);

如果使用UNION不想去重,应该使用UNION ALL

在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。

插入

INSERT INTO customers( cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email) VALUES(' Pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);
INSERT INTO customers( cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country) VALUES( 'Pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA' ), ( 'M. Martian', '42 Galaxy Way', 'New York', 'NY', '11213', 'USA' );

更新和删除

更新

UPDATE customers SET cust_email = 'elmer@ fudd. com' WHERE cust_id = 10005;
UPDATE customers SET cust_email = NULL WHERE cust_id = 10005;

删除

DELETE FROM customers WHERE cust_id >= 10010;

全表删除使用TRUNCATE TABLE更快

注意

使用UPDATE和DELETE使用WHERE之前,先用SELECT进行测试,MySQL没有撤销功能。

建表

CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char( 50) NOT NULL , cust_address char( 50) , cust_city char( 50) , cust_state char( 5) , cust_zip char( 10) , cust_country char( 50) , cust_contact char( 50) , cust_email char( 255) , PRIMARY KEY (cust_id) ) ENGINE= InnoDB;

MySQL数据类型

MySQL数据类型:字符串、数值、日期、二进制,具体再查询

联合主键

CREATE TABLE orderitems ( order_num int NOT NULL , order_item int NOT NULL , prod_id char( 10) NOT NULL , quantity int NOT NULL , item_price decimal( 8, 2) NOT NULL , PRIMARY KEY (order_num, order_item) ) ENGINE= InnoDB;

自增长

每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。

常用引擎

InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;
MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

更新表

ALTER TABLE vendors ADD vend_phone CHAR(20);

删除表

DROP TABLE customers2;

重命名表

RENAME TABLE customers2 TO customers;

视图

视图可以看成虚拟表,仅仅是用来查看存储在别处的数据的一种设施,视图本身不包含数据,它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。

CREATE VIEW orderitemsexpanded AS SELECT order_num, prod_id, quantity, item_price, quantity* item_price AS expanded_price FROM orderitems;

事务

事务处理(transactionprocessing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。

事务(transaction)指一组SQL语句;
回退(rollback)指撤销指定SQL语句的过程;
提交(commit)指将未存储的SQL语句结果写入数据库表;
保留点(savepoint)指事务处理中设置的临时占位符(place-holder),你可以对它发布回退(与回退整个事务处理不同)

回退

SELECT * FROM ordertotals; 
START TRANSACTION; 
DELETE FROM ordertotals; 
SELECT * FROM ordertotals; 
ROLLBACK; 
SELECT * FROM ordertotals;

INSERT、UPDATE和DELETE可以回退,CREATE或DROP不能回退

提交

START TRANSACTION; 
DELETE FROM orderitems WHERE order_ num = 20010; 
DELETE FROM orders WHERE order_ num = 20010; 
COMMIT;

当COMMIT或ROLLBACK语句执行后,事务会自动关闭(将来的更改会隐含提交)。

保留点

SAVEPOINT delete1;
ROLLBACK TO delete1;

保留点在事务处理完成(执行一条ROLLBACK或COMMIT)后自动释放。

标签:cust,读书笔记,必知,price,mysql,prod,id,SELECT,name
From: https://www.cnblogs.com/fattree/p/18249889

相关文章

  • 使用mysql_config_editor可以为特定的MySQL服务器或客户端程序设置登录路径
    login_path介绍在MySQL中,login_path通常不是MySQL服务器配置或SQL语句的一部分。但是,它经常与MySQL的命令行工具mysql_config_editor一起使用,这是一个允许用户安全地存储认证凭据(如用户名、密码和连接参数)的工具。mysql的client工具都能使用login-path,如......
  • MySQL中的日期格式化匹配
    在MySQL中,处理日期和时间数据是很常见的需求。在某些情况下,你可能需要从数据库中选择特定日期或格式化日期进行匹配。本文将介绍如何使用MySQL的SELECT语句对日期进行格式化匹配。1.基本的日期格式化函数MySQL提供了几个函数来处理和格式化日期和时间数据:DATE_FORMAT(dat......
  • MySQL数据库初体验
    SQLServer(微软公司产品)1、数据库基本概念(1)数据Data数据就是描述事物的符号记录。主要包括数字,文字、图形、图像、声音、档案记录等。一般以“记录”形式按统一的格式进行存储。(2)表表就是将不同的记录组织在一起。主要是用来存储具体数据。(3)数据库数据库(database)是表的集......
  • MySql 中 select 使用
    MySqlselect多种查询方式前言在数据库使用过程中,使用最多的场景就是查询数据,所以今天我们总结一下常用用的查询简单查询带条件查询多条件查询输出指定字段查询分组查询查询结果排序分页查询多表之间查询准备三张表:订单orders商品commodity用户users内容如下:......
  • MySQL + Keepalived自动切换
    目录一.环境准备二.部署软件三. master主机配置keepalived四.slave主机配置keepalived五.两台机器配置数据库检查脚本六.客户端模拟访问一.环境准备准备三个新环境的虚拟机,关闭防火墙和SElinux安全策略,并设置时间同步和配置好YUM源。虚拟IP用:192.168.226.20......
  • 快速提高MySQL查询效率的实用方法
    快速提高MySQL查询效率的实用方法包括以下几个方面,下面将详细列举并解释:使用合适的索引索引可以大大提高查询的速度,允许数据库系统快速定位和访问特定的数据行。在经常用于WHERE子句、JOIN操作和ORDERBY排序的列上创建索引。避免创建过多的索引,因为索引也会占用存储空间......
  • MySQL入门学习-子查询.ANY
        在MySQL数据库中,子查询是指一条查询语句嵌套在另一条查询语句中,可以用来实现复杂的查询逻辑。子查询通常在WHERE子句中使用,用于过滤或比较查询结果。    子查询ANY是指返回子查询结果集中的任意一个值,与其他子查询类型相比,子查询ANY的特点是返回值......
  • MySQL的高可用方案:深入Galera Cluster和ProxySQL
    一、引言1.1背景和重要性 随着互联网的发展与普及,数据库作为后端存储的重要组件,其稳定性、可用性和性能直接影响到一个系统的正常运行。特别是在高并发、大数据的现今环境下,一款高性能、高可用率的数据库系统更是大大提升了业务的效率和保障。 MySQL是一款广受欢......
  • mysql-sql-第十周
    学习目标:sql学习内容:31.查询所有同学的学生编号、学生姓名、选课总数、所有课程的成绩总和联合查询不会显示没选课的学生(上接)Selectstudents.stunm,name,u.s,u.tfromstudents,(selectstunm,sum(counm)s,sum(tscore)tfromscoregroupbystunm)uwhereu.stun......
  • 部署mysql-8.0.35
    第一步:卸载系统自带mariadb查看系统自带的Mariadb:rpm-qa|grepmariadb卸载系统自带的Mariadb:rpm-e--nodepsmariadb-libs-5.5.44-2.el7.centos.x86_64删除etc目录下的my.cnf:rm-rf/etc/my.cnf检查mysql是否存在:rpm-qa|grepmysql第二步:将下载的mysql安装包mysql-8.0.3......