MySQL学习笔记

一、数据类型

像C++、java等编程语言一样,MySQL中也有自己独有的数据类型,代表不同的信息类型。常用的数据类型有整数数据类型、浮点数数据类型、精确小数类型、二进制数 据类型、日期/时间数据类型、字符串数据类型。表中的每一个字段就是某种指定数据类型。

1.基础数据类型

在这里插入图片描述

2.日期和时间类型

表示时间值的日期和时间类型有:
在这里插入图片描述

3.字符串类型

在这里插入图片描述

4.主键

主键(Primary Key)又称主码,用于唯一地标识表中的每一条记录。可以定义表中的一列或多列为主键,主键列上既不能有两行相同的值,也不能为空值,即如果是主键,则无需声明,一定满足not null 和 unique。

二、数据库系统

数据库系统的组成

数据库系统有3个主要的组成部分
● 数据库:用于存储数据的地方。
● 数据库管理系统:用于管理数据库的软件。
● 数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充。

三、SQL语言

SQL语言的组成

SQL语言包含以下4部分。
(1)数据定义语言(Data Definition Language DDL):DROP、CREATE、ALTER等语句。
(2)数据操作语言(Data Manipulation Language DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。
(3)数据查询语言(Data Query Language DQL):SELECT语句。
(4)数据控制语言(Data Control Language DCL):GRANT、REVOKE、COMMIT、 ROLLBACK等语句。

四、数据库操作

显示所有存在的库:

show databases

在这里插入图片描述在这里插入图片描述

创建库

我们在创建库时,使用create database 语句加上要创建的库的库名(bb1027)即可创建,创建成功后,如图会出现一个新的库(bb1027)。

create database name

cha在这里插入图片描述

查看数据库的定义

当我们想要查看一个库的定义信息时,使用

show create database name

在这里插入图片描述

删除数据库

当我我们要删除一个数据库时,只需用drop 语句,前提是要删除的库必须存在。

drop database name

在这里插入图片描述

五、InnoDB表

从MySQL 8.0开始,系统表全部换成事务型的InnoDB表,默认的 MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。

InnoDB和MyISAM的区别

  1. InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB
    的重要原因之一;
  2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;
  3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因
    此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,
    然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而
    MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引
    是独立的。
  4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一
    个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
  5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致
    其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL 将默认存储引擎从 MyISAM 变成
    InnoDB 的重要原因之一;

六、创建数据表

创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整 性和域完整性等)约束的过程。
数据表属于数据库,在创建数据表之前,应该使用语句“USE <数据库 名>”指定操作是在哪个数据库中进
行,如果没有选择数据库,就会抛出“No database selected”的错误。

创建数据表

创建数据表的语句为:

CREATE TABLE

语法规则如下:

CREATE TABLE TAB_NAME(
 字段1 类型 约束 默认值,
 字段2 类型 约束 默认值,
 字段n 类型 约束 默认值
)

比如在bb1023下创建一个person表:
在这里插入图片描述
结果如下:
在这里插入图片描述在这里插入图片描述创建完以后可以通过show tables语句查看库下的表:
在这里插入图片描述

七、表约束

数据完整性

数据的完整性是指数据的可靠性和准确性
1.实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过索引,唯一约束,主键约束或标识列属性).
2.域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则).
3.引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系.引用完整性确保键值在所有表中一致.这样的一致辞性要求不能引用不存在的值.如果一个键值更改了,那么在整个数据库中,对该键值的引用要进行一致的更改.
4.自定义完整性:用户自己定义的业务规则.
四种完整性约束:
实体完整性:唯一约束、主键约束、标识列
域完完整性:限制数据类型、外键约束、默认值、非空约束
引用完整性:外键
自定义完整性:过程,触发器等

约束

约束是在表上强制执行的一些数据校验规则,被插入、修改或删除的数据必须符合在相关字段上设置的这些约束条件。
五类完整性约束:
NOT NULL 非空
UNIQUE 唯一
PRIMARY KEY 主键
FOREIGN KEY 外键
CHECKED 检查(mysql不支持)

主键约束

主键,又称主码,是表中一列或多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一地标 识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以 加快数据库查询的速度。主键和记录之间的关系如同身份证和人之间的关 系,它们之间是一一对应的。主键分为两种类型:单字段主键和多字段联合主键。

单子键约束

单子键约束就是其表的主键由一个字段组成。
定义主键的语句为:
字段名 字段类型 primary key
比如下面这个cities表:
在这里插入图片描述cid为表的主键,auto_increment 语句含义为‘自增’。

自增:在数据库应用中,经常希望在每次插入新记录时,系统自动生成字段的 主键值。可以通过为表主键添加AUTO_INCREMENT关键字来实现。默认 的,在MySQL中AUTO_INCREMENT的初始值是1,每新增一条记录,字段 值自动加1。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字 段必须为主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数 类型(TINYINT、SMALLIN、INT、BIGINT等)。

除了在定义表时加上主键约束,还可以在定义完表后指定表的主键,语句如下:

alter table 表名 add constraint 主键名 primary key 字段名;
ALTER TABLE employee ADD CONSTRAINT pk_empid PRIMARY KEY(emp_id); 

主键选取原则

  1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。
  2. 主键应该是单列的,以便提高连接和筛选操作的效率。
  3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。
  4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。
  5. 主键应当由计算机自动生成

唯一约束

唯一性约束(Unique Constraint)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确
保一列或者几列不出现重复值。

字段名 数据类型 UNIQUE 

非空约束

非空约束(Not Null Constraint)指字段的值不能为空。对于使用了非空 约束的字段,如果用户在添加
数据时没有指定值,数据库系统会报错。

字段名 数据类型 not null

默认值约束

默认约束(Default Constraint)指定某列的默认值。如男性同学较多, 性别就可以默认为‘男’。如果插
入一条新的记录时没有为这个字段赋值,那么系统会自动为这个字段赋值为‘男’。

字段名 字段类型 default 默认值 

比如下图的person表:

在这里插入图片描述

定义约束

约束可以在定义表的时候直接定义,如果定义完表后也可以给某个字段添加指定约束:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 (约束字段);
ALTER TABLE employee ADD CONSTRAINT uk_phone UNIQUE (emp_phone);

删除唯一索引:

ALTER TABLE 表名 DROP INDEX 约束名; 
ALTER TABLE employee DROP INDEX uk_phone;

查看表结构

定义完表后,可以通过DESCRIBE/DESC语句可以查看表的字段信息,其中包括字段名、字段 数据类型、是否为主键、是否有默认值等。语法规则如下:

DESCRIBE 表名; 
//或者可以简写为DESC 表名;

在这里插入图片描述查看表详细结构语句:
SHOW CREATE TABLE语句可以用来显示创建表时的CREATE TABLE 语句,语法格式如下:

SHOW CREATE TABLE person;

在这里插入图片描述执行完语句后,将下方表格中的内容复制粘贴后可以便于看到创建表时候的语句。

修改表结构

修改表指的是修改数据库中已经存在的数据表的结构。MySQL使用 ALTER TABLE语句修改表。常用的修改表的操作有修改表名、修改字段数 据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。

  1. 修改表名
ALTER TABLE <旧表名> RENAME [TO] <新表名>ALTER TABLE employee RENAME TO emp;
  1. 修改字段的数据类型
ALTER TABLE <表名> MODIFY <字段名> <数据类型>ALTER TABLE emp MODIFY emp_name VARCHAR(30)
  1. 修改字段名
 ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
 ALTER TABLE emp CHANGE dept_id deptid INT; 
  1. 添加字段
ALTER TABLE <表名> ADD <新字段名> <新字段类型> <约束条件>[FIRST|AFTER 已存在字段名];
ALTER TABLE emp ADD empaddr VARCHAR(20);
ALTER TABLE emp ADD empaddr VARCHAR(20) AFTER empsex;
ALTER TABLE emp ADD empnum VARCHAR(20) FIRST;
  1. 删除字段
LTER TABLE <表名> DROP <字段名> ;
ALTER TABLE emp DROP empno;
  1. 修改字段的排序位置
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
ALTER TABLE emp MODIFY deptid INT AFTER empphone;
  1. 删除表的外键约束
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;
  1. 更改表的存储引擎
ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>; 
ALTER TABLE tb_deptment3 ENGINE=MyISAM; 
  1. 删除数据表
DROP TABLE1,2,…表n; 

八、数据的CURD操作

1.插入数据

INSERT INTO 表名 VALUES(值列表);INSERT INTO 表名(表列表) VALUES(值列表);

以列表方式插入时要注意顺序必须是一一对应,数据类型也要对应。
当插入多条语句时在values后面加上多行值列表即可:

INSERT INTO 表名(col_list) VALUES(val_list1),(val_list2),(val_list3),
(val_list4);

2.备份数据表

当有数据表需要从这个表备份到另一个表时,可以用将数据插入到新表的思路进行备份

INSERT INTO emp_bak SELECT * FROM emp; # 表存在
CREATE TABLE emp_bak AS SELECT * FROM emp; # 表不存在

3.更新数据

UPDATE 表名 SET 更新的数据 WHERE 选择条件; 

4.删除数据

DELETE FROM table_name WHERE 选择条件; 

如果删除语句没where,此时会将数据表中的记录全部删除,类似TRUNCATE TABLE.
TRUNCATE将直接删除原来的表,并重新创建一个表,其语法结构为 TRUNCATE TABLE table_name。
TRUNCATE直接删除表而不是删除记录,因此执行速度比DELETE快。而且不能用在有主外键关系的主表中。

5.查询数据

MySQL从数据表中查询数据的基本语句为SELECT语句。SELECT语句的基本格式是:

SELECT 要选择的字段列表  FROM1,2... WHERE 条件表达式  GROUP BY 字段  HAVING 条件
ORDER BY 字段 LIMIT  [<offset>,] <row count>]

在使用查询语句时,可以通过结合where条件语句,添加选择条件,where语句后还可以使用IN关键字用来查询满足指定范围内的条件的记录,BETWEEN AND用来查询某个范围内的值,带LIKE的字符匹配查询,带AND的多条件查询,带OR的多条件查询,还可以使用IS NULL 或IS NOT NULL 选择时空或非空的记录,

6.对查询结果的处理

在SELECT语句中,可以使用DISTINCT关键字指示MySQL消除重复的记录值。

SELECT DISTINCT empid,empname,empsex FROM emp; 

7.聚合函数

MySQL提供一些查询功能,可以对获取的数据进行分析和报告,常用的聚合函数 MAX()、MIN()、COUNT()、SUM()、AVG()。
在这里插入图片描述8.分组查询

GROUP BY <字段>,该子句告诉MySQL如何显示查询出来的数据,并按照指定的字段分组。
[ORDER BY <字段>],该子句告诉MySQL按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)、降序(DESC)。

SELECT * FROM emp ORDER BY empid DESC ,deptid DESC; 

9.使用HAVING过滤分组

GROUP BY可以和HAVING一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示,相当于SELECT语句中的WHERE子句。
对于统计的每个部门的男女人数只要大于等于3的信息

SELECT deptid,empsex,COUNT(1) FROM emp GROUP BY deptid,empsex HAVING
COUNT(1)>=3  ORDER BY COUNT(1) DESC,deptid DESC;

10.LIMIT

SELECT返回所有匹配的行,有可能是表中所有的行,若仅仅需要返回 第一行或者前几行,可使用LIMIT关键字。
[LIMIT [,] ],该子句告诉MySQL每次显示查询 出来的数据条数。

链接查询和子查询

链接查询

连接就是在对数据进行查询时,可以将多个表中的数据进行关联,这样就可以查询到来自不同表的数据。

内连接查询

内连接简单来说就是将两张表中可以匹配到的数据抽取出来,形成新的表记录,而不能匹配的就不保留。

SELECT * FROM dept d INNER JOIN emp e  ON d.`deptid`=e.`deptid`; 

外连接查询

外连接也是将两张表中可以匹配到的数据抽取出来,其中有一个表是主表,无论能否匹配,主表中的数据都会全部保留,另一个表不匹配的记录也保留,只是值为NULL。

左外连接

以左边的表为主表

SELECT * FROM dept LEFT JOIN emp  ON dept.`deptid`=emp.`deptid`   
右外连接

以右边表为主表

SELECT dept.*,emp.* FROM emp RIGHT JOIN dept  ON dept.`deptid`=emp.`deptid` 

子查询

1.子查询

子查询就是嵌套在另一个查询中的查询。也可以叫嵌套查询
一般在子查询中,程序先运行嵌套在最内层的语句,逐层向外。

-- 查询员工信息,并展示员工所在的部门名字
SELECT emp.*, (SELECT deptname FROM dept WHERE
dept.`deptid`=emp.`deptid`)deptname
 FROM emp WHERE emp.`deptid` IN (SELECT deptid FROM dept) 

2.any 和 some

ANY和SOME关键字是同义词,表示满足其中任一条件,它们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。

SELECT num1 FROM tb1 WHERE num1> ANY(SELECT num2 FROM tb2);
-- 或
SELECT num1 FROM tb1 WHERE num1> SOME(SELECT num2 FROM tb2);

3.ALL

不同于any 和 some ,all必须是所有条件都满足才返回TRUE

-- 找到工资比人事部工资高的信息
SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE emp.deptid=
(SELECT deptid FROM dept WHERE deptname='人事部')) ;

4.EXISTS
EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询。

NOT EXISTS 与 EXISTS相反

5.UNION
UNION:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

UNION All:对两个结果集进行并集操作,包括重复行,不进行排序;
如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

SELECT * FROM tb1
 UNION -- 或 UNION ALL
SELECT * FROM tb2

6.正则查询
正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串。
在这里插入图片描述

九、系统函数

数学函数

1.绝对值函数ABS(x)和返回圆周率的函数PI()
2.平方根函数SQRT(x)和求余函数MOD(x,y)
3.获取整数的函数CEIL(x)、CEILING(x)和FLOOR(x)
CEIL(x)和CEILING(x)的意义相同,返回不小于x的最小整数值(向上取值),返回 值转化为一个BIGINT。
FLOOR(x)返回不大于x的最大整数值(向下取整),返回值转化为一个BIGINT。
4.获取随机数的函数RAND()和RAND(x)
RAND(x)返回一个随机浮点值v,范围在0到1之间(0 ≤ v ≤ 1.0)。若已指定一个整数参数x,则它
被用作种子值,用来产生重复列。
5.函数ROUND(x)、ROUND(x,y)和TRUNCATE(x,y)
ROUND(x)返回最接近于参数x的整数,对x值进行四舍五入。
ROUND(x,y)返回最接近于参数x的数,其值保留到小数点后面y位,若y为负值,则将保留x值到小
数点左边y位。
TRUNCATE(x,y)返回被舍去至小数点后y位的数字x。若y的值为0,则结果不带有小数点或不带有小
数部分。若y设为负数,则截(归零)x小数点左起第y位开始后面所有低位的值。
6 符号函数SIGN(x)
SIGN(x)返回参数的符号,x的值为负、零或正时返回结果依次为-1、0或1。
7 幂运算函数POW(x,y)、POWER(x,y)和EXP(x)
POW(x,y)或者POWER(x,y)函数返回x的y次乘方的结果值。 EXP(x)返回e的x乘方后的值。

字符串函数

1 计算字符串字符数的函数和字符串长度的函数
CHAR_LENGTH(str)返回值为字符串str所包含的字符个数。一个多字节字符算作一个单字符。
2 合并字符串函数CONCAT(s1,s2,…)、 CONCAT_WS(x,s1,s2,…)
3 替换字符串的函数INSERT(s1,x,len,s2)
4 字母大小写转换函数 LOWER (str)或者LCASE (str)可以将字符串str中的字母字符全部转换成 小写
字母。 UPPER(str)或者UCASE(str可以将字符串str中的字母字符全部转换成大写字母。
5 获取指定长度的字符串的函数LEFT(s,n)和RIGHT(s,n)
6 填充字符串的函数LPAD(s1,len,s2)和RP
7 删除空格的函数LTRIM(s)、RTRIM(s)和TRIM(s)
8 重复生成字符串的函数REPEAT(s,n)
9 空格函数SPACE(n)和替换函数REPLACE(s,s1,s2)SPACE(n)返回一个由n个空格组成的字符串。
10 比较字符串大小的函数STRCMP(s1,s2)
11 获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)
12 匹配子串开始位置的函数
LOCATE(str1,str)、POSITION(str1 IN str)和INSTR(str, str1)3个函数的作
13. 字符串逆序的函数REVERSE(s)
REVERSE(s)将字符串s反转,返回的字符串的顺序和s字符串顺序相 反。
14. 返回指定字符串位置的函数FIELD(s,s1,s2,…,sn)
FIELD(s,s1,s2,…,sn)返回字符串s在列表s1,s2,…,sn中第一次出现的位置,在找不到s的情况下,返回
值为0。如果s为NULL,则返回值为0,原因 是NULL不能同任何值进行同等比较。
15. 返回子串位置的函数FIND_IN_SET(s1,s2)
FIND_IN_SET(s1,s2)返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个逗
号‘,’分开的字符串组成的列表。如果s1不在s2或s2为空字符串,则返回值为0。如果任意一个参数为
NULL,则返回值为NULL。 这个函数在第一个参数包含一个逗号‘,’时将无法正常运行。

日期和时间函数

1 系统当前时间

SELECT NOW();
SELECT SYSDATE();
SELECT CURDATE(); -- 年月日
SELECT CURRENT_DATE(); -- 年月日
SELECT CURRENT_TIME; -- 时分秒
SELECT CURTIME(); -- 时分秒

2 addXXX()加上

- adddate()加上天数
SELECT ADDDATE(NOW(),40);
SELECT ADDDATE('2020-10-19 12:32:45',INTERVAL 5 MINUTE); -- 5 分钟
SELECT ADDDATE('2020-10-19 12:32:45',5); -- 5 天
SELECT ADDDATE('2020-10-19 12:32:45',INTERVAL 5 YEAR); -- 5 年
SELECT ADDDATE('2020-10-19 12:32:45',INTERVAL 5 MONTH); -- 5 个月
-- 加上秒,最大到59
SELECT ADDTIME(NOW(),59),NOW();

3 DATEDIFF() 两个时间相差天数

SELECT DATEDIFF(NOW(),'2020-5-8'); 	

4 DATE_FORMAT 日期格式化

SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点%i分%s秒') 

5 DATE_SUB(date,INTERVAL expr type) 减去多少天

SELECT DATE_SUB(NOW(),INTERVAL 45 DAY);
SELECT DATE_SUB(NOW(),INTERVAL 3 YEAR);
SELECT DATE_SUB(NOW(),INTERVAL 3 MONTH);

6 EXTRACT
EXTRACT(type FROM date)函数所使用的时间间隔类型说明符与DATE_ADD()或DATE_SUB()的相同,但它从日期中提取一部分,而不是执行日期运算

SELECT EXTRACT(DAY FROM NOW()) ;
SELECT EXTRACT(YEAR FROM NOW()) ;
SELECT EXTRACT(MONTH FROM NOW()) ;

7 MONTH(),MONTHNAME() 获取月份函数

SELECT MONTH(NOW()); -- 获取月份数字
SELECT MONTHNAME(NOW()); -- 获取月份 英文

8 DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)

DAYNAME(d)函数返回d对应的工作日的英文名称,例如Sunday、 Monday等
DAYOFWEEK(d)函数返回d对应的一周中的索引(位置,1表示周日,2表示周一,…,7表示周六)。
WEEKDAY(d)返回d对应的工作日索引:0表示周一,1表示周二,…,6表示周日。

  1. WEEK(d)和WEEKOFYEAR(d)
    WEEK(d)计算日期d是一年中的第几周WEEK()的双参数形式允许指定该星期是否起始于周日或周一,以及返回值的范围是否为0~ 53或1~53。 若Mode参数被省略,则使用default_week_format系统自变量的值.
    WEEKOFYEAR(d)计算某天位于一年中的第几周,范围是1~53,相当于WEEK(d,3)。

条件判断函数

1 IF(expr,v1,v2)函数
如果表达式expr是TRUE(expr <> 0 and expr <> NULL),则返回值为v1;否则返回值为v2.IF()的返回值为数字值或字符串值,具体情况视其所在语境而定。

SELECT salary, IF(salary>20000,'高工资','低工资') FROM employees;

2 IFNULL(v1,v2)函数
假如v1不为NULL,则IFNULL()的返回值为v1;否则其返回值为v2。

SELECT manager_id,IFNULL(manager_id,'无上级领导') FROM employees; 

3 CASE函数
CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2]…[ELSE rn+1] END:如果expr值等于某个vn,则返回对应位置THEN后面的结果;如果与所有值都不相等,则返回ELSE后面的rn+1。

SELECT salary,
  CASE salary WHEN 24000 THEN '高工资'
        WHEN 17000 THEN '基本工资'
  END     
 FROM employees;
 SELECT job_id,
 CASE job_id WHEN 'AD_PRES' THEN 'CEO'
       WHEN 'AD_VP' THEN '经理'
       WHEN 'IT_PROG' THEN 'IT'
       ELSE '基本工种'
  END jobtype             
        
 FROM employees;

4 系统信息函数

SELECT VERSION(); -- 版本
SELECT CONNECTION_ID(); -- 查看当前用户的链接数
-- 查看链接的详细信息
SHOW PROCESSLIST; -- 前100条
SHOW FULL PROCESSLIST; -- 所有信息

5 获取用户名函数

ELECT USER(),CURRENT_USER(),SYSTEM_USER(),SESSION_USER(); 

6 获取最后一个自动生成的ID的值函数
LAST_INSERT_ID()函数返回最后生成的AUTO_INCREMENT值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秀发嚯嚯没

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值