这是对汇总(一)的进一步修改!

-- 2021/6/14 START

目录

-- 第四章 检索数据

-- 第五章 排序检索数据

-- 第六章 过滤数据

-- 第七章 数据过滤

-- 第八章 用通配符进行过滤

-- 第九章 用正则表达式进行搜索

-- 第十章 创造计算字段

-- 第十一章 文本处理函数

-- 第十二章 汇总数据

-- 第十三章 分组数据

-- 第十四章 使用子查询

-- 第十五章 联结表

-- 第十六章 创建高级联结

-- 第十七章 组合查询

-- 第十八章 全文本搜索

-- 第十九章 插入数据(增)

-- 第二十章 更新与删除数据(改与删)

-- 第二十一章 创建表:

-- 第二十二章 使用视图
-- 第二十三章 使用存储过程
-- 第二十四章 使用游标
-- 第二十五章 使用触发器
-- 第二十六章 管理事务处理
-- 第二十七章 全球化与本地化
-- 第二十八章 安全管理
-- 第二十九章 数据库维护
-- 第三十章   改善性能



-- 第四章 检索数据
4.5 去重以检索不同的行(返回的匹配列无重复项) 
SELECT DISTINCT 列 FROM 表

4.6 使用limit以限制结果 
SELECT 列 FROM 表 LIMIT 4 : 返回的列不多于四行
SELECT 列 FROM 表 LIMIT 3,5 : 返回从第3行开始的5行.
= SELECT 列 FROM 表 LIMIT 5 OFFSET 3 :返回的列不多于5行,且从第3行开始.

4.7 使用完全限定的表名以 跨表格 跨数据库 调用准确的列或表
SELECT 表.列 FROM 表 : 跨表格调用准确列
SELECT 表.列 FROM 数据库.表 : 跨数据库调用其准确的表以调用其表中准确的列


-- 第五章 排序检索数据
5.1 按单个列排序数据
SELECT 列 FROM 表 ORDER BY 列 :对列以字母顺序排列

5.2 按多个列排列数据
SELECT 列1,列2,列3 FROM 表 ORDER BY 列1,列2

5.3.1 指定排序方向
SELECT 列1,列2,列3 FROM 表 ORDER BY 列1,列2 ( ASC ):升序(默认)
SELECT 列1,列2,列3 FROM 表 ORDER BY 列1,列2 DESC :降序

5.3.2 指定某列排序
SELECT 列1,列2,列3 FROM 表 ORDER BY 列1 DESC ,列2 仅对列1降序

5.3.3 利用 LIMIT 及 ORDER BY 找出一个列最高最低值
SELECT 列 FROM 表 ORDER BY 列 LIMIT 1 :列表数字最小(商品最便宜)


-- 第六章 过滤数据
6.1 WHERE 句
SELECT 列1,列2 FROM 表 WHERE 列1=520:检查单个值

6.2 WHERE 子句操作符
=等于 >=大于等于 
<>不等于 !=不等于 :不匹配检查
BETWEEN a AND b 指定两个值ab之间 :范围值检查
WHERE 。。 IS NULL 查询空值 :空值检查


-- 第七章 数据过滤
7.1 AND 操作符
SELECT 列1,列2,列3 FROM 表 WHERE 列1 = 520 AND 列2 > 999

7.2 OR 操作符
SELECT 列1,列2,列3 FROM 表 WHERE 列1 = 520 OR 列2 > 999

7.3 AND 与 OR 的优先级及组合用法
SELECT 列1,列2,列3 FROM 表 WHERE 列1 = 520 OR ※列3 = 520 AND 列2 > 999 :这样就先处理了※后面的东西 因为and优先级更高
SELECT 列1,列2,列3 FROM 表 WHERE (列1 = 520 OR 列3 = 520) AND 列2 > 999 :括号里面的东西优先级最大
关于优先级总结: ()>AND>OR

7.4 IN 操作符
SELECT 列1,列2 FROM 表 WHERE vend_id IN (a,b) ORDER BY 列1 : 查询列1列2所对应的行中 vend_id 为a 或者为b的列并以列1的字母排序以返回。
总结:IN 就是限定取值只能在括号里显示的内容

7.5 NOT 操作符(否定where后的条件 达到除了。。。以外的效果)
SELECT 列1,列2 FROM 表 WHERE vend_id  NOT IN (a,b) ORDER BY 列1:查询列1列2所对应的行中 除了vend_id 为a 或者为b的所有列并以列1的字母排序以返回。


-- 第八章 用通配符进行过滤
8.1 like操作符及百分号 % 和下划线 _ 通配符的组合使用
SELECT 列1,列2 FROM 表 WHERE 列2 LIKE '%jet%' :查询列2中任意数量字符后含jet的所有字符
SELECT 列1,列2 FROM 表 WHERE 列2 LIKE '_jet' :查询列2中单个字符后含jet的所有字符
通配符总结:% 表示任意包括零;_只表示单个字符;
操作符总结:LIKE 搭配常通配符使用;


-- 第九章 用正则表达式进行搜索


-- 第十章 创造计算字段
10.1 计算字段 以执行算术运算
SELECT 列1,列2,列3,列2*列3 AS 商品总价 FROM 表 WHERE 字符=20005
例如教材page66 orders表收到的所有订单 orderitems表每个订单中的各项商品
SELECT prod_id,quantity,item_price FROM oderitems WHERE order_num=20005

10.1.2 常见算术操作符
+ - * / 加 减 乘 除

10.2 拼接字段 CONCAT
SELECT CONCAT (列1,空格'(',列2,')') FROM 表1 ORDER BY 列1 :返回的列中值格式就是'商品(国家)'即'列1(列2)' 列名为 CONCAT (列1,空格'(',列2,')');
总结 CONCAT : 格式:CONCAT(列1, '(',列2,')') FROM ;用法:返回的值以拼接字段返回.

10.2.2 
RTRIM 去掉值右边的所有空格以整理各个列 
LTRIM 去掉值左边的所有空格以整理各个列 
TRIM 去掉左右两边的空格
用法:放在列名前
SELECT CONCAT(RTRIM(列1),空格'(',RTRIM (列2),空格')') FROM 表1 ORDER BY 列1 
10.2.3 使用 AS 以用别名替换字段或值
SELECT CONCAT (列1,空格'(',列2,')') AS 商品(国家) FROM 表1 ORDER BY 列1,则返回的列名为商品(国家)


-- 第十一章 文本处理函数
11.0 常用的文本处理函数
LEFT()返回串左边的字符
LENGTH()返回串的长度
LOCATE()找出串的一个子串
UPPER()
LOWER()
RTRIM()
LTRIM()
TRIM()
SOUNDEX:返回串的soundex值
SUBSTRING():返回子串的字符 
SOUNDEX ():返回串的soundex值

11.1.1 文本转换大写 UPPER(),小写 LOWER();
SELECT UPPER (列1),列3,列1*列3 AS 商品总价 FROM 表 :列1 返回列1的1文本全部大写

11.1.2 返回子串的字符 SUBSTRING()

11.1.3 返回串的soundex值 SOUNDEX()
SELECT 列1, 列2, FROM 表 WHERE SOUNDEX(列1)= SOUNDEX ('王潇') :找出列1 和王潇同发音的字符

11.1.4 去掉右边的空格 RTRIM ()

11.2.1 使用日期和时间处理函数 -- (暑假学)

11.2.2 常用的日期和时间处理函数

11.3 常用的数据处理函数
ABS () COS () EXP () MOD () PI () RAND () SIN () SQRT () TAN ()
返回一个数的绝对值 角度的余弦 数的指数值 除操作的余数 圆周率 随机数 角度的正弦 平方根 角度的正切


-- 第十二章 汇总数据
12.0 聚集函数 运行在行组上 以计算和返回单个值的函数
AVG () 返回某列的平均值
COUNT () 返回某列的行数,或者满足某个条件或者满足某个特定值的行数.
MAX () 返回某列的最大值
MIN () 返回某列的最小值
SUM () 返回某列值之和,表中行组的和
 
12.1 AVG
SELECT AVG (prod_price) AS avg_price FROM products
SELECT AVG (prod_price) AS avg_price FROM products WHERE vend_id=10086 确定特定列或行的平均值

12.2 COUNT
a.使用 COUNT (*)函数 对表中行的数目进行计数,不管是否空值 NULL
b.使用 COUNT (COLUMN)对特定列中的值进行计数 忽略 NULL
a.select COUNT(*) AS num_cust FROM customers:客户的总数
b.select COUNT(cust_email) AS num_cust FROM customers;有电子邮箱的客户的总数

12.3 MAX (忽略 NULL 行)(需要指定列名)
SELECT MAX(prod_price) AS max_price FROM products

12.4 MIN (忽略 NULL 行)(需要指定列名)
SELECT MIN(prod_price) AS min_price FROM products

12.5 函数 SUM(quantity)返回订单中所有物品的数量之和,WHERE 子句限定只统计某个物品订单中的物品
SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num=20005
也可合计计算值,如总的订单金额:
SELECT SUM(quantity*item_price) AS total_price FROM orderitems WHERE order_num=20005

12.6 DISTINCT 只能用于 COUNT(列名).不能用 COUNT(*),类似于 DISTINCT 必须使用列名,不能用于计算或表达式.
以上所有的五个聚集函数都可使用 ALL 参数(默认)来指定所有行从而进行计算 或者 DISTINCT 只包含不同的值
SELECT AVG(DISTINCT prod_price)AS avg_price FROM products WHERE vend_id=1003;

12.7 组合聚集函数
SELECT COUNT(*) AS num_items,MIN(prod_price) AS price_min,MAX(prod_price) AS price_max,AVG(prod_price) AS price_avg FROM products;


-- 第十三章 分组数据
13.1 数据的分组:分组允许将数据分为多个逻辑组,以更能对每个组进行聚集计算.

13.2 创建分组 GROUP BY 
SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id
其中 有两个列 :vend_id 及 num_prods(这个列实质是count(*)返回的行 只是用as把列改名了),用 GROUP BY 返回分
组后的 vend_id,配合分组后的 vend_id对应的count(*) 返回值即(num_prods) 来返回两个列 从而达到分组且对应。

13.3 GROUP BY 说明:
1.哪怕嵌套了分组,最后也会将数据按照规定分类汇总。即建立分组时,指定的所有的列都必须一起计算(所以不能从个别的列取回数据)
2. GROUP BY 子句中列出的每个列必须是检索列或有效的列,不可是聚集函数,如果在select中用表达式,则 GROUP BY 的子句中也必须用表达式,不可用别名
3.关于null:若有null则会单独分组,多个null也会分为一组
4. GROUP BY 必须在 WHERE 后 ORDER BY 前
5. GROUP BY 列 WITH ROLLUP:可以得到每个分组以及每个分组的汇总级别(针对每个分组)的值

13.4 过滤分组
因为 WHERE 过滤指定的是行 不是分组
所以关于分组必须用 HAVING 其中 HAVING 包括 WHERE 所有功能 区别只是过滤行和组
SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*)>=2:过滤两个及以上的订单
WHERE 与 HAVING 的组合:
思路就是用 WHERE 过滤某列,返回的列汇总为组,再使用 HAVING 进行分组过滤
查询过去12个月有2单以上的顾客,使用 WHERE 过滤12月内下过的订单 HAVING 过滤订单
例: WHERE 过滤prod_price至少为10的行,然后按vend_id分组,HAVING 过滤计数为大于等于2的分组
SELECT vend_id,COUNT(*) AS num_prods FROM products WHERE prod_price >=10 GROUP BY vend_id HAVING COUNT(*)>=2:列出2个含以上,价格大于等于10的产品的供应商

13.5分组和排序
ORDER BY 1排序产生的输出 2不管选没选择 任何列可使用 3不一定需要
GROUP BY 1分组行,但输出可能不是分组的顺序 2只可能使用选择列和表达式列 而且必须使用每个选择列表达式 3如果与聚集函数一起使用列或表达式,则必须使用
2者组合使用的实例:
SELECT order_num,SUM(quantity*item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price)>=50 ORDER BY ordertotal
GROUP BY 子句用以按订单号order_num列分组数据 便于 SUM (..)函数能够作为ordertotal列返回总计订单价格,HAVING 子句用以组类级别的过滤数据,用以只返回总计价格订单大于等于50的订单
,最后用 ORDER BY 排序

总结:select子句排序
SELECT 返回的列或表达式 必须使用
FROM 从中检索数据的表 仅在从表中选择数据时使用
WHERE 行级过滤 不必须使用
HAVING 组级过滤 不必须使用
GROUP BY 分组说明 仅在按组计算聚集时使用
ORDER BY 输出排序顺序 不必须使用
LIMIT 要检索的函数 不必须使用


-- 第十四章 使用子查询
14.1 使用子查询 就是select中的select无限嵌套
SELECT cust_name,cust_contact FROM customers WHERE cust_id IN(
SELECT cust_id FROM orders WHERE order_num IN (
SELECT order_num FROM orderitems WHERE prod_id='tnt2' ));
先执行tnt那个语句 从内而外 执行

14.2 使用子查询的另一个方法 创建计算字段
假如需要显示customers表中每一个客户的订单总数,订单与相应的客户id存储在orders表中
所以需要1.从customers表中检索客户列表 2.对于检索出的每个用户,统计其在orders表中的订单数目
可用select(*)来对表中的所有行进行计数,并且通过提供一条where子句来过滤某个特定的客户id,可仅对该客户的id进行计数
对每个客户进行count(*)计算
SELECT COUNT(*) AS orders FROM orders WHERE cust_id=10001;
为了对每个客户进行count(*)计算,应该将count作为一个子查询
SELECT cust_name.cust_state,(SELECT COUNT(*) FROM orders WHERE orders.cust_id=customers.cust_od)AS orders FROM customers 
ORDER BY cust_name(其中,必须完全限定列名)
这条select语句对customers表中的每个客户返回三列:cust_name.cust_state.orders这三个,orders是一个计算字段,它是由圆括号中的子查询建立的。该子查询对
检索出的每一个客户执行一次,在此例子中,共执行了次(因为检索结果是个5个用户)


-- 第十五章 联结表
15.1创建联结:规定要联结的表以及他们如何关联
SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE vendors.vend_id=products.vend_id ORDER BY vend_name,prod_name;需要完全限定列名(联结条件),如果不限定列名
就会造成笛卡尔积:返回的结果为笛卡尔积即返回的行数为表1的行数乘以表二的行数.

15.2内部联结:等值联结 通常省略 INNER
通常有的,存在的东西才会联结.
SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id=products.vend_id

15.3联结多个表:列出所有表,然后定义表之间的关系
SELECT 列1,列2,列3,列4 FROM 表1,表2,表3 WHERE 表2.vend_id=表3.vend_id AND 表1.prod_id=表2.prod_id AND order_num=20005;

15.4 引用14.1 嵌套子查询这一复杂方法和使用多个联结的方法之比较
-引用-14.1 使用子查询 就是select中的select无限嵌套
SELECT cust_name,cust_contact FROM customers WHERE cust_id IN(
SELECT cust_id FROM orders WHERE order_num IN (
SELECT order_num FROM orderitems WHERE prod_id='tnt2' ));
先执行tnt那个语句 从内而外 执行
在15.3中,可以这样写
SELECT cust_name,cust_contact 
FROM customers,orders,orderitems 
WHERE customers.cust_id=orders.cust_id 
AND orderitems.order_num=orders.order_num 
AND prod_id='tnt2';


-- 第十六章 创建高级联结 
16.1 使用表别名 空格也表示别名
-引用第10章-
SELECT CONCAT (RTRIM (列1),空格'(',RTRIM (列2),')') AS bieming FROM 表1 ORDER BY 列1 
-引用15章例子以进行别名例子改造
SELECT cust_name,cust_contact 
FROM customers AS c,orders AS o,orderitems AS oi
WHERE c.cust_id=o.cust_id 
AND oi.order_num=o.order_num 
AND prod_id='tnt2';

16.2使用不同类型的联结
16.2.1自联结
比较子查询与自联结
子查询:SELECT prod_id,prod_name FROM products WHERE vend_id=(SELECT vend_id FROM products WHERE prod_id='dtntr')
自联结:SELECT p1.prod_id,p1.prod_name FROM products AS p1,products AS p2 WHERE p1.vend_id=p2.vend_id AND p2.prod_id='dtntr';

16.2.2 自然联结:无论何时对表进行联结,应该至少有一个列出现在不止一个表中(被联结的列).标准的联结(前一章介绍的内部联结)返回所有的数据,甚至相同的列多次出现.
而我们的自然联结,就是用来排除多次出现这一情况的,使每一个列只返回一次. 使用通配符(SELECT*)来完成这一工作以对其他所有的表的列明确的子集来完成的.
SELECT c.*,o.order_num,o.order_date,oi.prod_id,oi.quantity,oi.item_price 
FROM customers AS c,orders AS o,orderitems AS oi WHERE c.cust_id=o.cust_id AND oi.order_num=o.order_num AND prod_id='fb':在这个例子中,通配符只对第一个表使用,
所有其他列明确列出,所以没有重复的列被检索出来.

16.2.3 外部联结 
许多联结将一个表中的行与另一个表中的行相关联.但有时候会需要包含没有关联行的那些行(such AS : 对每个客户下单数量进行统计,包括没下单的用户.联结包含
了那些在表中没有关联行的行,这种类型的联结被称之为外部联结)通常省略 OUTER 没有值的通常mysql自动赋值为 NULL ,一般复合几个表的时候,将某表放在固定的方向位
置,且一般不要用内外联结结合.
SELECT customers.cust_id,orders.order_num FROM customers INNER JOIN orders ON customers.cust_id=orders.cust_id:INNER JOIN ON 型 检索所有客户及其下单情况.
SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id=orders.cust_id:LEFT OUTER JOIN ON 型 检索所有客户
包括没下单的 其中,LEFT 指的是 OUTER JOIN 左边的表,还可以用 RIGHT 用以指 OUTER JOIN 右边的表 哪张表是主要的 数据最多的 就取表左右的那个方向
如为了从右边的表选择所有行,应该使用 RIGHT OUTER JOIN 如: 
SELECT customers.cust_id,orders.order_num FROM customers RIGHT OUTER JOIN orders ON orders.cust_id=customers.cust_id
附:全外联结:MySQL不支持,FULL JOIN :列出左右表所有列.

16.3 使用带聚集函数的联结
聚集函数在12章的讲解中,它是用来汇总数据的,但聚集函数也可以跨表以联结一起使用汇总.
1.如果要检索所有客户和每个客户所下的订单数:
SELECT customers.cust_name,customers.cust_id,
COUNT(orders.order_num) AS num_ord FROM customers INNER JOIN orders 
ON customers.cust_id=orders.cust_id GROUP BY customers.cust_id:
这个 SELECT 语句用 INNER JOIN ON 将customers和orders表相关联,GROUP BY 子句按客户分组数据
因此,函数调用count(orders.order_num)对每个客户的订单进行计数,将它作为num_ord来返回
2. 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:
使用左外部联结以查询所有客户包含没有下单的所有客户,结果也显示了 mouse house,其0个订单


-- 2021/6/16 START
-- 第十七章 组合查询
多数sql查询只包含从一个或多个表返回的数据的单挑select语句,MySQL允许多个查询(多条select语句),并将结果作为单个结果集返回,
这些组合查询被称为并(UNION)或复合查询(compound QUERY)
用于:1单个查询中从不同的表返回类似结构的数据  2对单个表执行多个查询,返回单个查询数据
1组合查询和2多个where子句条件的单条查询完成的工作相同
组合查询用法:1各条语句前 放上union 2 4条select 则3个union 3union每个查询必须包括相同的列,表达式和聚集函数,只是次序可以不一样 4 列数据类型必须完全兼容:类
型不必完全相同,但必须是 dbms 可以隐含地转换的类型(例如不同的数值类型或不同的日期类型) 5 union默认去重,如果不需要去重,则 UNION ALL 6 不允许使用多个 ORDER by语句
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 (1002,1003);
多个where子句条件的单条查询:
SELECT vend_id,prod_id,prod_price
FROM products WHERE prod_price <=5 
OR 
vend_id IN (1002,1003);


-- 第十八章 全文本搜索
18.1 启动全文本搜索支持
再创建表 CREATE TABLE 时 在最后一列 括号)的前面写一个 FULLTEXT(需要全文本搜索的列)

18.2.1进行全文本搜索
MATCH(指定被搜索的列)AGAINST(指定要使用的搜索表达式) 指定多列则列出他们
SELECT 列1 FROM 表1 WHERE MATCH(列1) AGAINST('某文本如rabbit')

18.2.1也可用 LIKE 子句:
SELECT 列1 FROM 表1 WHERE 列1 LIKE '%rabbit%'

18.2.2
如果想搜索不止某文本如'rabbit'的句子,还想搜索关于他的补充 在 AGAINST(... WITH QUERY EXPANSION)则okay了

18.2.3 布尔文本搜索p128 p129


-- 第十九章 插入数据(增)
19.1 数据插入:插入完整的行,插入行的一部分,插入多行,插入某些查询结果.
添加新的客户到customers表:
INSERT INTO customers VALUES(NULL,'信息1','信息2','信息3','信息1','信息4',NULL,NULL):1如果某列没有值,则 NULL;2存储到每个表列中的数据需要
在 VALUES 子句中给出,每个列需要提供一个值
另外的:
INSERT INTO customers (列1,列2,列3,列4,列5) VALUES(NULL,'信息1','信息2','信息3','信息1','信息4')
插入多行:
INSERT INTO customers (列1,列2,列3,列4,列5) VALUES(NULL,'信息1','信息2','信息3','信息1','信息4');INSERT INTO customers (列1,列2,列3,列4,列5)  
VALUES(NULL,'信息5','信息6','信息7','信息8','信息9');
简单插入多行法:
INSERT INTO customers (列1,列2,列3,列4,列5) VALUES(NULL,'信息1','信息2','信息3','信息1','信息4'),(NULL,'信息5','信息6','信息7','信息8','信息9');
插入检索出来的数据:
INSERT INTO customers (列1,列2,列3,列4,列5) SELECT 列1,列2,列3,列4,列5 FROM custnew;插入多少行取决于custonew有多少行
插入检索出来的数据 使用 INSERT SELECT 语句中可以包含含有 WHERE 的子句以过滤插入的数据


-- 第二十章 更新与删除数据(改与删)
更:UPDATE :更新表中的特定行或所有行 特定行利用 WHERE 实现
更用法:要更新的表,列名和它的新值,确定要更新行的过滤条件
UPDATE 表 SET cust_Email = 'elmer@qqqq.com' WHERE cust_id = '10005':SET 子句设置cust_email列为指定的值 WHERE 子句设置过滤的特定行 如果没有则更新所有行
更新多个:UPDATE 表 SET cust_Email = 'elmer@qqqq.com',cust_name='wang' WHERE cust_id = '10005':更新多个行也只需要一个 set命
令,每个列=值对之间用逗号隔离,最后一列不需要
如果出错 不能更新 则:
IGNORE 关键字 UPDATE IGNORE 表:可继续更新,即使发生错误

删除数据:
方法一: 更新列值为 NULL ,UPDATE 表 SET 列=NULL WHERE 列2=1005
方法二:DELETE :DELETE FROM 表 WHERE 行=10006:删除整行


-- 第二十一章 创建表:
CREATE TABLE customers(
cust_id INT NOT NULL AUTO_INCREMENT,
cust_name CHAR(50) NOT NULL,
cust_address CHAR(50) NOT NULL,
cust_city CHAR(50) NOT NULL,
cust_state CHAR(5) NOT NULL,
cust_zip CHAR(10) NOT NULL,
cust_country CHAR(50) NOT NULL,
cust_contact CHAR(50) NOT NULL,
cust_email CHAR(255) NOT NULL,
PRIMARY KEY (cust_id)
)ENGINE=INNODB:指定cust_id为主键 ' 空格 '也可插入 NOT NULL,null指的是没有值的列

何为 AUTO_INCREMENT ?
自动增量:只允许一个auto列,而且必须使它被索引(如设置它为主键)
每增加一行时自动增量,每次执行 INSERT 操作时 给下一列赋予可操作的值 从而给每行分配一个唯一的cust_id,从而用作主键.
增加列的时候,订单编号:SELECT LAST_INSERT_ID 返回最后一个 AUTO_INCREMENT 值.

DEFAULT 如果有 NOT NULL 出现 但又没有值 默认填入 DEFAULT 常量,则没有数据的会默认显示常量,但不可用函数,DEFAULT 只支持常量

关于主键及多列组合为主键:
主键值必须唯一,表中的每一行必须有唯一的主键值,如果主键使用单个列,则它的值必须唯一,如果使用多个值,则他们的组合值必须唯一
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;
每个订单包含多个商品,但每个订单任何时候都只有1个第一项物品,1个第二项物品,如此等等,因此,订单号(order_num列)和订单物品(order_item列)的组合是唯一
的,所以可以作为主键.

引擎:
-- INNODB 事务处理引擎 不支持全文本搜索 可靠
-- MYISAM 不支持事物处理 支持全文本搜索 性能极高
-- MEMORY 数据存储在内存而不是磁盘 速度很快 适合临时表.

关于表的增删改
ALTER TABLE 之后给出要更改的表名 表必须存在
ALTER TABLE  vendors ADD vend_phone CHAR(20);

删除刚刚添加的列:
ALTER TABLE vendors DROP COLUMN vend_phone;

ALTER TABLE 定义外键
ALTER TABLE orderitems ADD CONSTRAINT fk_oderitems_orders FOREIGN KEY (order_num) REFERENCES orders (order_num)

删除表
DROP TABLE 表

重命名表:
RENAME TABLE 旧表1 TO 新表1,旧表2 TO 新表2;
-- 2021/6/14 END


-- 第二十二章 使用视图
-- 第二十三章 使用存储过程
-- 第二十四章 使用游标
-- 第二十五章 使用触发器
-- 第二十六章 管理事务处理
-- 第二十七章 全球化与本地化
-- 第二十八章 安全管理
-- 第二十九章 数据库维护
-- 第三十章   改善性能

潇的MySQL自学日记-汇总(二)相关推荐

  1. MySQL基础操作汇总二

    单表查询: SELECT * FROM 数据名; 简单的获取表中的所有数据 SELECT 字段1,字段2.. FROM 表名; 简单的从表中查询指定的字段 SELECT * FROM 表名 ORDER ...

  2. MySQL知识点整理汇总

    文章目录 前言 一.数据库与SQL 1. 数据库与数据库管理系统 2. 关系数据库 3. MySQL语句的种类 4. MySQL语句的基本书写规则 二.MySQL语句的两大顺序 1. MySQL 语句 ...

  3. 【狂神说】 mysql 自学总结 4~6章

    目录 前言 4.DQL查询语句(最重点) 4.1.DQL 4.2.指定字段查询 4.3.where 条件子句 4.4.联表查询 4.5.分页和排序 4.6.子查询 4.7.分组和过滤 4.8.sele ...

  4. MySQL自学笔记详细版(从安装到入门)

    MySQL学习目录 前言 一.MySQL是什么? 二.MySQL的好处 三.数据库的概念 1. DB(database) 2.DBMS(Database Management System) DBMS ...

  5. MySQL--经典题目综合汇总二(进阶)--建议先把之前的看了,难度较高

    MySQL--经典题目综合汇总二(进阶)--建议先把之前的看了,难度较高 1.表格创建 2.题目部分 题目一:求所有课程平均成绩排名在2到4名的同学信息(压轴) 题目二:查询不同老师所教不同课程平均分 ...

  6. 【Robot】 信息安全自学教程汇总 转自【Eastmount 】

    原文链接:https://blog.csdn.net/Eastmount/article/details/102816621 这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特 ...

  7. MySQL字段类型汇总及用法(超详细)

    /********************************FileName: MySQL字段类型汇总及用法*Author: weibo*Version: v1.0*Date: 2016.5.1 ...

  8. Java面试笔试题大汇总二(最全+详细答案)

    本篇文章内容过多,只能分成两部分: 汇总一:https://blog.csdn.net/qq_20757489/article/details/93714854 汇总二:https://blog.cs ...

  9. 【Mysql学习日记2——修改】

    系列文章目录 [Mysql学习日记1--排序与修改] 文章目录 系列文章目录 前言 一.修改表的名字(修改) 1.题目要求 2.解题思路 3.代码示例 二.按日期分组销售(查询:非重复计量) 1.题目 ...

最新文章

  1. 5.7版本mysql操做语法_mysql-5.7.25安装及常用语法
  2. ios alertview 链接_iOS-MobLink集成流程
  3. oracle rman异机恢复
  4. Java I/O系统学习系列一:File和RandomAccessFile
  5. Android中应用百度地图API开发地图APP实例-显示百度地图
  6. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)
  7. kdbg调试linux汇编,Ubuntu 16.04安装Kdbg替代Insight实现汇编的调试
  8. mix2s 升级android p,小米推送小米MIX2S 安卓P稳定版更新 这两个隐藏升级你发现了吗?...
  9. 深度解析 | 基于DAG的分布式任务调度平台:Maat 1
  10. java基本数据类型自动转包装类_Java基础教程之基本类型数据类型、包装类及自动拆装箱...
  11. React学习之旅Part7:React绑定事件和使用setState()修改state的数据、React实现双向数据绑定
  12. linux红帽子桌面模式ftp,linux红帽子VSFTPD配置.doc
  13. 开关电源与线性稳压电源(LDO)的理解和区别
  14. 计算机毕业设计JAVA图书个性化推荐系统mybatis
  15. 揭开股票量化投资策略的神秘面纱
  16. DEL: 华为无线modem变无线路由器
  17. python七段数码管的绘制 获取系统时间
  18. bzoj:1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名
  19. 《通信原理》AM/DSBSC/SSB信号的调制与解调仿真
  20. java 查找 替换_Java 查找替换Excel数据

热门文章

  1. TI AoA Master/PC 数据发送、接收流程梳理
  2. go一键安装脚本(linux)
  3. pandas的resample使用
  4. 解决Android模拟器打不开的问题!...
  5. 通向实在之路暂记003:双曲几何
  6. Oracle数据库巡检表--服务器、操作系统、存储、数据库
  7. 计算机常用后缀名汇总,常用文件格式大全(二)
  8. 有剩余空间为何不能复制文件?
  9. 【3D电子书制作软件】名编辑电子杂志大师教程 | 如何控制flash播放?
  10. 1.U盘安装ubuntu系统