jae mysql_Mysql基础知识学习

dc25a6aed567a1f78fbd189afc43525a.png

777c8e816b6557f9a4465094945e06cc.png

1.mysql数据库是什么

2.mysql数据类型有哪些

数值类型

float(3,2)表示只能是整数一位,小数点后二位(可选)

日期和时间类型

字符串类型

3.mysql支持SQL语句

以创建表为例,说明支持标准SQL

DROP TABLE IF EXISTS `test`;

CREATE TABLE `test` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`pic` varchar(50) NOT NULL,

`hashcode` varchar(16) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

— —————————-

— Records of test

— —————————-

INSERT INTO `test` VALUES (‘1’, ‘2012120910403250c3fa209bf48.jpg’, ‘bf8f83818080c0f1’);

INSERT INTO `test` VALUES (‘2’, ‘2012120620430750c092db26557.JPG’, ‘ff9880f0f680ceff’);

INSERT INTO `test` VALUES (‘3’, ‘2012120619582550c08861eb062.jpg’, ‘7f7f004f7f7f7c7f’);

INSERT INTO `test` VALUES (‘4’, ‘2012112911072650b6d16e7f21f.jpg’, ‘7f7f004f7f7f007f’);

mysql 中int类型字段unsigned和signed的探索

转自:http://www.0791quanquan.com/news_keji/topic_816453/

探索一:正负数问题

拿tinyint字段来举例,unsigned后,字段的取值范围是0-255,而signed的范围是-128 – 127。 那么如果我们在明确不需要负值存在的情况下,通常是不要设置signed来支持负数的。 因为只支持正数会让存储空间大一倍呢(当然我这种表达可能不准确)。 假设我们使用tinyint来存储一些状态值。 0表示删除,1表示待付款,2表示已付款,3…。 突然来个需求要加订单取消,一些有代码洁癖的人就想,那就将定义为:-1表示取消吧。 但是就因为有了-1,我们说起来应该可以从0存到255的,结果就变为了0-127。 所以一般情况下,我们不建议这样设置

字段设置为unsigned后有一个问题是:

当select a – b from t时,a为10,b为12,那么这时就会出现异常情况:ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in ‘(`test`.`t`.`a` – `test`.`t`.`b`)’

所以注意这种情况即可

探索二:性能问题

严格讲,在性能上是有细微的差别的。 unsigned的性能更好,当只存储正整数的情况下。 因为,当unsigned时,假设查询值在500以下的数据,那么MySQL会将范围定义为:0-500,而如果是signed,则查询范围为:-2147483648 – 500。

4.mysql内置函数

5.mysql的函数(包含过程、函数)怎么定义

5.1过程

存储过程的优点:

(1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3).较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4).减少网络流量:针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织进存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。

(5).作为一种安全机制来充分利用:通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

参数

存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用”,”分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:

IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值OUT:该值可在存储过程内部被改变,并可返回INOUT:调用时指定,并且可被改变和返回

DELIMITER //

CREATE DEFINER = `jae`@`localhost` PROCEDURE `NewProc111`(in status INT,out countS BIGINT)

BEGIN

DECLARE y BIGINT DEFAULT 128;备注变量声明类型和默认值

WHILE y<20000

DO

INSERT INTO `fdi_task_execution_log_t` VALUES (y, CONCAT(‘HEMING_TEST_’,y), ‘20180426215509’, 2,

11333-y, ‘2018-4-26 21:55:29’, ‘SZX’, ‘插入数据成功’, 0, 2);

select count(id) into countS from `fdi_task_execution_log_t`;

SET y=y+1;

END WHILE ;

commit;

END;

//

DELIMITER ;

调用过程

set @status=3,@countS=0;备注变量赋值

call NewProc111(@status,@countS);

select @status,@countS

5.2 函数

CREATE FUNCTION hashDiff( s1 varchar(16), s2 varchar(16))

RETURNS INT

BEGIN

DECLARE diff, x INT;

SET diff =0;

SET x = 0;

WHILE (x  < 16 )  DO

SET x = x+1;

if SUBSTRING(s1, x,1)<>SUBSTRING(s2, x,1) then

set diff=diff+ 1;

end if;

END WHILE;

RETURN diff;

END

使用函数:select * from test t where  hashDiff(t.hashcode,’ff9880f0f680ceff’)  < 5;

6.mysql的视图

CREATE

ALGORITHM=UNDEFINED

DEFINER=`jae`@`localhost`

SQL SECURITY DEFINER

VIEW `NewView`AS

select `fdi_task_execution_log_t`.`id` AS `id`,`fdi_task_execution_log_t`.`task_name` AS `task_name` from `fdi_task_execution_log_t` ;

7.mysql的事件

8.MySQL存储过程的基本函数

8.1字符串类

CONCAT (string2 [,… ]) //连接字串

LENGTH (string ) //string长度

LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length

LTRIM (string2 ) //去除前端空格

REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str

RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length

RTRIM (string2 ) //去除后端空格

SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,

注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1

SELECT SUBSTRING(‘abcd’,0,2);返回空

SELECT SUBSTRING(‘abcd’,1,2);返回ab

8.2日期时间类

CURRENT_DATE ( ) //当前日期

CURRENT_TIME ( ) //当前时间

CURRENT_TIMESTAMP ( ) //当前时间戳

DATE (datetime ) //返回datetime的日期部分

NOW ( ) //当前时间

8.3.数学类

ABS (number2 ) //绝对值

CEILING (number2 ) //向上取整

FLOOR (number2 ) //向下取整

ROUND (number [,decimals ]) //四舍五入,decimals为小数位数] 注:返回类型并非均为整数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值