mysql面试题acidmysql⾃定义函数的优缺点_MySQL重要但容易被忽略
_MySQL⾃定义函数存储过程
⾃定义SQL函数(UDF)
创建⾃定义函数
CREATE FUNCTION function_name
RETURNS
routime_body{#函数体
#可以带有(任意类型)多个参数、⼀个返回值
#参数数量理论上不能超过1024
#函数体由合法SQL语句构成
#也可以是简单的select/insert语句
#如果是符合结构请⽤END
#符合结构可以包含声明,循环,控制结构
}
实践
mysql -uroot -proot
Set names utf8
Create database test
Use test
Select now()
select DATE_FORMAT(NOW(),'%Y年%m⽉%d⽇%H时%i分%s秒');
#封装上⾯为⾃定义函数
set names utf8;
银行swift代码查询#创建 不带参数 函数
CREATE FUNCTION formatDay()
RETURNS VARCHAR(30) #返回参数类型
RETURN DATE_FORMAT(NOW(),'%Y年%m⽉%d⽇ %H时%i分%s秒'); #返回值
#创建 带参数 函数
CREATE FUNCTION f2 (num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN (num1+num2)/2;
#创建 复合结构 函数
numeric和number的区别DELIMITER // #更改结束符
CREATE FUNCTION adduser(uname VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT test(uname) VALUES(uname);
RETURN LAST_INSERT_ID();
END
//
#调⽤函数
select formatDay();
#删除函数
drop function formatDay;
存储过程
Sql命令执⾏过程
存储过程是什么?textdecoration属性 none
存储过程是SQL语句和控制语句的预编译集合,以⼀个名称存储并作为⼀个单元处理,允许输⼊类型参数,输出类型参数并可以存在多个参数值
优点:
增强sql语句功能和灵活性
实现较快的执⾏速度
较少⽹络流量
创建存储过程
CREATE
[DEFINER = user_name] #创建⽤户
PROCEDURE sp_name([param(IN | OUT | INOUT)])
routine_body{
l 多个参数,多个返回值
l 过程体只可操作CRUD
l 如果是符合结构请⽤END
l 符合结构可以包含声明,循环,控制结构
}
实践
#创建 不带参数 存储过程
CREATE PROCEDURE SP1() SELECT VERSION();
#创建 带IN参数 存储过程
DELIMITER //
CREATE PROCEDURE removeUserByid(IN test_id INT UNSIGNED)
BEGIN
DELETE FROM test WHERE id= test_id; #参数名不能与字段名重复(否则全删)
END
//truetable
#创建 带IN&OUT参数 存储过程
DELIMITER // #不可加分号,否则就得//;才算结束
CREATE PROCEDURE removeUserandReturnUserNum(IN uid INT UNSIGNED,OUT unum INT UNSIGNED)
BEGIN
DELETE FROM test where id=uid;
SELECT COUNT(id) FROM test INTO unum;
END
//
CALL removeUserandReturnUserNum(1,@nums);
SELECT @nums;
#创建 带多个OUT参数 存储过程
DELIMITER //
CREATE PROCEDURE removeUserByIdandReturnUserNumandDeleteNums(IN uid INT UNSIGNED,OUT unum INT UNSIGNED,OUT dnum INT UNSIGNED)
BEGIN
DELETE FROM test WHERE id=uid;
SELECT ROW_COUNT() INTO dnum;
SELECT COUNT(id) FROM test INTO unum;
END
//
CALL removeUserByIdandReturnUserNumandDeleteNums(2,@unum,@dnum);
SELECT @unum,@dnum;
#修改存储过程
#只能修改注释,参数类型。。。不能修改过程体
ALTER PROCEDURE sp_name[]
COMMENT ‘string’
#调⽤存储过程
CALL sp1();
CALL removeUserandReturnUserNum(1,@nums);
SELECT @nums;
#删除存储过程
DROP PROCEDURE [IF EXISTS] sp_name
存储引擎
-
Mysql以不同的技术存储在⽂件(内存)中,这种技术成为存储引擎
并发控制
-当多个链接对记录进⾏修改时保证数据的⼀致性和完整性
这⾥⽤到锁
-共享锁(读锁):在⼀段时间内,多个⽤户可以读取同⼀资源,读取过程中数据不会发⽣任何变化。-排它锁(写锁):在任何时间只能有⼀个⽤户写⼊资源,当进⾏写锁时阻塞其他读锁或者写锁操作加锁只加对的,不加⼤的
加锁策略——锁颗粒
-表锁,开销最⼩的锁策略——⽤户对表操作时,拥有写锁策略
-⾏锁,开销最⼤的锁策略——每条记录都上写锁
事务
- 事务⽤于保证数据库的完整性python的断言库
ACID原⼀隔
外键
-保持数据⼀致性的⼀种策略
索引
-对数据表中⼀列多列的值进⾏排序的⼀种结构
各种存储引擎特点
使⽤策略
MyISAM:适⽤于事务处理不多的情况。
InnoDB:使⽤事务处理多,且需要外键⽀持的情况
设置存储引擎
1.
Mysql.ini
-default-storage-engine=InnoDB
2.
CREATE TABLE `test` (
`id` int(30) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`age` int(5) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDBAUTO_INCREMENT=6 DEFAULT CHARSET=utf8; 3.
ALTER TABLE tp1 ENGINE = MyISAM;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论