1、insert 插入多条记录
语法:insert into 表名(字段名1,字段名2) values(),();
insert into t_user(id,name,birth,create_time) values
(1,'zs','1980-10-11',now()),
(2,'lisi','1981-10-11',now()),
(3,'wangwu','1982-10-11',now())
;
2、快速创建表(了解)
原理:
- 将查询结果当作一张表新建!!
- 表创建出来,表中的数据也存在了!!
create table emp2 as select * from emp;
select * from emp2;
create table mytable as select empno,ename from emp where job='MANAGER';
select * from mytable;
3、将查询结果插入一张表中(了解)
create table dept_bak as select * from dept;
insert into dept_bak select * from dept;
select * from dept_bak;
4、快速删除表中的数据
delete删除数据:(DML语句)
- 优点:支持回滚,后悔可以再恢复
- 缺点:删除效率慢,空间不会被释放
start transaction;
delete from dept_bak;
rollback;
truncate删除数据
- 优点:删除效率高,表被一次截断,物理删除
- 缺点:不支持回滚
用法:truncate table(DDL操作)——比较重要,必须掌握
truncate table dept_bak;
大表删除数据,使用delete效率低,可以选择truncate删除数据,效率高,但是使用truncate之前,必须仔细询问客户是否真的需要删除, 并警告删除后不可恢复!!
5、对表结构的增删改(了解)
- 在实际需求中,表一旦设计好后,很少进行表结构的修改。修改表结构,成本比较高。
- 表结构的操作很少,修改表结构可以使用工具。
6、约束(非常重要!!):constraint
定义:
在创建表的时候,对字段添加约束,来保证表中数据的完整性、有效性!!
常见的约束:
- 非空约束:not null
- 唯一性约束:unique
- 主键约束:primary key(简称pk)
- 外键约束:foreign key(简称fk)
- 检查约束:check(mysql不支持,oracle支持)
小插曲:
xx.sql这种文件被称为sql脚本文件。
sql脚本文件中编写了大量的sql语句。
我们执行sql脚本文件的时候,该文件中所有的sql语句会全部执行!
批量的执行sql语句,可以使用sql脚本文件。
在mysql当中怎么执行sq1脚本呢?
source D:course\03-MysQL\document\vip.sql
你在实际的工作中,第一天到了公司,项目经理会给你一个xx.sql文件,你执行这个脚本文件,你电脑上的数据库数据就有了!
7、唯一性约束:unique
唯一性约束unique约束的字段不能重复,但是可以为Null
新需求:name和unique联合起来具有唯一性!!
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255),
email varchar(255),
unique(name,email)//约束没有添加在列的后面,这种约束称为表级约束
);
insert into t_vip values (1,'zhangsan','zhangsan@123.com');
insert into t_vip values (2,'zhangsan','zhangsan@sina.com');
select * from t_vip;
什么时候使用表级约束?
- 需要给多个字段联合起来添加一个约束的时候,需要使用表级约束。
not null只有列级约束,没有表级约束
unique和not null可以联合吗?
drop table if exists t_vip;
create table t_vip(
id int,
name varchar(255) not null unique
);
desc t_vip;
在mysql中,如果一个字段同时被not null和unique约束的话,该字段自动变成主键字段。
8、主键约束(primary key,简称pk)
相关术语:
- 主键约束:就是一种约束
- 主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段
- 主键值:主键字段中的每一个值都叫做:主键值
什么是主键?有啥用?
- 主键值是每一行记录的唯一标识
- 主键值是每一行记录的省份证号!!!
记住:任何一张表都应该有主键,没有主键,表无效
主键的特征:not null+unique(主键值不能是null,同时也不能重复!)
如何给一张表添加主键约束
drop table if exists t_vip;
create table t_vip(
id int primary key,//列级约束
name varchar(255)
);
insert into t_vip values (1,'zhangsan');
insert into t_vip values (2,'lisi');
表级约束:主要是给多个字段联合起来添加约束
create table t_vip(
id int,
name varchar(255),
email varchar(255),
primary key(id,name)//字段联合起来做主键:复合主键
);
实际开发不建议使用复合主键,建议使用单一主键!!
一张表,主键约束只能有一个。
主键值建议使用:int、bigint、char等类型,不建议使用varchar主键,主键值一般都是定长的
主键分类:
- 自然主键:主键值是一个自然数,和业务没关系
- 业务主键:主键值和业务紧密联系,例如拿银行卡帐号做主键值
实际开发中,使用自然主键多,因为主键不重复就行,不需要有意义。不建议使用业务主键
在mysql中,有一种机制,可以帮助我们自动维护一个主键值(auto_increment:从1开始自增)
drop table if exists t_vip;
create table t_vip(
id int primary key auto_increment,
name varchar(255)
);
insert into t_vip(name) values ('zhangsan');
insert into t_vip(name) values ('zhangsan');
insert into t_vip(name) values ('zhangsan');
9、外键约束(foreign key:简称fk)
需求:要求设计表,能够存储学生以及学校信息
- 一张表:冗余
- 两张表:一张学生表,一张存学校
外键字段:添加了外键约束的字段中的数据必须来自其它字段,不能随便填,且引用的字段要具有唯一性约束。
a表如果引用b表中的数据,可以先把b表叫做父表,把a表叫做子表
- 创建表时,先创建父表,再创建子表
- 插入数据时,先插入父表,再插入子表
- 删除数据时,先删除子表,再删除父表
建t_school表:
create table t_school(
sno int primary key,
name varchar(255)
);
insert into t_school values(1,'北京一中');
insert into t_school values(2,'北京二中');
建t_student表:
create table t_student(
id int primary key auto_increment,
name varchar(255),
age int,
school_no int,
constraint t_school_sno_fk foreign key(school_no) references t_school(sno)
);
①级联删除:(慎用)
查找约束名:
select * from table_constraints where table_name='t_student';
删除约束:
alter table t_student drop constraint t_school_sno_fk;
添加约束:
alter table t_student add constraint t_school_sno_fk foreign key(school_no) references t_school(sno) on delete cascade;
级连删除:
delete from t_school where sno=1;
②级连更新
alter table t_student add constraint t_school_sno_fk foreign key(school_no) references t_school(sno) on update cascade;
update t_school set sno=200 where sname='北京二中';