MySQL笔记2

典型子查询

一个查询的输出是另一个查询的输入,也称为嵌套子查询


image.png

5个关键点:
1、在查询时基于未知时应考虑使用子查询
2、子查询必须包含在括号内
3、将子查询放在比较运算符的右侧以增强可读性
4、对单行子查询使用单行运算符
5、对多行子查询使用多行运算符

种类:
返回结果分类:
单行子查询、多行子查询、空值子查询

返回结果为一行且只有一列为单行子查询
例如:1、薪水比RACHEL高的员工
select ename,sal from emp where sal > (select sal from emp where ename='RACHEL')
2、薪水最低的员工
select ename,sal from emp where sal = (select min(sal) from emp);

返回结果为多行且只有一列是多行子查询


image.png

例如:1、查询所有经理的信息
select * from emp where empno in (select mgr from emp);
2、薪水低于销售部任意员工的非销售部员工
select empno,enma,job,sal from emp where sal < any(select sal from emp where job='salesman') and job <> 'salesman';

返回值为空值就是空值子查询

表结构操作语句

表示数据库存储数据的逻辑概念,表分为行和列。

创建表
image.png

数据类型:
varchar(l) 可变长度的字符串 l是数字
DATE 日期数据类型(日-月-年)
NUMBER(p,s) 数字类型p为整数位,s为小数位
BOOLEAN 布尔,仅仅可以表示TRUE FALSE NULL

列和表的约束


image.png

主键有两个特殊性:1、非空 2、唯一
可以理解成是一个索引, 我们可以通过这个找到这一行的内容‘’

外键
可以这样理解,当前我们有两张表,一张A表,一张B表如果说两张表存在这样一种关系,在A表的某一个字段它里面所得的值必须要在B表存在,也就是说A和B它有这种相互之间的关系。我们对A操作的时候,首先要确认B中有相应的字段是存在的。


image.png

例如:CREATE TABLE EMP(ID VARCHAR(6) PRIMARY KEY,NAME VARCHAR(20) NOT NULL,HIREDATE DATE DEFAULT SYSDATE NOT NULL,SALARY NUMBER(7,2))CONSTRAINT EMP_SAL_MIN CHECK (SALARY>1000));

default sysdate是缺省时间。
CONSTRAINT是一个约束,是check(salary>1000)也就是说这个表里面,当我们往表插入数据的时候,salary的值不能小于1000

增加列
image.png

例如 alter table emp add address varchar(40);

删除列
image.png

例如:alter table emp drop column address;

修改表名
image.png

例如 alter table emp rename to emps;

修改表的列名
image.png

alter table emps rename column name to ename;

删除表格
image.png

CASCADE CONSTRAINTS 是删除表的内容以及表的定义,释放空间,就是删除了整个表。

查看表结构
image.png

典型数据操作语句

数据操作语言是SQL语言的核心部分,当你做下列操作时 DM(manipulation)L语句将会被执行;
insert 增加新的一行到表中
update 修改现有的表中的行
delete 删除现有的表中的行。

增加新的行到表中:


image.png

插入时候需要注意的点:
该语句一次只能插入一行到表中
插入新的一行,每列都包含值
按照表中列的默认顺序列出数值
在INSERT字句中列出列是可选的
将日期和字符数值放入单引号中

插入空值的行:隐式和显式
隐式方法:从列列表中将这些列忽略


image.png

显式方法:在VALUES字句中指定NULL关键字


image.png

插入日期值:TO_DATE()
SYSDATE函数记录当前的日期和时间

image.png

修改表中的行:
使用UPDATE修改已经存在的行


image.png

使用where子句,指定要修改的行
不使用where子句,表中所有的行都被修改

例如:update emp set deptno=60,job='trainer' where ename = 'elina';
修改ename为elina的这个人的job字段为trainer和deptno为60.

删除表中的行


image.png

例如:delete from emp where ename='elina';

数据库事务

事务可以看作是由对数据库的若干操作组成的一个单元。
要求:这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求。

例如:银行转账 A给B转了50元
一个事务:A银行账户减少50,B银行账户增加50。

事务开始于第一个DML SQL语句执行时,结束于下列事件之一:
1、发出COMMIT或ROLLBACK语句
2、一个DDL(数据定义语言)或DCL( 数据控制语言)语句执行(隐式提交)
例如:数据定义语言:创建表,创建索引、创建视图的时候的创建语句。
数据控制语言就是commit rollback这些。
3、用户退出iSQL *Plus (默认提交)oracle的图形化界面
4、系统崩溃(隐式提交)

控制事务的常用命令


image.png
image.png

表示我们把之前的那个事务成功提交了,关闭掉。接下来我们做下一个事务
其实在我们做commit命令的前后数据库是有变化的。


image.png
image.png
image.png

做某些点的回退:


image.png

例子:


image.png
image.png

SQL语句简单优化

1、避免使用‘
在解析过程中,会将‘
’一次转换成所有的列名,并通过查询数据字典完成,意味着耗费更多的时间。
2、使用表的别名

image.png

3、where子句中的连接顺序
尽量把能够快速缩小查询范围的语句放在最后,然后在依次往前的一个操作。


image.png

4、 使用“>=”代替“>”
5、用truncate代替delete


image.png

6、尽量多使用COMMIT
会释放的数据:


image.png

7、避免在索引列上使用函数
例如:


image.png

你可能感兴趣的:(MySQL笔记2)