子查询:即嵌套查询,就是将一条 SELECT 语句的执行结果当作一个单值、集合或临时表参与另外一个 SELECT 查询。
where:对笛卡尔集进行筛选,having是对分组后的表进行筛选;
AOTU_INCREMENT
设置字段自动递增特性时,其字段必须为key,新增插入时,会以表中最大值为基础+1
事务控制
所谓事物,就是一系列数据库操作,但是它们具有原子性。要么全部成功完成,要么啥操作都没有做。
事务的四大特性:ACID
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
事物操作:
-
BEGIN:开启一项新事务
-
START TRANSACTION或BEGIN语句可以开始一项新的事务。
-
COMMIT 提交当前事务,是变更成为永久变更。
-
ROLLBACK 回滚当前事务,取消其变更。
-
SAVEPOINT语句用于设置一个事务保存点,带一个标识符名称。如果当前事务有一个同样名称的保存点,则旧的保存点被删除,新的保存点被设置。
ROLLBACK 带上事务保存点
在事物执行过程中如果执行DDL操作会造成隐式提交
视图(View)
就是一张虚表,和真实表的操作方法完全一样,但通常不建议对它进行 DML 操作。
作用:为不同用户或不同需求展现不同的数据,而不是所有原始数据。
创建视图:
CREATE VIEW c_info AS SELECT ... from ...; /*视图作为一个筛选后的新'表'(c_info)*/
/*对视图内的字段进行操作,其真实表中的数据也会相应的进行变化*/
删除视图:
DROP VIEW c_info;/*删除名为c_info的视图*/
索引(Index)
作用:提升查询效率。DBMS会自动基于主键或唯一健创建索引。
创建索引:
CREATE INDEX i_dex ON student (sno);
/*给student表中sno字段创建索引i_dex(sno这个对象是主键或唯一键)*/
删除索引:
DROP INDEX i_dex ON student;
/*删除i_dex在student中的索引*/
存储过程(Procedure)
就是一个没有返回值的函数
输出:
mysql> delimiter // /*设置分隔符(结束符)*/
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> //
调用CALL simpleproc(@a);
/*将t中计数后的值传给a*/
输入
mysql> delimiter //
mysql> CREATE PROCEDURE add_course (IN cno INT, IN cname VARCHAR(50))
-> BEGIN
-> INSERT INTO course VALUES (cno, cname, '张三', 2);
-> SELECT * FROM student;
-> END
-> //
DROP PROCEDURE add_course;
删除存储过程:
DROP PROCEDURE add_course;
/*删除add_course的存储过程*/
函数(FUNCTION)
实例:获取成绩
//创建函数:
->CREATE FUNCTION get_c_score (name VARCHAR(10)) RETURN INT
->BEGIN
->DECLARE s1 INT; /*定义一个变量*/
->SELECT sc.score INTO s1 FROM student s,course c,score ac WHERE s.sno = sc.sno AND c.cno = sc.sno AND c.cno = sc.cno AND c.name = 'C语言程序设计' AND s.name = name;
->RETURN S1;
->END;
//删除函数:
->DROP FUNCTION get_c_score;