MySQL 笔记(一)

内容源自书籍:MySQL必知必会

第一章 了解SQL

1. 什么是数据库

数据库是一个以某种有组织的方式存储数据的集合(通常是一个文件或一组文件)

注意:我们并不直接访问数据库,而是通过DBMS操纵数据库!

2. 表和模式

表:某种特定类型数据的结构化清单,同一数据库中的表名不能相同
模式: 关于数据库和表的布局及特性的信息 performance_schema

3. 主键规则

  • 任意两行都不具有相同的主键值
  • 每个行都必须有一个主键值(该值不能为NULL)

主键通常定义在一个列上,但这不是必须的,也可以一起使用多个列作为主键。此外,最好不在主键列中使用可能会更改的值!(例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,就要更改这个主键)

第二章 MySQL简介

DBMS可以分为两类:一类是基于共享文件系统的DBMS,另一类为基于客户机-服务器的DBMS.
MySQL, Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据库。例如:

  • 服务器软件是MySQL DBMS
  • 客户机可以是MySQL提供的工具(命令行)、脚本语言、web应用开发语言、程序设计语言等

MySQL命令行:

  • 命令用;或\g结束
  • 输入help或\h获得帮助
  • 输入quit或exit退出命令行

第三章 了解数据库和表

1. 连接数据库(登录)

mysql -u root -p

2. 选择数据库

在最初连接到MySQL的时候,没有数据库供我们使用,需要使用use关键字,选择一个数据库,这时才能使用数据库。

use database;

3. 了解数据库和表

显示MySQL内的数据库

show databases;

+--------------------+
| Database           |
+--------------------+
| benchbase          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tpcc               |
+--------------------+
6 rows in set (0.07 sec)

显示某个数据库中的表

show tables;

显示表的列(两者等价),describe等于show columns from

show columns from customers; 
describe customers;

第4章 检索数据

// 检索单个列,返回数据的顺序没有意义,是未排序的
SELECT prod_name FROM products;

// 检索多列数据
SELECT prod_name, prod_id FROM products;

// 检索所有列,使用通配符(*)
SELECT * FROM products

// 检索不同的行,用DISTINCT关键字去重
SELECT DISTINCT prod_id FROM products;

// 限制返回结果的行数,用LIMIT,行号从0计数
SELECT prod_name FROM products LIMIT 5; // 返回值不多于5行
SELECT prod_name FROM products LIMIT 5, 5; // 从行号5开始的5行

第5章 排序检索数据

子句:SQL语句由子句构成,有些子句是必须的,有些是可选的。子句的例子有SELECT语句的FROM子句

// 按单个列排序,指定排序的列未必是 被选择的列
SELECT prod_name FROM products ORDER BY prod_id;

// 按多个列排序,首先按price排序,若price相等,按照name
SELECT prod_id, prod_name FROM products ORDER BY prod_price, prod_name;

// 降序排列,指定DESC关键字,默认是升序
SELECT prod_name FROM products ORDER BY prod_id DESC;
SELECT prod_id, prod_name 
FROM products 
ORDER BY prod_price DESC, prod_name; // DESC只对price起作用,name仍然是升序

第6章 数据过滤

利用 SELECT 语句的 WHERE 子句指定搜索条件(ORDER BY语句要在WHERE后面)
WHERE子句的操作符有:=,!=,<,<=,>,>=,between x and y

SELECT prod_name, prod_price
FROM products
WHERE prod_name = 'fuses'; // MySQL在执行匹配的时候默认不区分大小写,所以fuses和Fuses也能匹配
// 串匹配需要用引号

// 不由供应商1003制造的所有产品 != 和 <> 是一样的
SELECT vend_id, prod_name
FROM products
WHERE vend_id <> 1003;

// 空值检查
SELECT prod_name
FROM products
WHERE prod_price IS NULL; // 空不是0,也不是空串,也不是空格
进阶技巧

为了更强的过滤控制,MySQL允许给出多个WHERE子句,这些子句以两种方式使用:以AND子句的方式或OR子句的方式

// AND 操作符
SELECT prod_id, prod_price, prod_name
FROM products
WHERE vend_id = 1003 AND prod_price <= 10;

// OR 操作符
SELECT prod_price, prod_name
FROM products
WHERE vend_id = 1002 OR vend_id = 1003;

// AND 的优先级比 OR 更高,SQL在处理OR操作符前,优先处理AND操作符
SELECT prod_name, prod_price
FROM product
WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price <= 10;

对上述操作符优先级的问题,还有另外一种解决办法

// IN 操作符
SELECT prod_name, prod_price
FROM product
WHERE vend_id IN (1002, 1003) // 1002和1003都在,不是左闭右开
ORDER BY prod_name;

IN操作符的优点:

  • IN操作符的语法更清楚且更直观
  • IN操作符一般比OR操作符清单执行更快
  • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句

NOT 操作符: MySQL支持NOT操作符对 IN, BETWEEN 和 EXISTS 取反

SELECT prod_name, prod_price
FROM product
WHERE vend_id NOT IN (1002, 1003) 
ORDER BY prod_name;
posted @   麦特·莱博  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示