第一章mysql入门

mysql交互技巧

image.png
image.png

使用source

image.png
image.png

MySQL标识符语法规则

不加引号的标识符可以由大小写形式的字母a-z、数字 0-9、美元符号、下划线、以及范围在U+0080到U+FFFF之间的Unicode扩展字符构成

加引号就可以支持除NUll字节 和Unicode补充字符(U+10000及以上)以外的任何字符

大部分标识符的最大长度是64个字符,别名的最大长度是256个字符。

image.png

在windows环境下,建议统一使用小写字母,尤其是,如果你要使用innoDB表的话,因为innoDB引擎在其内部都是以小写字母方式来存储数据库名和表名的。

第二章 数据库的增删改查

在涉及database的所有语句里,schema 关键字与database同义。

选择数据库
use dbname;
选择了一个数据库,还可以使用use 更换数据库
也可以在一个数据库中使用其他数据库中的表,只需要使用该表的数据库标识符来限定他的名字

image.png

image.png

image.png

索引

image.png
查看服务器有哪些引擎
show engines;

InnoDB存储引擎,是MySQL的默认引擎
image.png
image.png

创建索引:
直接在创建表的时候建立索引
image.png
解释语句
image.png

MySQL可以创建多种类型的索引

·唯一索引 对于单列索引不允许有重复值出现,对于多列(复合)索引,不允许出现复合的组合值
·常规索引 (非唯一性)索引。它可以让你获得索引的好处,但是会出现重复值的情况。

创建临时表

create temporary table 表名 ···创建的表仅在此会话中可见,意外终止会话表也不会存在

尽管服务器会在与客户端会话结束时删除表,我们在用完表之后还是要显示的删除,这是一个好习惯,让服务器尽快的释放资源

show tables;语句无法显示出临时表

cast()函数

image.png

重新命名表名

rename table 旧表名 to 新表名:or alter table 旧表名 rename to 新表名;

内连接

根据某个表的每一行与另外一个表里的每一行得到全部可能组合的连接操作,叫做生成笛卡尔积 n*m
**select * from t1 join t2;**

外连接

内连接只会显示在两个表里都匹配上的行。
外连接除了显示同样的匹配结果,还可以把其中一个表在另一个表里没有匹配的行也显示出来。
左连接—-把左表里的未匹配上的行也显示出来。
image.png
image.png

删除索引

删除索引的方法是,使用drop index 或alter table语句。
如果要使用drop index语句,则必须给出那个要被删除索引的名字
drop index 索引名 on 表名;

如果要用drop index 语句来删除primary key,则必须以带引号标识符的形式给指定名字primary
drop index ‘primary’ on 表名; p88

与create index 语句相似,drop index语句会被内部处理成alter table语句。
前面的那条drop index语句等价于下面的alter table语句
alter table 表名 drop index 索引名;
alter table 表名 drop primary key;

如果不知道表的索引名字,可以用show create table 或者 show index 来查询他们
从表里删除列是,索引也会受到影响。如果删除的列是某个索引的组成部分,那么也会从该索引删除这个列
如果删除了索引的所有列,那么MySQL会删除这个索引

子查询

不能在where 后面跟聚合函数(where子句的作用是确定哪些行)

行构造器

image.png

in和 not in 子查询

在与不在
select * from 表 where 条件 in/not in (select 子查询);

in 相当于 =any
not in 相当于<>all

union表联合

union 不会显示重复
union all 会显示重复

具体看P106

多表删除和更新

在单个表里使用delete 和update 操作,只需要引用一个表的列即可

在编写设计多表的delete语句时,需要把所有涉及的表全部列在from子句里,并用来匹配表中各行检索条件写在where子句里。假设从表t1里删除一些行,其id值可以在另一个表t2里找到
delete t1 from t1 join t2 on t1.id=t2.id;

delete语句还支持一种语法,可以一次性删除多个表里的行。
如果要从两个表里把id值相匹配的行都删掉,那么必须在delete 关键字的后面写出这两个表的名字
delete t1,t2 from t1 join t2 on t1.id=t2.id;

对于更新也是类似

事务处理

事务处理是通过使用提交(commit)和回滚(rollback)功能来实现的

事务系统通常具有ACID特性
atomic(原子性) 构成事务的所有语句应该是一个独立的逻辑单元,你不能只执行他们当中的一部分
consistent(一致性)数据库在事务的执行前后必须是一致的
isolated(独立性)事务之间不应该相互影响
durable(持久性)当事务执行成功完成时,其影响将被永久性地记录到数据库里。

如果事务在执行过程中发生了错误,使用rollback取消事务
如果事务在执行过程中调用了begin或者start transaction ,就会隐式的提交当前事务
image.png

事务保存点

image.png