Mysql学习笔记(一)

162 阅读8分钟

MySql学习笔记

数据表的基本操作

创建数据表

查看数据表结构

DESCRIBE 表名
DESC 表名

修改数据表

  1. 修改表名
    alter table stu rename [to] student;
    
  2. 修改字段的数据类型
    alter table <表名> modify <字段名> <数据类型>
    alter table stu modify id varchar(20)
    
  3. 修改字段名
alter table <表名> change <旧字段名> <新字段名> <新数据类型>;
alter table stu change name stuName varchar(20);
  1. 添加字段
alter table <表名> add <新字段> <数据类型> [约束条件] [FIREST|AFTER 已存在的字段名]

alter table stu add class varchar(20) not null after name;
  1. 删除字段
alter table <表名> drop <字段名>;
alter table stu drop className;
  1. 修改字段的排列位置
alter table <表名> modify <字段1> <数据类型> first|after <字段2>;
alter table stu modify id int first;

7.更改表的存储引擎

alter table <表名> enfgine = <更改后的引擎>

8.删除外键约束

alter table <表名> drop foreign key <外键约束名>

删除数据表

  1. 删除没有被关联的表
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开始)或声明好的字符串插入,否则报错。

逻辑运算符

  1. NOT !
  2. AND &&
  3. OR ||
  4. XOR 逻辑异或
  5. 位运算符
  • | 
    
  • &
    
  • ^
    
  • <<
    
  • >>
    
  • ~
    

专家解惑

  1. 使用特殊字符串:
  • 使用单引号等特殊字符串的时候,需要使用转义符'\'进行转义
    
  1. mysql可以存储文件吗?
  • BLOB和TEXT字段类型可以存储数据量较大的文件,如图像声音等,但是这些字段的处理会降低数据库的性能,如非必要,可以存储文件的路径
    
  1. 如何区分大小写的字符串比较
  • 在Windows平台下,MySQL是不区分大小写的,因此字符串比较函数也不区分大小写。如果想执行区分大小写的比较,可以在字符串前面添加BINARY关键字。

MYSQL函数

数学函数

  1. ABS()函数:返回一个数的绝对值
  2. PI():返回圆周率
  3. SQRT()返回平方根函数
  4. MOD(x,y) 求余函数
  5. CEIL(X) CEILING(X) FLOOR(X)获取整数的函数
  6. RAND() 返回一个随机浮点值,范围在1到0之间, RAND(X) 指定一个证书参数种子值,用来产生重复序列。
  7. ROUND(X) 返回接近于参数的证数,对x进行四舍五入,ROUND(X,Y):返回最接近于参数的值,其值保留到小数后y位,TRUNCATE(X,Y)返回被社区到小数点后y位的数字x,若y的值为0,则结果不带有小数点或不带小数部分,如y为负数,则截取x小数点左起y位后所有低位的值,truncate(111.222,-2) 返回100
  8. SIGN(X)返回参数的符浩,x的值为负返回-1,
  9. POW(x,y),power(x,y)返回x的y次方的结果,EXP(x)返回e的x次方
  10. log(x),log10(x),.....

字符串函数

  1. 计算字符串字符数的函数和字符串长度的函数

    • char_length(str),返回字符串的字符个数,一个字节字符算作以一个单字符
    • length(str)返回字节长度,使用utf8编码字符集时,一个汉字3个字节,一个字母或数字一个字节

image-20230313201603386.png

  1. 合并字符串函数concat(s1,s2....),concat_ws(x,s1,s2,...)

    • concat()返回结果为链接参数产生的字符串,或许有一个或多个参数,如果有一个参数为NULL,则返回的值为null,如果所有参数均为非二进制字符串,则结果为非二进制字符串,如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。
    • concat_ws表示concat with Separator 是concat的特殊形式,第一个参数是其他参数的分隔符,分隔符的位置放在要连接的两个字符串之间,分隔符可以是一个字符串,也可以是其他参数,如果分隔符为null,则结果为null,函数会忽略任何分隔符参数后的null值。
  2. 替换字符串的函数insert(s1,x,len,s2)

    • insert返回字符串s1,其字符串起始于x位置和被s2取代的len字符,如果x超过字符串长度,则返回值为原始字符串。假如len的长度大于其他字符串的长度,则从位置x开始替换。若任何一个参数为NULL,则返回值为NULL。
  3. 字母大小写转换函数

    • lower(str)或者lcase(str)
    • upper(str)或者ucase(str)
  4. 获取指定长度的字符串的函数left(s,n)和right(s,n)

    • 返回字符串s开始的n个字符
  5. 填充字符串的函数lpad(s1,len,s2),rpad(s1,len,s2)

    • 返回字符串s1,左边由字符串s2填补s2到len字符长度,假如s1的长度大于len,则返回值被缩减至len字符。
  6. 删除空格函数LTRIM(S),RTRIM(S),TRIM(S)

  7. 删除指定字符串函数TRIM(s1 from s2)

  8. 重复申城字符串的函数REPEAT(s,n)

  9. 空格函数space(n) 替换函数 replace(s,s1,s2)

    • SPACE(6)返回的字符串由6个空格组成。
    • REPLACE(s,s1,s2)使用字符串s2替代字符串s中所有的字符串s1
  10. 比较字符串大小的函数strcmp(s1,s2)

  11. 获取子串的函数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)的作用相同。
  12. 匹配字串开始位置的函数

    • LOCATE(str1,str)、POSITION(str1 IN str)和INSTR(str, str1)3个函数的作用相同,返回子字符串str1在字符串str中的开始位置。
  13. 字符串逆序的函数reverse(s)将字符串s反转

  14. 返回指定位置的字符串的函数

    • ELT(N,字符串1,字符串2,字符串3,...,字符串N):若N = 1,则返回值为字符串1;若N=2,则返回值为字符串2;以此类推;若N小于1或大于参数的数目,则返回值为NULL。
  15. 返回指定字符串位置的函数FIELD(s,s1,s2,...sn)

    • FIELD(s,s1,s2,…,sn)返回字符串s在列表s1,s2,…,sn中第一次出现的位置,在找不到s的情况下,返回值为0。如果s为NULL,则返回值为0,原因是NULL不能同任何值进行同等比较。
  16. 返回子串位置的函数find_in_set(s1,s2)

    • FIND_IN_SET(s1,s2)返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个逗号‘,’分开的字符串组成的列表。如果s1不在s2或s2为空字符串,则返回值为0。如果任意一个参数为NULL,则返回值为NULL。这个函数在第一个参数包含一个逗号‘,’时将无法正常运行。
  17. 选取字符串的函数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值不会被添加到结果中。