MySQL特有的命令 - 2

MySQL事务并发访问

MySQL支持的事务隔离级别

1、read UNCOMMITTED -- 读未提交,最低的隔离级别,脏读、不可重复读、幻读都会出现
2、read COMMITTED -- 读已提交,二级隔离级别,解决脏读,但不可重复读、幻读仍会出现 --->Oracle默认隔离级别
3、REPEATABLE read -- 可重复读,三级隔离级别,解决脏读、不可重复读,但幻读仍会出现 --->MySQL默认隔离级别
4、serializable -- 可串行话,四级隔离级别,解决脏读、不可重复读、幻读

设置MySQL的事务隔离级别

set transaction ISOLATION LEVEL 隔离级别名称  -- 会话隔离级别的修改
set GLOBAL transaction ISOLATION LEVEL 隔离级别名称 -- 全局隔离级别的修改
  • 设置事务的提交方式:set auto_commit = 0 | 1;

  • 显式开启事务:BEGIN 或 START TRANSACTION;

  • 显式事务提交: COMMIT;

  • 显式事务回滚: ROLLBACK;

查看MySQL的安装路径

show VARIABLES like ‘base%’;

例如我自己的是C:\Program Files\MySQL\MySQL Server 5.7\

查看MySQL的数据目录

MySQL的全局配置文件及数据库中的表文件都在数据目录下

show VARIABLES like ‘data%’;

C:\ProgramData\MySQL\MySQL Server 5.7\Data\

MySQL的数据类型

主要包括五大类:整数类型、小数类型、日期和时间类型、字符串类型、二进制数据类型
使用:表的结构定义、存贮过程中的局部变量

一、整数类型

TINYINT | SMALLINT | MEDIUMINT | int(integer) | BIGINT (INTEGER、SMALLINT标准SQL语言)

类型字节数
TINYINT1Byte :128 ~ 127,无符号0~255
SMALLINT2Byte :32768 ~ 32767
MEDIUMINT3Byte:8开头的7位数
INT、INTEGER4Byte :2开头的10位数
BIGINT8Byte

查看int类型:HELP int; (只能在专属客户端使用)

二、小数类型

  • 浮点数类型: FLOAT | DOUBLE
  • 定点数类型: DECIMAL
类型字节数
FLOAT4Byte
DOUBLE8Byte
DECIMAL(M,D)、DEC(M,D)M+2 Byte (MySQL中M的长度不包括小数点的长度 )

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值(以字符串存贮)。

设一个字段定义为float(6,3),如果插入一个数 123.45678,实际数据库里存的是 123.457,但总个数还以实际为准,即6位。
整数部分最大是3位,如果插入数 12.123456,存储的是 12.1234,如果插入 12.12,存储的是 12.1200(整数位+小数位=6)。

三、日期和时间类型:

YEAR | DATE | TIME | DateTime | TimeStamp

YEAR年,1Byte, 1901~2155 年
DATE日期,4Byte
TIME时间,3Byte
DateTime日期时间,8Byte
TimeStamp日期时间,4Byte
	TimeStamp:默认值非空,时间数据会随其他字段修改的时候自动刷新,可以存放这条记录最后被修改的时间。

MySQL的日期时间函数

-- 获得当前日期+时间(date + time)函数:now()
	SELECT NOW(); -- 2020-03-24 12:06:49
	
	SELECT YEAR(NOW()); -- 2020
	SELECT MONTH(NOW()); -- 3
	SELECT DAY(NOW()); -- 24
  • MySQL 为日期增加一个时间间隔:date_add()

  • MySQL 为日期减去一个时间间隔:date_sub()

  • MySQL 日期、时间相减函数:datediff(date1,date2)、timediff(time1,time2)

四、字符串类型

CHAR(定长) | VARCHAR(变长) | TINYTEXT | TEXT(大文本型) | enum(枚举型) | set(集合型)

char 和 varchar 类型类似,但它们保存和检索的方式不同.它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
char 型数据存储时按指定宽度储存,如果实际数据不足,则存储时后面补足空格,但读取时自动将空格去掉,因此无法保留尾部空格。

char: 0~255, char(5)    ---占5个字符对应的字节数, 处理速度比 varchar 快。
varchar: 0~65535, varchar(5)   ---占实际字符数+1个字节 

以上定义的5不是表示字节数,而是字符数

在MySQL5.0以上版本:中文:utf-8—3字符 GBK—2字符

  • LENGTH(str):返回字符串str的长度,以字节为单位。
  • CHAR_LENGTH(str):返回字符串str的长度,以字符为单位。

*思考:存贮内容、存贮字符数、读取内容

  • TEXT型:没有默认值

      TINYTEXT: 0~255,占用空间 :字符长度+2个字节
      TEXT: 0~65535,占用空间 :字符长度+2个字节
      MEDIUMTEXT : 0~(2^24-1),占用空间 :字符长度+3个字节
      LONGTEXT : 0~(2^32-1),占用空间 :字符长度+4个字节
    
  • enum型:取值范围由定义时列举的值的范围决定,且只能取列举值中的一个,枚举值只能为char型。每一个枚举值都有一个顺序编号,数据库存入的是编号,而不是列举的值,第一个枚举值为1,以此类推。

	drop table if exists test;
	CREATE TABLE test(id int auto_increment PRIMARY KEY ,name VARCHAR(6), gender enum('男','女') DEFAULT '男');

	SELECT * FROM test;
	INSERT INTO test(name,gender) VALUES('aaa','男');
	INSERT INTO test(name,gender) VALUES('aaa','女');
	INSERT INTO test(name,gender) VALUES('aaa','中'); -- 出错
	SELECT * FROM test WHERE gender=1; -- 使用编号查询
  • set集合型:集合的元素只能是字符,元素末尾的空格会自动截掉,取一个或多个元素,以 , 间隔。
	drop table if exists test;
	CREATE TABLE test(id int auto_increment PRIMARY KEY ,cno VARCHAR(6),tNo set('t01','t02','t03'));
	INSERT INTO test VALUES(1,'c01',('t01'));
	INSERT INTO test VALUES(2,'c02','t01,t03'); -- 注意插入集合中多个元素的表示方法
	SELECT * FROM test;

五、二进制数据类型

BINARY | VARBINARY | bit | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB

  • *思考:存贮时、读取时、是否区分大小写

      BINARY(M): 字节数为 M ,0~M长度的定长二进制字符串,补全用'\0'---空字符
      VARBINARY(M): 0~M长度的变长二进制字符串,字节数为实际值的字节数+1
    
  • BINARY | VARBINARY 与 CHAR | VARCHAR 相似,都是字符型数据的存储方式,但储存的是字符串的二进制数据。

MySQL中有对应的字符型二进制的存储集合与排序规则,排序是基于字节的值进行的。

BINARYCHAR
二进制字符串字符
不足末尾加’\0’不足末尾加空格
读取时保留’\0’读取时截掉尾部空格
  • CHAR 与 VARCHAR

SELECT ‘a’=‘a’,‘a’='a ',‘a’=‘A’,‘a’='A ’ from dual;

结果全为1,CHAR与VARCHAR不区分大小写,读取时截掉尾部空格

	drop table if exists test;
	CREATE TABLE test(name CHAR(6),col2 VARCHAR(6) DEFAULT 'abc' not NULL);
	SELECT * FROM test;
	INSERT INTO test(name) VALUES('mary');
	SELECT name='mary',name='mary  ',name='MARY',name='MARY  ' from test;

-- binary
	drop table if exists test;
	CREATE TABLE test(id int, col BINARY(3));
	
	INSERT INTO test VALUES(1,'abc');
	INSERT INTO test VALUES(1,'中');  -- 汉字的二进制编码(看起来像是乱码,但是存储进去了)
	INSERT INTO test VALUES(1,'a'); -- 实际存储了'a\0\0'
	INSERT INTO test VALUES(1,'中国人'); -- 出错,超过3个字节,共9个字节,'\0'(值为0)不是空格字符' '
	SELECT col='a', col='a  ', col='a\0\0' FROM test; -- 0  0  0
	
	SELECT LENGTH(col) from test;  -- 3 ,length()测binary类型数据时测得的是字节数
	
	SELECT * from test;
	SELECT * from test WHERE col='a\0\0'; -- 可以找到
	SELECT * from test WHERE col='a'; -- 找不到
	SELECT * from test WHERE col='A\0\0'; -- 找不到,binary和varbinary区分大小写
	SELECT * from test WHERE col='中'; -- 可以找到
  • bit(M):M位二进制数,0~64 B
    bit(4)::0000 ~ 1111 即 0 ~ 15 ,存放的数据范围:0 ~ (2M) - 1的数

  • 以下blob存放的都是二进制数据(较大的二进制数据),如图片、声音、视频
    TINYBLOB: 变长二进制数据,0~255 B
    BLOB:变长二进制数据,0~65535 B 即 64 K
    MEDIUMBLOB: 变长二进制数据,0 ~ (224-1)B 即 16 M
    LONGBLOB: 变长二进制数据,0 ~ (232-1)B 即 4 G

	drop table if exists test;
	CREATE TABLE test(id int,pic MEDIUMBLOB);
	show variables like 'datadir%';
	INSERT into test VALUES(1,LOAD_FILE('D:/1.jpg'));
	SELECT * FROM test;
	SELECT pic FROM test;

MySQL关键字及含义

关键字含义
NULL数据列可包含NULL值
NOT NULL数据列不允许包含NULL值
DEFAULT默认值
PRIMARY KEY主键
AUTO_INCREMENT自动递增,适用于整数类型
UNSIGNED无符号
CHARACTER SET name指定一个字符集
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值