mysql常用函数、事务、索引

时间:2021-08-30 12:39:32   收藏:0   阅读:14

mysql

1.常用函数

1.1数据函数

SELECT ABS(-8);  /*绝对值*/ SELECT CEILING(9.4); /*向上取整*/ SELECT FLOOR(9.4);   /*向下取整*/ SELECT RAND();  /*随机数,返回一个0-1之间的随机数*/ SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/

1.2字符串函数

 SELECT CHAR_LENGTH(‘狂神说坚持就能成功‘); /*返回字符串包含的字符数*/ SELECT CONCAT(‘我‘,‘爱‘,‘程序‘);  /*合并字符串,参数可以有多个*/ SELECT INSERT(‘我爱编程helloworld‘,1,2,‘超级热爱‘);  /*替换字符串,从某个位置开始替换某个长度*/ SELECT LOWER(‘KuangShen‘); /*小写*/ SELECT UPPER(‘KuangShen‘); /*大写*/ SELECT LEFT(‘hello,world‘,5);   /*从左边截取*/ SELECT RIGHT(‘hello,world‘,5);  /*从右边截取*/ SELECT REPLACE(‘狂神说坚持就能成功‘,‘坚持‘,‘努力‘);  /*替换字符串*/ SELECT SUBSTR(‘狂神说坚持就能成功‘,4,6); /*截取字符串,开始和长度*/ SELECT REVERSE(‘狂神说坚持就能成功‘); /*反转  -- 查询姓周的同学,改成邹 SELECT REPLACE(studentname,‘周‘,‘邹‘) AS 新名字 FROM student WHERE studentname LIKE ‘周%‘;

1.3日期和时间函数

 SELECT CURRENT_DATE();   /*获取当前日期*/ SELECT CURDATE();   /*获取当前日期*/ SELECT NOW();   /*获取当前日期和时间*/ SELECT LOCALTIME();   /*获取当前日期和时间*/ SELECT SYSDATE();   /*获取当前日期和时间*/  -- 获取年月日,时分秒 SELECT YEAR(NOW()); SELECT MONTH(NOW()); SELECT DAY(NOW()); SELECT HOUR(NOW()); SELECT MINUTE(NOW()); SELECT SECOND(NOW());

1.4系统信息函数

 SELECT VERSION();  /*版本*/ SELECT USER();     /*用户*/  

2.事务

2.1什么是事务

事务的ACID原则 百度 ACID

原子性(Atomic)

一致性(Consist)

隔离性(Isolated)

持久性(Durable)

2.2基本语法

-- 使用set语句来改变自动提交模式SET autocommit = 0;   /*关闭*/SET autocommit = 1;   /*开启*/
-- 注意:--- 
1.MySQL中默认是自动提交--- 
2.使用事务时应先关闭自动提交
-- 开始一个事务,标记事务的起始点START TRANSACTION  
-- 提交一个事务给数据库COMMIT
-- 将事务回滚,数据回到本次事务的初始状态ROLLBACK
-- 还原MySQL数据库的自动提交SET autocommit =1;
-- 保存点SAVEPOINT 保存点名称 
-- 设置一个事务保存点ROLLBACK TO SAVEPOINT 保存点名称 
-- 回滚到保存点RELEASE SAVEPOINT 保存点名称 
-- 删除保存点

2.3实例

/*
课堂测试题目
A在线买一款价格为500元商品,网上银行转账.
A的银行卡余额为2000,然后给商家B支付500.
商家B一开始的银行卡余额为10000
创建数据库shop和创建表account并插入2条数据
*/

CREATE DATABASE `shop`CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `shop`;

CREATE TABLE `account` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
`cash` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO account (`name`,`cash`)
VALUES(‘A‘,2000.00),(‘B‘,10000.00)

-- 转账实现
SET autocommit = 0; -- 关闭自动提交
START TRANSACTION;  -- 开始一个事务,标记事务的起始点
UPDATE account SET cash=cash-500 WHERE `name`=‘A‘;
UPDATE account SET cash=cash+500 WHERE `name`=‘B‘;
COMMIT; -- 提交事务
# rollback; --回滚(没有提交事务之前可以回滚)
SET autocommit = 1; -- 恢复自动提交

3.索引

3.1分类

主键索引 (Primary Key)

InnoDB存储引擎的表会存在主键(唯一非null),如果建表的时候没有指定主键,则会使用第一非空的唯一索引作为聚集索引,否则InnoDB会自动帮你创建一个不可见的、长度为6字节的row_id用来作为聚集索引。

唯一索引 (Unique)

索引列的值必须唯一,但允许有空值。若是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值

常规索引 (Index或key)

是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值

全文索引 (FullText)

全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在CHAR、VARCHAR或者TEXT类型的列上创建

3.2创建索引

-在创建表时就创建(需要注意的几点)
    create table sindex(
    id int ,
    name char(20),
    age int,
    email varchar(30)
    -- primary key(id)也可以在这加
    index(id) -- 可以这样加
    );
    -在创建表后在创建
    create index name on sindex(name); -- 添加普通索引
    create unique index age on sindex(age);-- 添加唯一索引
    alter table sindex add primary key(id); -- 添加住建索引,也就是给id字段增加一个主键约束
    create index name on sindex(id,name); -- 添加普通联合索引

3.3删除索引

drop index id on sindex;
drop index name on sindex; -- 删除普通索引
drop index age on sindex; -- 删除唯一索引,就和普通索引一样,不用在index前加unique来删
alter table sindex drop primary key; -- 删除主键

3.4测试索引

-- 创建表
CREATE TABLE `good_user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT ‘‘ COMMENT ‘用户昵称‘,
`email` varchar(50) NOT NULL COMMENT ‘用户邮箱‘,
`phone` varchar(20) DEFAULT ‘‘ COMMENT ‘手机号‘,
`gender` tinyint(4) unsigned DEFAULT ‘0‘ COMMENT ‘性别(0:男;1:女)‘,
`password` varchar(100) NOT NULL COMMENT ‘密码‘,
`age` tinyint(4) DEFAULT ‘0‘ COMMENT ‘年龄‘,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘good_user表‘

-- 实现插入数据
DROP FUNCTION IF EXISTS mock_data;
DELIMITER $$
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 0;
WHILE i < num DO
  INSERT INTO good_user(`name`, `email`, `phone`, `gender`, `password`, `age`)
   VALUES(CONCAT(‘用户‘, i), ‘24736743@qq.com‘, CONCAT(‘18‘, FLOOR(RAND()*(999999999-100000000)+100000000)),FLOOR(RAND()*2),UUID(), FLOOR(RAND()*100));
  SET i = i + 1;
END WHILE;
RETURN i;
END;
SELECT mock_data();
-- 没有索引
SELECT * FROM good_user WHERE name=‘用户9999‘;

技术分享图片

-- 创建索引(创建时间不计算到总时间)
create index name on good_user(name);
SELECT * FROM good_user WHERE name=‘用户9999‘;

技术分享图片

索引准则

3.5索引的作用

原文:https://www.cnblogs.com/xiaozhizxj/p/15195368.html

评论(0)
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!