4MYSQL必知必会(2和3)[0-23]

二十、更新和删除数据

还是有图片确实,这个好点(待更新
https://zcw.notion.site/MySQL-524a8f3ceb2d427ba53cc82d924c438a


  • update

UPDATE user set address = 'NLP' WHERE id IN (6, 7);

  • DELETE

DELETE from user WHERE id = 8;

DELETE不需要列名或通配符。DELETE删除整行而不是删除列

为了删除指定的列,请使用UPDATE语句:

如果省略了WHERE子句,则UPDATE或DELETE将被应用到表中所有的行。换句话说,如果执行UPDATE而不带WHERE子句,则表中每个行都将用新值更新。

二十一、创建和操纵表


  • create Table

表的主键可以在创建表时用**PRIMARY KEY**关键字指定。这里,列cust_id指定作为主键列。

如果你仅想在一个表不存在时创建它,应该在表名后给出IF NOT EXISTS

  • NULL

不要把NULL值与空串相混淆。NULL值是没有值,它不是空串。如果指定’'(两个单引号,其间没有字符),这在NOT NULL列中是允许的。空串是一个有效的值,它不是无值。NULL值用关键字NULL而不是空串指定。

  • AUTO_INCREMENT

AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量(从而才有这个关键字 AUTO_INCREMENT ),给该列赋予下一个可用的值。这样给每个行分配一个唯一的cust_id,从而可以用作主键值。

  • 指定默认值

  • 引擎类型

  • 类型

    • InnoDB
    • MEMORY
    • MyISAM

ENGINE=InnoDB

该引擎具体创建表,而在你使用SELECT语句或进行其他数据库处理时,该引擎在内部处理你的请求。多数时候,此引擎都隐藏在DBMS内,不需要过多关注它。

但MySQL与其他DBMS不一样,它具有多种引擎。它打包多个引擎,这些引擎都隐藏在MySQL服务器内,全都能执行CREATE TABLE和SELECT等命令。

如果省略ENGINE=语句,则使用默认引擎(很可能是MyISAM),多数SQL语句都会默认使用它。但并不是所有语句都默认使用它,这就是为什么ENGINE=语句很重要的原因(也就是为什么本书的样列表中使用两种引擎的原因)。

  • 更新表

ALTER TABLE

添加:ADD

删除:DROP

ALTER TABLE `user1` ADD 数字 CHAR(10) DEFAULT(10); -- 默认为10
ALTER TABLE `user1` DROP 数字;

小心使用ALTER TABLE 使用ALTER TABLE要极为小心,应该在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。

  • 删除表

DROP TABLE 表名

删除表没有确认,也不能撤销,执行这条语句将永久删除该表。

  • 重命名

RENAME TABLE

二十二、使用视图


我们已经看到了视图应用的一个例子。下面是视图的一些常见应用。

  • 重用SQL语句。

  • 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必
    知道它的基本查询细节。

  • 使用表的组成部分而不是整个表。

  • 保护数据。可以给用户授予表的特定部分的访问权限而不是整个
    表的访问权限。

  • 更改数据格式和表示。视图可返回与底层表的表示和格式不同的
    数据。

  • CREATE VIEW

  • show create view viewname

  • drop view viewname

利用视图,可一次性编写基础的SQL,然后根据需要多次使用。

  • 更新视图

更新一个视图将更新其基表(可以回忆一下,视图本身没有数据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行。

但是,并非所有视图都是可更新的。基本上可以说,如果MySQL不能正确地确定被更新的基数据,则不允许更新(包括插入和删除)。这实际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:

 分组(使用GROUP BY和HAVING);
 联结;
 子查询;
 并;
 聚集函数(Min()、Count()、Sum()等)

 DISTINCT;

 导出(计算)列

二十三、存储过程

PROCEDURE

CREATE PROCEDURE phonePro()
BEGIN
SELECT avg(phone) as phoneAvg
FROM user1;
END;
  • 调用:

CALL phonePro();

其效果等同于SELECT avg(phone) phonrAvg FROM user1;

  • 删除存储:

DROP PROCEDURE phonePro;

仅当存在时删除 如果指定的过程不存在,则DROP PROCEDURE将产生一个错误。当过程存在想删除它时(如果过程不存在也不产生错误)可使用DROP PROCEDURE IF EXISTS

其中:

DECIMAL(M, D)

如果m被省略了,那么m的值默认为10,
如果d被省略了,那么d的值默认为0.
举例表示:
1、decimal(5,2) 所指代的范围是-999.99~999.99 数字的最大位数是5位,小数点右侧是2位,即有两位小数。
2、decimal(7,6)所指代的范围是-9.999999~9.999999 数字的最大位数是7位,小数点右侧是6位,即有六位小数。
字的位数和所占字节数,有以下对应表:
小数点左侧位数
数据结构所占的字节数
1–2 1
3–4 2
5–6 3
7–9 4

举例表示:
decimal(18,9)小数位左右各为9位数,此数据所占以上表格即为4字节整数位,4字节小数位;
decimal(20,6)整数位为14位,小数位位6位,此数据需要4个字节给整数位的9位和3字节给另外的5位整数,另外小数位需要3个字节,总共是4+3+3 = 10个字节。
decimal不能够存储以“+”、“-”和“0”开头的数据,如果是“+”开头默认存为正数,而“-”开头则不存储
具体的对decimal的定义,可以在mysql源码中的strings/decimal.c文件中的decimal2bin()函数查看。
————————————————
版权声明:本文为CSDN博主「liaowenxiong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liaowenxiong/article/details/120378170

注意:传入了onumber,输出了ototal

DROP PROCEDURE chengji;  // 一定要事先清除同名的PROCEDURE

CREATE PROCEDURE chengji (
	IN number INT,
	OUT res DECIMAL(5, 2)
)
BEGIN
	SELECT id * 2
	from `user1`
	where id = number
	INTO res;
END;

CALL chengji(7, @res);
SELECT @res; // 结果:14

检查存储过程

为显示用来创建一个存储过程的CREATE语句,使用SHOW CREATE PROCEDURE 名称语句

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-znfc8yJT-1670173681620)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/029ddd6e-31a1-4a7a-8b3c-3dc3325485f2/Untitled.png)]

二十四、游标


使用简单的SELECT语句,例如,没有办法得到第一行、下一行或前10行,也不存在每次一行
地处理所有行的简单方法(相对于成批地处理它们)。

有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。

游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。

不像多数DBMS,MySQL游标只能用于存储过程(和函数)。

DECLARE命名游标,并定义相应的SELECT语句,根据需要带WHERE和其他子句。

定义游标:

打开游标:

OPEN CURSOR语句来打开

关闭游标:

CLOSE CURSOR

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值