mysql基础知识和pymysql
一、视图
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
- CREATE VIEW v1 AS #视图的名称
- SELET nid,
- name
- FROM
- A
- WHERE
- nid > 4 #视图的表
创建视图
- DROP VIEW v1 #关键字加视图的名称
删除视图
- #ALTER VIEW 视图名称 AS SQL语句
- ALTER VIEW v1 AS
- SELET A.nid,
- B. NAME
- FROM
- A
- LEFT JOIN B ON A.id = B.nid
- LEFT JOIN C ON A.id = C.nid
- WHERE
- A.id > 2
- AND C.nid < 5
修改视图
由于视图不是真是存在的表,所以不能进行创建、更新、插入等操作,只作为查询。
二、触发器
触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。
1.安全性。可以基于数据库的值使用户具有操作数据库的某种权利。
2.审计。可以跟踪用户对数据库的操作。
3.实现复杂的数据完整性规则。
4.实现复杂的非标准的数据库相关完整性规则。触发器可以对数据库中相关的表进行连环更新。例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行。
5.同步实时地复制表中的数据。
6.自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。例如,如果公司的帐号上的资金低于5万元则立即给财务人员发送警告数据。
- # 插入前
- CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
- BEGIN
- ...
- END
- # 插入后
- CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
- BEGIN
- ...
- END
- # 删除前
- CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
- BEGIN
- ...
- END
- # 删除后
- CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
- BEGIN
- ...
- END
- # 更新前
- CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
- BEGIN
- ...
- END
- # 更新后
- CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
- BEGIN
- ...
- END
基础语法
- delimiter //
- CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
- BEGIN
- IF NEW. NAME == 'alex' THEN
- INSERT INTO tb2 (NAME)
- VALUES
- ('aa')
- END
- END//
- delimiter ;
插入前触发器
- delimiter //
- CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
- BEGIN
- IF NEW. num = 666 THEN
- INSERT INTO tb2 (NAME)
- VALUES
- (''),
- ('') ;
- ELSEIF NEW. num = 555 THEN
- INSERT INTO tb2 (NAME)
- VALUES
- (''),
- ('') ;
- END IF;
- END//
- delimiter ;
插入后触发器
特别的:NEW表示即将插入的数据行,OLD表示即将删除的数据行。
- DROP TRIGGER tri_after_insert_tb1;
删除触发器
三、函数
MySQL函数,是一种控制流程函数,属于数据库用语言。
- CHAR_LENGTH(str)
- 返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
- 对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。
- CONCAT(str1,str2,...)
- 字符串拼接
- 如有任何一个参数为NULL ,则返回值为 NULL。
- CONCAT_WS(separator,str1,str2,...)
- 字符串拼接(自定义连接符)
- CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
- CONV(N,from_base,to_base)
- 进制转换
- 例如:
- SELECT CONV('a',16,2); 表示将 a 由16进制转换为2进制字符串表示
- FORMAT(X,D)
- 将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。
- 例如:
- SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'
- INSERT(str,pos,len,newstr)
- 在str的指定位置插入字符串
- pos:要替换位置其实位置
- len:替换的长度
- newstr:新字符串
- 特别的:
- 如果pos超过原字符串长度,则返回原字符串
- 如果len超过原字符串长度,则由新字符串完全替换
- INSTR(str,substr)
- 返回字符串 str 中子字符串的第一个出现位置。
- LEFT(str,len)
- 返回字符串str 从开始的len位置的子序列字符。
- LOWER(str)
- 变小写
- UPPER(str)
- 变大写
- LTRIM(str)
- 返回字符串 str ,其引导空格字符被删除。
- RTRIM(str)
- 返回字符串 str ,结尾空格字符被删去。
- SUBSTRING(str,pos,len)
- 获取字符串子序列
- LOCATE(substr,str,pos)
- 获取子序列索引位置
- REPEAT(str,count)
- 返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。
- 若 count <= 0,则返回一个空字符串。
- 若str 或 count 为 NULL,则返回 NULL 。
- REPLACE(str,from_str,to_str)
- 返回字符串str 以及所有被字符串to_str替代的字符串from_str 。
- REVERSE(str)
- 返回字符串 str ,顺序和字符顺序相反。
- RIGHT(str,len)
- 从字符串str 开始,返回从后边开始len个字符组成的子序列
- SPACE(N)
- 返回一个由N空格组成的字符串。
- SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)
- 不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。
- mysql> SELECT SUBSTRING('Quadratically',5);
- -> 'ratically'
- mysql> SELECT SUBSTRING('foobarbar' FROM 4);
- -> 'barbar'
- mysql> SELECT SUBSTRING('Quadratically',5,6);
- -> 'ratica'
- mysql> SELECT SUBSTRING('Sakila', -3);
- -> 'ila'
- mysql> SELECT SUBSTRING('Sakila', -5, 3);
- -> 'aki'
- mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
- -> 'ki'
- TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)
- 返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格。
- mysql> SELECT TRIM(' bar ');
- -> 'bar'
- mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
- -> 'barxxx'
- mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
- -> 'bar'
- mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
- -> 'barx'
- 部分内置函数
一些基础函数
- delimiter \\ #修改分隔符,防止定义函数时代码就被执行了
- create function f1( 创建函数并传参数
- i1 int,
- i2 int)
- returns int
- BEGIN
- declare num int;
- set num = i1 + i2;
- return(num);
- END \\
- delimiter ; #定义后把分隔符修改回去
创建函数
- drop function func_name; #删除函数
- # 获取返回值
- declare @i VARCHAR(32);
- select UPPER('alex') into @i;
- SELECT @i;
- # 在查询中使用
- select f1(11,nid) ,name from tb2;
删除和使用
四、事务
事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
在数据库中需要设置引擎innodb,才支持事务操作,即如果该事务操作失败,则回滚到执行之前的状态。
- delimiter \\
- create PROCEDURE p1(
- OUT p_return_code tinyint
- )
- BEGIN
- DECLARE exit handler for sqlexception
- BEGIN
- -- ERROR
- set p_return_code = 1;
- rollback;
- END;
- DECLARE exit handler for sqlwarning
- BEGIN
- -- WARNING
- set p_return_code = 2;
- rollback;
- END;
- START TRANSACTION;
- DELETE from tb1;
- insert into tb2(name)values('seven');
- COMMIT;
- -- SUCCESS
- set p_return_code = 0;
- END\\
- delimiter ;
- 支持事务的存储过程
在存储过程中使用事务
五、存储过程
- -- 创建存储过程
- delimiter //
- create procedure p1()
- BEGIN
- select * from t1;
- END//
- delimiter ;
- -- 执行存储过程
- call p1()
- 无参数存储过程
无参存储过程
- -- 创建存储过程
- in:输入
- out:输出
- inout:输入输出
- delimiter \\
- create procedure p1(
- in i1 int,
- in i2 int,
- inout i3 int,
- out r1 int
- )
- BEGIN
- DECLARE temp1 int;
- DECLARE temp2 int default 0;
- set temp1 = 1;
- set r1 = i1 + i2 + temp1 + temp2;
- set i3 = i3 + 100;
- end\\
- delimiter ;
- -- 执行存储过程
- set @t1 =4;
- set @t2 = 0;
- CALL p1 (1, 2 ,@t1, @t2);
- SELECT @t1,@t2;
有参
- delimiter //
- create procedure p1()
- begin
- select * from v1;
- end //
- delimiter ;
- delimiter //
- create procedure p2(
- in n1 int,
- inout n3 int,
- out n2 int,
- )
- begin
- declare temp1 int ;
- declare temp2 int default 0;
- select * from v1;
- set n2 = n1 + 100;
- set n3 = n3 + n1 + 100;
- end //
- delimiter ;
实例
- delimiter \\
- create PROCEDURE p1(
- OUT p_return_code tinyint
- )
- BEGIN
- DECLARE exit handler for sqlexception
- BEGIN
- -- ERROR
- set p_return_code = 1;
- rollback;
- END;
- DECLARE exit handler for sqlwarning
- BEGIN
- -- WARNING
- set p_return_code = 2;
- rollback;
- END;
- START TRANSACTION;
- DELETE from tb1;
- insert into tb2(name)values('seven');
- COMMIT;
- -- SUCCESS
- set p_return_code = 0;
- END\\
- delimiter ;
事务
- delimiter //
- create procedure p3()
- begin
- declare ssid int; -- 自定义变量1
- declare ssname varchar(50); -- 自定义变量2
- DECLARE done INT DEFAULT FALSE;
- DECLARE my_cursor CURSOR FOR select sid,sname from student;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
- open my_cursor;
- xxoo: LOOP
- fetch my_cursor into ssid,ssname;
- if done then
- leave xxoo;
- END IF;
- insert into teacher(tname) values(ssname);
- end loop xxoo;
- close my_cursor;
- end //
- delimter ;
游标
- delimiter \\
- CREATE PROCEDURE p4 (
- in nid int
- )
- BEGIN
- PREPARE prod FROM 'select * from student where sid > ?';
- EXECUTE prod USING @nid;
- DEALLOCATE prepare prod;
- END\\
- delimiter ;
动态执行sql
六、索引
- create table in1(
- nid int not null auto_increment primary key,
- name varchar(32) not null,
- email varchar(64) not null,
- extra text,
- index ix_name (name)
- )
创建表并建立索引
- create index index_name on table_name(column_name)
创建索引
- drop index_name on table_name;
删除索引
- show index from table_name;
查看索引
- 注意:对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length。
- create index ix_extra on in1(extra(32));
特殊
mysql基础知识和pymysql的更多相关文章
- mysql基础知识大全
前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里作简单概括性的介绍,具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续会慢慢补充完善. 数据库和数据库软件 数据库是 ...
- mysql基础知识语法汇总整理(二)
mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...
- mysql基础知识语法汇总整理(一)
mysql基础知识语法汇总整理(二) 连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...
- MySQL 基础知识梳理
MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...
- MySQL基础知识:启动管理和账号管理
整理.记录常用的MySQL基础知识:时间久了,很多就忘记了. 操作系统环境为MacOS Catalina, MySQL版本为: 8.0.13 MySQL Community Server - GPL. ...
- MySQL基础知识:创建MySQL数据库和表
虚构一个微型在线书店的数据库和数据,作为后续MySQL脚本的执行源,方便后续MySQL和SQL的练习. 在虚构这个库的过程中,主要涉及的是如何使用命令行管理 MySQL数据库对象:数据库.表.索引.外 ...
- MySQL基础知识:Character Set和Collation
A character set is a set of symbols and encodings. A collation is a set of rules for comparing chara ...
- mysql基础知识详解
分享一些mysql数据库的基础知识. 1.每个客户端连接都会从服务器进程中分到一个属于它的线程.而该连接的相应查询都都会通过该线程处理.2.服务器会缓存线程.因此并不会为每个新连接创建或者销毁线程.3 ...
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
1.基础知识 1.1.数据库概述 简单地说:数据库(Database或DB)是存储.管理数据的容器: 严格地说:数据库是"按照某种数据结构对数据进行组织.存储和管理的容器". 总结 ...
随机推荐
- css实现不定宽高的div水平、垂直居中
一共有三个方案: 1,第一种方案主要使用了css3中transform进行元素偏移,效果非常好 这方法功能很强大,也比较灵活,不仅仅局限在实现居中显示. 兼容方面也一样拿IE来做比较,第二种方法IE ...
- controller大全(推荐)
@Controller @RequestMapping("/router") @SessionAttributes(value = { "username" } ...
- leetcode 27. 移除元素(python)
1. 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外 ...
- Microsoft.Office.Interop.Excel Find 操作
public void SearchLoactions(string filepath, int start, int end ,string expectvalue) { if (end >= ...
- Gradle原理动画讲解(五)
Gradle原理动画讲解
- spring几种获取 HttpServletRequest 对象的方式
以下的 request 实例都编号了,一共 4 种 方式 1.@Autowired 方式2.public void Test(HttpServletRequest request1, HttpServ ...
- Web安全测试中常见逻辑漏洞解析(实战篇)
Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改 ...
- docker 一些命令
docker的基本命令 (1)创建一个虚拟机:docker-machine create --driver virtualbox default, (2)列出所有虚拟机:docker-machine ...
- 20191118 Spring Boot官方文档学习(4.9)
4.9.安全 如果Spring Security在类路径上,则默认情况下Web应用程序是采用的.Spring Boot依靠Spring Security的内容协商策略来确定使用httpBasic还是f ...
- 文档压缩 | gzip、bzip2、xz
6.文档的压缩与打包 Linux下常见后缀名所对应的的压缩工具 .gz 表示由gzip压缩工具压缩的文件 .bz2 表示由bzip2压缩工具压缩的文件 .tar 表示由tar打包程序打包的文件(tar ...