MySQL学习第13天(约束)

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='北京二中';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值