《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·003【表的约束、表的CRUD操作(DDL语句)】

一、表的约束

1、约束类型

非空约束

不能为空值NULL

not null

主键约束

唯一非空,能唯一标识一行记录,一个表只能有一个主键

primary key

唯一约束

唯一,并且可以为空值NULL并且空值NULL可以不唯一

unique

外键约束

主表 → 引用列
外键表 → 外键列

被引用的列必须是主键(primary key)或者唯一键(unique

外键表的外键列 引用 主表的引用列

foreign key

检查约束

在MySQL中,check关键字是不起作用的。

如果想要限制某一列的取值范围,应该使用触发器来实现。

默认值约束

设置默认值
Tips:有些分类中也不把默认值当成约束

default

2、添加约束

添加约束的时机

  • 创建表的时候
  • 修改表的时候

添加约束的分类

  • 列级别:所有约束都可以在列级别(MySQL中,外键约束写在列级别是不起作用的)
  • 表级别:除了非空约束默认值约束以外,其他约束都支持写在表级别

二、表的CRUD操作(DDL语句)

1、C(Create):创建

总体格式

create table if not exists 表名(
	列名1 数据类型1 [default1] [列级别约束],
	列名2 数据类型1 [default2] [列级别约束],
	......
	列名n 数据类型n [default 值n] [列级别约束],
	[表级别约束],
	[表级别约束],
	......
	[表级别约束]
) engine=INNODB default charset=utf8;

创建举例(创建学生表)

create table if not exists student(
	sno int primary key,
	sname varchar(20) not null,
	gender enum('男', '女') default '男',
	interest set('游泳', '打球', '跑步'),
	age int default 18
);

create table if not exists student(
	sno int,
	sname varchar(20) not null,
	gender enum('男', '女') default '男',
	interest set('游泳', '打球', '跑步'),
	age int default 18,
	constraint stu_sno_pk primary key(sno)
);

2、R(Retrieve):查询

查询当前数据库下所有表的信息

show tables;

查询创建表的结构、信息(字符集等)

show create table 表名;
desc 表名;

Tips:具体的查询数据的操作放到以后讲

3、U(Update):更新

修改表的名字

alter table 表名 rename to 新表名;
rename table 表名 to 新表名;

修改表的字符集

alter table 表名 character set 字符集名称;

给表添加一列

alter table 表名 add 列名 数据类型;

修改表中某一列的名字、数据类型

alter table 表名 change [column] 列名 新列名 新数据类型;
alter table 表名 modify [column] 列名 新数据类型;

删除表中某一列

alter table 表名 drop [column] 列名;

给表添加一个约束

  • 添加非空约束
    alter table 表名 modify [column] 列名 列类型 not null;
    
  • 添加默认值
    alter table 表名 modify [column] 列名 列类型 default 默认值;
    
  • 添加主键约束(列级别)
    alter table 表名 modify [column] 列名 列类型 primary key;
    
  • 添加主键约束(表级别)
    alter table 表名 add [constraint 约束名] primary key(列名);
    
  • 添加唯一约束(列级别)
    alter table 表名 modify [column] 列名 列类型 unique;
    
  • 添加唯一约束(表级别)
    alter table 表名 add [constraint 约束名] unique(列名);
    
  • 添加外键约束
    alter table 表名 add [constraint 约束名] foreign key(外键列) references 主表名(引用列);
    

删除表中一个约束

  • 删除非空约束

    alter table 表名 modify [column] 列名 列类型 [null];
    

    (Tips:要注意之前有没有默认值之类的,否则直接写上面的语句会把默认值也一并删除)

  • 删除默认值

    alter table 表名 modify [column] 列名 列类型;
    

    (Tips:要注意之前有没有非空约束之类的,否则直接写上面的语句会把默认值也一并删除)

  • 删除主键约束 (上面的两种方式是删不掉主键的)

    alter table 表名 drop primary key;
    
  • 删除唯一约束

    alter table 表名 drop index(列名) 约束名;
    

    (Tips:如果没有具体约束名是无法删除的)

  • 删除外键约束

    alter table 表名 drop foreign key(列名) 约束名;
    

    (Tips:如果没有具体约束名是无法删除的)

4、D(Delete):删除

删除表

drop table 表名;
drop table 表名 if exists 表名;

三、小练习

假设现在有员工表(emp),需要作出以下修改

  • 在【员工表】中添加【性别】一列,列名为gender、类型为char(2)、默认值为'男'
    alter table emp add column gender char(2) default '男';
    
  • 修改【员工表】中【性别】一列,使其数据类型为char(4)
    alter table emp modify column gender char(4) default '男';
    
  • 修改【员工表】中【性别】一列,使其默认值为'女'
    alter table emp modify column gender char(4) default '女';
    
  • 删除【员工表】中【性别】一列
    alter table emp drop column gender;
    
发布了49 篇原创文章 · 获赞 9 · 访问量 3121

猜你喜欢

转载自blog.csdn.net/qq_44220418/article/details/104798567