MySQL见闻录 - 入门之旅(四)
在网上翻来覆去找不到一套适合新手自学的书,于是买了课,急急忙忙上完了课,又发现全还给老师了。 这一系列文放在这里,从下载软件开始,记录一条MySQL入门之旅。 新手也可以跟着这条路走,一条道走到黑。 粉丝可见,愿者上钩。 有任何疑问,参考三篇上课笔记,或者私信我。
1、我的上课笔记
数值类型
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 ;
关于存储程序就弄一个触发器吧。
- 动手写个数字输入框2:起手式——拦截非法字符
- Linux安装DNSmasq搭建自己的公共DNS
- (cljs/run-at (JSVM. :all) "一次说白DataType、Record和Protocol")
- 虚拟主机多域名转向
- .top域名名声大噪,这枚单字符10天建站上线!
- 编译期类型检查 in ClojureScript
- Chrome Extension in CLJS —— 搭建开发环境
- 双拼域名lanben.com以三万元成交
- 动手写个数字输入框3:痛点——输入法是个魔鬼
- Thinking in React Implemented by Reagent
- ssm整合Redis
- 前端魔法堂——调用栈,异常实例中的宝藏
- 开启MySQL的binlog日志
- C#解析JSON
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解