MySql学习笔记
数据表的基本操作
创建数据表
查看数据表结构
DESCRIBE 表名
DESC 表名
修改数据表
- 修改表名
alter table stu rename [to] student; - 修改字段的数据类型
alter table <表名> modify <字段名> <数据类型> alter table stu modify id varchar(20) - 修改字段名
alter table <表名> change <旧字段名> <新字段名> <新数据类型>;
alter table stu change name stuName varchar(20);
- 添加字段
alter table <表名> add <新字段> <数据类型> [约束条件] [FIREST|AFTER 已存在的字段名]
alter table stu add class varchar(20) not null after name;
- 删除字段
alter table <表名> drop <字段名>;
alter table stu drop className;
- 修改字段的排列位置
alter table <表名> modify <字段1> <数据类型> first|after <字段2>;
alter table stu modify id int first;
7.更改表的存储引擎
alter table <表名> enfgine = <更改后的引擎>
8.删除外键约束
alter table <表名> drop foreign key <外键约束名>
删除数据表
- 删除没有被关联的表
drop table if exits stu;
2.删除被其他表关联的主表 存在外键约束的时候,主表不能直接删除
alter table stu drop foreign key fk_stu_dept;
drop table stu;
MYSQL 8的新特性
默认字符集改为utf8mb4 自增变量的持久化 自增变量在5.6之前并未持久化,重启MySQL服务后将最大自增变量加1 自增变量在5.7中是由2innodb数据字典内部的一个计数器来决定的,也不会持久化到磁盘中 在5.8中将自增变量持久化
数据类型和运算符
MySQL数据类型介绍
1.数值类型 INT(4),表示数值类型只显示4位数字的宽度,显示宽度和类型的取值范围是无关的, 2.日期时间类型 3.字符串类型 varchar(m)是长度可变的字符串,m表示最大列长度,m的范围时0-65535,而其实际占用的空间为字符串的实际长度加1, char(m)为固定长度字符串,在定义时指定字符串列长,当保存时在右侧填充个空格 text 保存非二进制字符串 enum 是一个字符串对象,其值为表创建时在列规定中美剧的一列值,语法格式: 字段名 ENUM('值1','2,'3'); 其中,“字段名”指将要定义的字段,“值n”指枚举列表中的第n个值。ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。创建的成员中有空格时,其尾部的空格将自动被删除。ENUM值在内部用整数表示,并且每个枚举值均有一个索引值:列表值所允许的成员值从1开始编号,MySQL存储的就是这个索引编号。枚举最多可以有65535个元素。插入数据的时候可以根据下标(从1开始)或声明好的字符串插入,否则报错。
逻辑运算符
- NOT !
- AND &&
- OR ||
- XOR 逻辑异或
- 位运算符
-
| -
& -
^ -
<< -
>> -
~
专家解惑
- 使用特殊字符串:
-
使用单引号等特殊字符串的时候,需要使用转义符'\'进行转义
- mysql可以存储文件吗?
-
BLOB和TEXT字段类型可以存储数据量较大的文件,如图像声音等,但是这些字段的处理会降低数据库的性能,如非必要,可以存储文件的路径
- 如何区分大小写的字符串比较
- 在Windows平台下,MySQL是不区分大小写的,因此字符串比较函数也不区分大小写。如果想执行区分大小写的比较,可以在字符串前面添加BINARY关键字。
MYSQL函数
数学函数
- ABS()函数:返回一个数的绝对值
- PI():返回圆周率
- SQRT()返回平方根函数
- MOD(x,y) 求余函数
- CEIL(X) CEILING(X) FLOOR(X)获取整数的函数
- RAND() 返回一个随机浮点值,范围在1到0之间, RAND(X) 指定一个证书参数种子值,用来产生重复序列。
- ROUND(X) 返回接近于参数的证数,对x进行四舍五入,ROUND(X,Y):返回最接近于参数的值,其值保留到小数后y位,TRUNCATE(X,Y)返回被社区到小数点后y位的数字x,若y的值为0,则结果不带有小数点或不带小数部分,如y为负数,则截取x小数点左起y位后所有低位的值,truncate(111.222,-2) 返回100
- SIGN(X)返回参数的符浩,x的值为负返回-1,
- POW(x,y),power(x,y)返回x的y次方的结果,EXP(x)返回e的x次方
- log(x),log10(x),.....
字符串函数
-
计算字符串字符数的函数和字符串长度的函数
- char_length(str),返回字符串的字符个数,一个字节字符算作以一个单字符
- length(str)返回字节长度,使用utf8编码字符集时,一个汉字3个字节,一个字母或数字一个字节
-
合并字符串函数concat(s1,s2....),concat_ws(x,s1,s2,...)
- concat()返回结果为链接参数产生的字符串,或许有一个或多个参数,如果有一个参数为NULL,则返回的值为null,如果所有参数均为非二进制字符串,则结果为非二进制字符串,如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。
- concat_ws表示concat with Separator 是concat的特殊形式,第一个参数是其他参数的分隔符,分隔符的位置放在要连接的两个字符串之间,分隔符可以是一个字符串,也可以是其他参数,如果分隔符为null,则结果为null,函数会忽略任何分隔符参数后的null值。
-
替换字符串的函数insert(s1,x,len,s2)
- insert返回字符串s1,其字符串起始于x位置和被s2取代的len字符,如果x超过字符串长度,则返回值为原始字符串。假如len的长度大于其他字符串的长度,则从位置x开始替换。若任何一个参数为NULL,则返回值为NULL。
-
字母大小写转换函数
- lower(str)或者lcase(str)
- upper(str)或者ucase(str)
-
获取指定长度的字符串的函数left(s,n)和right(s,n)
- 返回字符串s开始的n个字符
-
填充字符串的函数lpad(s1,len,s2),rpad(s1,len,s2)
- 返回字符串s1,左边由字符串s2填补s2到len字符长度,假如s1的长度大于len,则返回值被缩减至len字符。
-
删除空格函数LTRIM(S),RTRIM(S),TRIM(S)
-
删除指定字符串函数TRIM(s1 from s2)
-
重复申城字符串的函数REPEAT(s,n)
-
空格函数space(n) 替换函数 replace(s,s1,s2)
- SPACE(6)返回的字符串由6个空格组成。
- REPLACE(s,s1,s2)使用字符串s2替代字符串s中所有的字符串s1
-
比较字符串大小的函数strcmp(s1,s2)
-
获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)
- SUBSTRING(s,n,len)带有len参数的格式,从字符串s返回一个长度与len字符相同的子字符串,起始于位置n。也可能对n使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的n字符,即倒数第n个字符,而不是字符串的开头位置。
- SUBSTRING('breakfast',5)返回从第5个位置开始到字符串结尾的子字符串,结果为“kfast”;SUBSTRING('breakfast',5,3)返回从第5个位置开始长度为3的子字符串,结果为“kfa”;SUBSTRING('lunch', -3)返回从结尾开始第3个位置到字符串结尾的子字符串,结果为“nch”;SUBSTRING('lunch', -5,3)返回从结尾开始第5个位置,即字符串开头起,长度为3的子字符串,结果为“lun”。
- MID(s,n,len)与SUBSTRING(s,n,len)的作用相同。
-
匹配字串开始位置的函数
- LOCATE(str1,str)、POSITION(str1 IN str)和INSTR(str, str1)3个函数的作用相同,返回子字符串str1在字符串str中的开始位置。
-
字符串逆序的函数reverse(s)将字符串s反转
-
返回指定位置的字符串的函数
- ELT(N,字符串1,字符串2,字符串3,...,字符串N):若N = 1,则返回值为字符串1;若N=2,则返回值为字符串2;以此类推;若N小于1或大于参数的数目,则返回值为NULL。
-
返回指定字符串位置的函数FIELD(s,s1,s2,...sn)
- FIELD(s,s1,s2,…,sn)返回字符串s在列表s1,s2,…,sn中第一次出现的位置,在找不到s的情况下,返回值为0。如果s为NULL,则返回值为0,原因是NULL不能同任何值进行同等比较。
-
返回子串位置的函数find_in_set(s1,s2)
- FIND_IN_SET(s1,s2)返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个逗号‘,’分开的字符串组成的列表。如果s1不在s2或s2为空字符串,则返回值为0。如果任意一个参数为NULL,则返回值为NULL。这个函数在第一个参数包含一个逗号‘,’时将无法正常运行。
-
选取字符串的函数MAKE_SET(X,s1,s2,....sn)
- MAKE_SET(x,s1,s2,…,sn)函数按x的二进制数从s1,s2,…,sn中选取字符串。例如5的二进制是0101,这个二进制从右往左的第1位和第3位是1,所以选取s1和s3。s1,s2,...,sn中的NULL值不会被添加到结果中。