MySQL见闻录 - 入门之旅(四)

时间:2022-07-23
本文章向大家介绍MySQL见闻录 - 入门之旅(四),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在网上翻来覆去找不到一套适合新手自学的书,于是买了课,急急忙忙上完了课,又发现全还给老师了。 这一系列文放在这里,从下载软件开始,记录一条MySQL入门之旅。 新手也可以跟着这条路走,一条道走到黑。 粉丝可见,愿者上钩。 有任何疑问,参考三篇上课笔记,或者私信我。

1、我的上课笔记

MySQL数据库从入门到实战应用(学习笔记一)

MySQL数据库从入门到实战应用(学习笔记二)

MySQL数据库从入门到实战应用(学习笔记三)

数值类型

2、数值类别

MySQL能够识别和使用的数据值包括数值、字符串值、日期/时间值、坐标值和空值(NULL)。

3、特殊字符串处理

SQL标准对于字符串的两端规定为单引号。

MySQL可以识别出字符串中的转义序列,这就很尴尬:

那怎么办? 首先,这表里的转义序列是区分大小写的。

从上面这个表来看,可以使用来转义。

也可以使用转义字符来转义字符串中的单引号和双引号。

当然,处理字符串中引号还有别的办法: 1、如果引号与字符串两端引号相同,双写该引号,如: ‘I can ’ ’ t.’ “He said,” “I can 't.” " "

2、用不同引号把该字符串包起来,如: ’ “I can’t .” ’ " He said,'I can ‘t.’ "

4、MySQL如何处理非法数据

在默认的情况下,MySQL按照以下规则处理“数据越界”和其他非正常数据:

  • 对于数值数据列或TIME数据列,超出合法范围的值将被截短到最近的取值范围边界,然后把结果值存人数据库。
  • 对于字符串数据列(不包括ENUM和SET),太长的字符串将被截短到数据列的最大长度。
  • 对ENUM和SET数据列的赋值操作取决于在数据列定义里给出的合法取值列表。如果你赋值给某个ENUM数据列的值不是合法成员,MySQL 将把“出错”成员(也就是与零值成员相对应的空字符串)赋值给该数据列。如果你赋值给某个SET数据列的值包含非合法子字符串,MySQL将删除那些子字符串而只把剩下来的东西赋值给该数据列。
  • 对于日期和时间数据列,非法值将被转换为该类型的“零值”。
  • 如果在执行INSERT、REPLACE、 UPDATE、 LOAD DATA和ALTER TABLE等语句时发生上述转换,MySQL将生成一条警告消息。 在这几种语句执行完毕之后,你可以用SHOW WARNINGS语句去查看警告消息的内容。
  • 如果需要在插人或更新数据时进行更严格的检查,可以启用以下两种SQL模式之- :
mysql> SET sql_ mode = ' STRICT_ALL_TABLES';
mysql> SET sql_ mode = ' STRICT_TRANS_TABLES';

5、操作符

算术操作符

逻辑运算符

比较运算符

存储程序

6、复合语句与语句分隔符

走到这一步了,也该知道MySQL的执行,如果没什么特殊说明都是一个分号一句的,不过有些语句需要形成一个语句块,就像函数的那个{}一样。

在MySQL语句中,也有这样的分隔符:

  • 复合语句由begin开头,由end结尾。
  • 使用delimiter命令把mysql程序的语句分隔符定义为另一个字符或字符串,它必须是在存储例程的定义里没有出现过的。这样-来, mysql程序就不会把分号解释为语句终止符了,它将把整个对象定义作为一条语 句传递给服务器。在定义完存储程序之后,可以把mysql程序的语句终止符重新定义为分号。下面的例子在定义一一个存储过程时把mysq1程序的默认分隔符临时改变为$,然后在恢复了mysql程序的默认分隔符之后执行了那个存储过程:

7、触发器

触发器是与特定数据表相关联的存储过程,当相应的数据表被INSERT、DELETE 或UPDATE语句修改时,触发器将自动执行。触发器可以被设置成在这几种语句处理每个数据行之前或之后触发。触发器的定义包括一-条将在触发器被触发时执行的语句。

触发器要用CREATE TRIGGER语句来创建。在触发器的定义里需要表明它将由哪种语句(INSERT、UPDATE或DELETE)触发,是在数据行被修改之前还是之后被触发。触发器创建语句的基本语法如下所示:

CREATE TRIGGER trigger_ name  		# the trigger name

{BEFORE | AFTER}  					# when the trigger activates

{INSERT | UPDATE | DELETE }  		# what statement activates it

ON tbl_ name  						# the associated table

FOR EACH ROW trigger_ stmt;  		# what the trigger does

来个栗子看看:

CREATE TABLE t (percent INT, dt DATETIME);
delimiter $

CREATE TRIGGER bi_t BEFORE INSERT ON t

FOR EACH ROW BEGIN

SET NEW.dt = CURRENT TIMESTAMP;IF NEW.percent < 0 THEN

SET NEW.percent= 0;

ELSEIF NEW.percent> 100 THEN

SET NEW.percent = 100;

END IF;

ENDS

mysql> delimiter ;

关于存储程序就弄一个触发器吧。