MySQL之知识点(十二)

一、自增列:AUTO-INCREMENT

作用:某个字段的值自增

特点和要求:

  1. 一个表最多只能有一个自增长列
  2. 当需要产生唯一标识符或顺序值时,可设置增长
  3. 自增长列约束的列必须是键列(主键列、唯一键列)
  4. 自增约束的列的数据类型必须是整数类型
  5. 如果自增列指定了0和NULL,会在当前最大值的基础上自增自增,如果自增列手动指定了具体值,直接赋值为具体值

代码实现:

1,在CREATE TABLE 时添加

#建表
creat table test4(
id int primary key auto_increment,
last_name varchar(15)
);

#添加
insert into test4(last_name)
values('TOM');

select * from test4;

(注意:开发中,一旦主键作用的字段上声明有AUTO_INCREMENT,则我们添加数据时,就不要给主键对应的字段去赋值了)

2,在ALTER TABLE 时添加

#建表
create table test5(
id int primary key,
last_name varchar(15)
);

#查看信息
desc test5;

#添加自增
alter table test5 modify id int auto_increment;

desc test5;

二、FOREIGN KEY(外键)约束

作用:限定某个表的某个字段的引用完整性

1,在CREATE TABLE 时添加

#先创建主表
create table dept1(
dept_id int,
dept_name varchar(15)
);

#添加主键约束
alter table dept1 add primary key(dept_id);
desc dept1;

#在创建从表
create table emp1(
emp_id int primary key auto_increment,
emp_name varchar(15),
department_id int,

#表级约束
constraint fk_emp1_dept_id foreign key(department_id) references dept1(dept_id)
);

desc emp1;

select * from information_schema.table_constraints where table_name='emp1';

演示:

#添加失败
insert into emp1 values(1001,'TOM',10);

#添加成功(在主表dept1中添加10号部门后,就可以在从表中添加10号部门的员工)
insert into dept1 values(10,'IT');

insert into emp1 values(1001,'TOM',10);

#删除失败
delete from dept1 where dept_id=10;

#更新失败
update dept1 set dept_id=20 where dept_id=10;

2,约束等级

 演示:on update cascade on delete set null

#创建主表
create table dept(
did int primary key,         #部门编号
 dname varchar(50)           #部门名称
);

#创建从表
create table emp(
eid int primary key,         #员工编号
ename varchar(5),            #员工名称
deptid int,                  #员工所在部门

foreign key (deptid) references dept(did) on update cascade on delete set null
#把修改操作设置为级联修改等级,把删除操作设置为set null等级
);

#添加数据
#先添加主表数据 
insert into dept values(1001,'教学楼');
insert into dept values(1002,'财务楼');
insert into dept values(1003,'咨询楼');

#添加从表数据
insert into emp values(1,'张三',1001);  #添加这条数据时,要求部门表有1001部门
insert into emp values(2,'李四',1002);
insert into emp values(3,'王五',1003);

select * from dept;

select * from emp;

#更新修改
update dept set did=1004 where did=1002;
select * from dept;

select * from emp;

#删除
delete from dept where did=1004;

select * from dept;

select * from emp;

结论:对于外键约束,最好采用:‘on update cascade on delete restrict’ 的方式

三、CHECK(检查)约束与DEFAULT(默认值)约束

CHECK约束作用:检查某个字段的值是否符合XX要求,一般指的是值的范围。

#建表
create table test6(
id int,
last_name varchar(15),
salary decimal(10,2) check (salary>2000)
);

#添加数据
#添加失败

insert into test6 values(1,'TOM',1500);
select * from test6;

#添加成功
insert into test6 values(1,'TOM1',2500);
select * from test6;

DEFAULT约束作用:给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显示赋值,则赋值为默认值。

四、视图

1,常见的数据库对象

2,视图理解

视图作用:一方面可以帮助我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。

视图的理解:

  • 视图是一种虚拟表,本身是不具有数据的,占用很少的内存空间,它是SQL中的一个重要概念
  • 视图建立在已有表的基础上,视图赖以建立的这些表称为基表
  • 视图的创建和删除只影响视图本身,不影响对应的基表,但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。
  • 向视图提供数据内容地语句为SELECT语句,可以将视图理解为存储起来地SELECT语句
  • 视图,是向用户提供基表数据的一种表现形式。通常情况下,小型项目地数据库可以不使用视图,但是在大型项目中,以及数据表比较复杂的情况下,视图的价值就凸现出来了,它可以帮助我们把经常查询的结果集放到虚拟表中,提升效率。

                                                     3,创建视图(VIEW)

#准备工作
create database dbtest1;

use dbtest1;

create table emp as select * from atguigudb.employees;

select * from emp;

desc emp;

#针对于单表

#确定视图中字段名的方式1:
create view vu_emp1 as select employee_id emp_id,last_name lname,salary from emp;
#查询语句中字段的别名会作为视图中字段的名称

select * from vu_emp1;

#确定视图中字段名的方式2:
create view vu_emp2(emp_id,name,monthly_sal)  #小括号内字段个数与SELECT中字段个数相同
as select employee_id ,last_name ,salary from emp;

select * from vu_emp2;


#针对于多表

create view vu_emp_dept
as
select e.employee_id,e.department_id,d.department_name
from emps e join depts d
on e.'department_id'=d.'department_id';

select * from vu_emp_dept;

 基于视图创建视图:

create view vu_emp3
as
select employee_id,last_name
from vu_emp1;

select * from vu_emp3;

4,查看视图

语法1:查看数据库的表对象、视图对象

show tables; 

语法2:查看视图结构

describe 视图名称; 

语法3:查看视图的属性信息

show table status like '视图名称'; 

语法4:查看视图 的详细定义信息

show create view 视图名称; 

5,更新视图中的数据(视图中的行和底层基本表中的行之间必须一对一的关系)

#选择视图
select * from vu_emp1;

select employee_id,last_name,salary from emps;

#更新视图数据,会导致基表中数据的修改
update vu_emp1 set salary=2000 where employee_id=101;

#更新表中的数据也会导致视图中数据的修改
update emps set salary=10000 where employee_id=101;

#删除视图中的数据,也会导致表中的数据删除
delete from vu_emp1 where employee_id=101;

 当然也有些不可以更新的视图:

 (注意:虽然可以更新视图数据,但总的来说,视图作为虚拟表,主要用于方便查询,不建议更新视图的数据,对视图数据的修改,都是通过对实际数据表里的数据的操作来完成的)

6,修改视图

#方式1
create or replace view vu_emp1

as

select employee_id,last_name,salary,email from emps where salary>7000;

#方式2

alter view vu_emp1

as

select employee_id,last_name,salary,email,hire_data from emps;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值