首页 > 数据库 >二、SQL基础学习(函数、约束、事务)

二、SQL基础学习(函数、约束、事务)

时间:2024-03-24 22:59:06浏览次数:27  
标签:事务 函数 外键 dept add emp SQL id select

目录

1、函数

1.1、字符串函数

在这里插入图片描述

# concat
select concat('Hello', ' MySql');

# lower
select lower('Hello');
# upper
select upper('Hello');

# lpad
select lpad('01', 5, '-');
# rpad
select rpad('01', 5, '-');

# trim
select trim(' Hello MySql ');

# substring
select substring('Hello MySql', 1, 5);

eg:用于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0,比如:1号员工的工号应该为00001.

update emp set workno = lpad(workno, 5, '0');

在这里插入图片描述

1.2、数值函数

在这里插入图片描述

# ceil
select ceil(1.1);

# floor
select floor(1.9);

# mod
select mod(2,4);
select mod(6,4);

# rand
select rand();

# round
select round(2.345, 2);
select round(2.344, 2);

eg:# 通过数据库的数据,生成一个六位数的随机验证码

select lpad(round(rand() * 1000000,0), 6, '0');

1.3、日期函数

在这里插入图片描述

# curdate
select curdate();

# curtime
select curtime();

# now
select now();

# year(date)
select year(curtime());

# month(date)
select month(curtime());

# day(date)
select day(curtime());

# data_add(date, interval expr type)
select date_add(curtime(), interval 70 year);
select date_add(curtime(), interval 70 month);
select date_add(curtime(), interval 70 day);

# datediff(date1, date2)
select datediff('2020-12-01','2020-11-01');

eg:查询所有员工的入职天数,并根据入职天数倒叙排序

select name ,datediff(curdate(), entrydate) as entryday from emp order by entryday desc;

1.4 、流程函数

在这里插入图片描述

# if
select if(true, 'ok', 'error');
select if(false, 'ok', 'error');

# ifnull
select ifnull('ok', 'default');
select ifnull('', 'default');
select ifnull(null, 'default');

# case when then else end
# 查询emp表的员工姓名和工作地址(北京/上海--->一线城市,其他 ----> 二线城市)
select
    name,
    (case workadderss when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;

在这里插入图片描述

select
    name,
    (case when math >= 85 then '优秀' when math >= 60 then '及格' else '不及格' end) as '数学',
    (case when english >= 85 then '优秀' when english >= 60 then '及格' else '不及格' end) as'英语',
    (case when chinese >= 85 then '优秀' when chinese >= 60 then '及格' else '不及格' end) as '语文'
from score;

2、约束

  1. 概念:约束是作用于表字段上的规则,用于限制存储在表中的数据。

  2. 目的:保证数据库中数据的正确、有效性和完整性。

  3. 分类:
    在这里插入图片描述
    注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

举例:
在这里插入图片描述

create table user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null unique comment '姓名',
    age int check ( age > 0 and age <= 120 ) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
)comment '用户表';

insert into user(name, age, status, gender) values ('Tom', 19, '1', '男'), ('Jack', 25, '0', '男');
insert into user(name, age, status, gender) values ('Anson',19, '1', '男');
select * from user;

-- insert into user(name, age, status, gender) values (null, 19, '1', '男');  # name不为空
-- insert into user(name, age, status, gender) values ('Anson',19, '1', '男'); # 已经存在

insert into user(name, age, status, gender) values ('Tom4', 80, '1', '男');
-- insert into user(name, age, status, gender) values ('Tom5', -1, '1', '男');  # check检查
insert into user(name, age, status, gender) values ('Tom4', 121, '1', '男');     #check检查

insert into user(name, age, gender) values ('Tom5', 80, '男');       # default语句

2.1、外键约束

外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

---添加外键
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
---举例
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);


---删除外键
alter table 表名 drop foreign key 外键名称;
---举例
alter table emp drop foreign key fk_emp_dept_id;

在这里插入图片描述

在这里插入图片描述

2.2、删除/更新行为

在这里插入图片描述

alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名(主表字段名) on update cascade on delete cascade;
---举例(级联更新)
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade ;

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

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update set null on delete set null;

在这里插入图片描述

3、事务

一组操作的集合,是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认MySQL的事务时自动提交的,也就是说,当执行一条 DML语句马,MySQL会立即隐式的提交事务。

举例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时执行完语句,数据没有发生变化。需要执行commit语句
在这里插入图片描述
执行错误,执行回滚事务。(rollback)

在这里插入图片描述

3.1、事务的四大特性

在这里插入图片描述

3.2、并发事务问题

在这里插入图片描述

3.2、事务的隔离级别

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

标签:事务,函数,外键,dept,add,emp,SQL,id,select
From: https://blog.csdn.net/qq_45606619/article/details/136740905

相关文章

  • 05-快速理解SparkSQL的DataSet
    1定义一个数据集是分布式的数据集合。Spark1.6增加新接口Dataset,提供RDD的优点:强类型、能够使用强大lambda函数SparkSQL优化执行引擎的优点可从JVM对象构造Dataset,然后函数式转换(map、flatMap、filter等)操作。DatasetAPI在Scala和Java中可用。Python不支持DatasetAPI,......
  • 预编译防sql
    参考:https://forum.butian.net/share/1559预编译防sql注入预编译机制可以提升效率,支持预编译机制的数据库有Oracle、Mysql、MicrosoftSQLServer、PostgreSQL、MongoDB等。预编译可以用于防止sql注入,它是先构建语法树,再带入变量预编译使用mysql为例preparestatement_name......
  • MySQL
    MySQL讲讲mysql的索引为什么要用B+树?B+树为什么更矮胖?有序性:B+树是一种有序的树形结构,可以快速定位和范围查询数据。在B+树中,所有的叶子节点都按照键值的大小顺序连接在一起,这使得范围查询变得高效。同时,有序性也使得B+树在范围查询、排序和分组等操作上更加高效。平衡性:B......
  • django脚本orm中使用原生sql
    fromdjango.core.management.baseimportBaseCommandfromchat_greeting_messages.modelsimportGreetingimportosfromdjango.dbimportconnectionclassCommand(BaseCommand):help="Patchinitializationrecruiternotsuitablegretting"......
  • 第十篇:MySQL内置函数(字符串函数|数值函数|日期函数|流程函数)
    函数就是一段写好的、具有特定功能的代码,可以被另一段程序直接调用,只要拥有编程基础。想必对函数并不陌生本篇将系统性地记录MySQL中常用的内置函数,主要分为这四大类,字符串函数数值函数日期函数流程函数一,字符串函数(一)concat(S1,S2,...Sn)<-拼接作用描述将传入......
  • 内存函数撼大树
    目录前言一、memcpy二、memmove三、memset四、memcmp前言本章我们学习一下内存函数,我们将从memcpy、memmove、memset、memcmp这几个内存函数的用途和使用方法方面为大家进行讲解,话不多说我们开始一、memcpyvoid*memcpy(void*destination,constvoid*sour......
  • 向线程函数传递参数
    向std::thread构造函数中的可调用对象,或函数传递一个参数很简单。需要注意的是,默认参数要拷贝到线程独立内存中,即使参数是引用的形式,也可以在新线程中进行访问 。voidf(inti,std::stringconst&s);std::threadt(f,3,"hello");代码创建了一个调用f(3,"hello")的......
  • 第9讲:函数递归
    第9讲:函数递归1.递归是什么?1.1递归的思想:1.2递归的限制条件2.递归举例2.1举例1:求n的阶乘2.1.1分析和代码实现2.1.2画图推演2.2举例2:2.2.1分析和代码实现2.2.2画图推演3.递归与迭代1.递归是什么?递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢?递......
  • Scala函数练习题
    1、定义一个高阶函数,按照指定的规则对集合里面的每个元素进行操作比如:Array(“hh”,“red”,“java”,“hadoop”)规则:对集合中每个元素进行操作,得到集合每个元素的长度objecttest{defmain(args:Array[String]):Unit={vallist=Array("hh","red","ja......
  • 详解rtklib中main函数如何配置文件(下)
    目录一、main函数流程总结二、分析识别-k后如何配置三、最后传参的数据文件处理方式 一、main函数流程总结详解rtklib中main函数如何配置文件(上)-CSDN博客在这片文章中讲解了rtklib中main函数的整个流程。(1)通过两种方法给main函数传递参数,并放在argv这个指针数组......