MySQL入门教程

DML和DDL补充

insert插入多条语句

insert into 表名(字段1,字段2) values(值1,值2),
(值3,值4),...,()

快速创建表

将查询的结果当作成新的表

create table xx as select * from emp;

把查询结果插入到

insert into xx select * from xxx

快速删除表中的数据,不可恢复!

truncate table xxx # DDL

删除表

drop table xxx

DDL 不讲,因为不常用,create,drop,alter

约束

  • 非空约束 not null
  • 唯一性约束 unique
  • 主键约束 primary key
  • 外键约束 foreign key
create table t_vip(
	id int unique,
    name varchar(255) not null
)

null不算unique

两个字段联系起来具有唯一性

create table t_vip(
	id int,
    name varchar(255),
    email varchar(255),
    unique(name, email)	# 表集约束
)

not null只有列级约束,没有表级约束

如果一个字段被unique和not null 同时修饰,那么就自动成为主键(Oracle不是)

主键约束

  • 主键约束
  • 主键字段
  • 主键值

任何一张表都应该有主键。

主键特征:不能空,不能重复

drop table if exists t_vip;
create table t_vip(
	id int primary key,
    name varchar(255)
)

单一主键和复合之间,建议不使用复合主键

一张表主键约束只能添加一个

主键值建议使用 int,bigint,char,一般都是定长的。

自然主键和业务主键。自然主键是一个int值,与业务没关系。业务主键是业务中的一个字段。建议使用自然主键,不要和业务挂钩。

自增

create table xxx (
	int id primary key auto_increment,
    name varchar(255)
)

外键约束

foreign key

create table t_class(
	classno int primary key,
    classname varchar(255)
)

create table t_student(
	no int primary key,
    name varchar(255),
    cno int,
    foreign key(cno) references t_class(classno)
)

外键值可以为null。外键不一定是父表的主键,但是一定要有unique约定

存储引擎

  • MyISAM

    格式文件

    数据文件

    索引文件

  • InnoDB

  • Memory

添加了unique或者主键的字段,会自动创建索引

事务

事务是一个完整的业务逻辑。

和事务有关的是DML语句,update delete insert

提交事务:commit

回滚事务:callback

mysql默认自动提交,每次执行一个DML语句就提交一次!

事务特性

  • A 原子性
  • C 同时成功或者同时失败
  • I A和B之间互不影响
  • D 事务结束后,保证数据已经保存了

隔离级别

两个事务A和B

  • 读未提交:A能读到B还没有提交的数据(脏读)
  • 读已提交:A只能读到B已经提交的数据(不可重复读)
  • 可重复读:A只能读到A开始时候的数据(幻读)
  • 串行化

索引

可以在单个字段,也可以在多个字段上添加。为了缩小扫描范围。

什么情况加索引

  1. 数据量大
  2. 某个字段经常出现在where后面(经常被扫描
  3. 该字段很少进行DML操作
create index emp_ename_index on emp(ename);
drop index emp_ename_index on emp(ename);

索引失效的情况

  • 模糊匹配的时候%开头
  • or两端有一个没有索引
  • 左匹配法
  • where中使用了函数
  • 发生了类型转换

索引分类

  • 单一索引
  • 复合索引
  • 主键索引
  • 唯一性索引
  • 聚簇索引
  • 非聚簇索引

视图

create view dept2_view as select * from dept;
drop view dept2_view;

对视图对象的增删改查会导致原表被修改

好了, 以上是本文所有内容,希望对大家有所帮助,也希望大家对码农之家多多支持,你们的支持是我创作的动力!祝大家生活愉快!   

你可能感兴趣的:(mysql,数据库)