Mysql基础知识学习

1.mysql数据库是什么

2.mysql数据类型有哪些

数值类型

image

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

日期和时间类型

image

字符串类型

image


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为小数位数] 注:返回类型并非均为整数


你可能感兴趣的:(数据库MySQL)