7、mysql中的表结构操作

版权声明:chaizepeng https://blog.csdn.net/chaizepeng/article/details/87883162

之前已经介绍了字段以及修饰字段的一些属性,根据特定的对象可以将字段进行组合,这就有了表的概念,接下来介绍一下如何操

作数据表结构。对数据表结构的操作有添加表、修改表、删除表、查看表结构。

添加表

格式:create table [if not exist] 表名( 字段名字1 数据类型 ,字段名字1 数据类型 )[表选项];

介绍一下每个部分的意思:

create table 固定格式,创建表的意思,必填
if not exist 表示如果表明不存在,创建,否则不创建,选填
表名 表的名字,必填
括号中的部分 声明的字段,格式为:字段名 数据类型,当有多个字段时,使用逗号隔开,必填
表选项(选填) charset 字符集,声明格式:CHARSET=utf8
engine 存储引擎,格式:ENGINE=InnoDB
auto_increment 自增开始值,设置:auto_increment=100
..........

实例,创建一个user表

CREATE TABLE USER (
  id bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  age int(4) DEFAULT NULL COMMENT '年龄',
  name varchar(30) NOT NULL UNIQUE COMMENT '名称',
  money decimal(12,2) DEFAULT NULL COMMENT '存款'
) ENGINE=InnoDB AUTO_INCREMENT=3 CHARSET=utf8;

修改表

对于表的修改,用户可自定义修改表的名称、表选项、表中字段名、字段的类型、添加和删除字段等

实例如下:

# 将表student更名为teacher
rename table 旧名 to 新名;
rename table student to teacher;

# 修改表的字符集
alter table teacher charset = gbk;

# 增加一个字段
alter table user add user_score double(5,2) not null default 0.00;

# 修改一个字段
alter table user modify score varchar(30) default '';

# 修改字段名
alter table user change 旧字段名 新字段名 类型;
alter table user change score score_ssss varchar(30);

# 删除字段
alter table user drop score_ssss;

# 删除字段上的约束
-- 先查看对应的约束有什么
show create table user;
-- 删除对应的索引
alter table user drop index name;

# ..........

删除表

# 删除表
drop table [表名1],[表名2],[表名。。。]
drop table user;

注意:此操作一般不要使用,使用也要保证万无一失

查看表结构

# 查看当前数据库下所有表
show tables;

# 按着表名关键字查询表
show tables like ‘%关键字’;

# 查看表创建语句
show create table user\g; 
show create table user\G ;

# 查看表中字段信息
desc/describle user;
show columns from user;

在这里说一下表之间的关系,因为表是根据具体的业务需求创建的,所以表之间有各种关系,一般可归为三类

一对一 表A中的一条数据和B中一条数据相关,表B中的一条数据和A中一条数据相关
一对多 表A中的一条数据和B中多条数据相关,表B中的一条数据只与表A中一条数据相关
多对多 表A中的一条数据和B中多条数据相关,表B中一条数据与表A中多条数据相关

在mysql中有外键这一概念,使用外键可以保持表之间的各种关系,但是在实际开发中,一般不使用外键,因为使用外键之后,开发人员对数据的可控性会降低,数据的操作更多的依赖于外键,更有甚者导致系统崩溃,所以实际开发中一般使用事务来保持关联表中数据的一致性,所以这里只是简单的介绍一下外键的使用,而不详细介绍

外键

A表中一个字段(非主键)指向B表的主键,那么这个字段称为外键,A表叫做B表的子表,B表叫做A表的父表。外键要求本身必须是一个索引(普通索引),如果字段本身没有索引,声明外键时数据库会先创建一个索引,然后才会创建外键本身,一张表中可以有多个外键,但是名字不可相同

外键的新增和删除

# 创建表时就给字段添加外键
create table card (
	id bigint(20) primary key auto_increment not null, 
	uid bigint(20) not null ,
	card_number varchar(255) not null,
    -- 添加外键,外键名为f_uid,外键是uid字段,连接user表的id字段
	constraint f_uid foreign key(uid) references user(id) 

);

# 创建表之后再添加外键
-- 先创建card表
create table card (
	id bigint(20) primary key auto_increment not null, 
	uid bigint(20) not null ,
	card_number varchar(255) not null
);

-- 将uid作为外键
alter table card add constraint f_uid foreign key(uid) references user(id);

# 外键不可以修改,所以需要先删除,后修改
# 删除外键 f_uid,分两步:删外键 ---> 删索引(因为创建外键时,系统自动创建了索引)
alter table card drop foreign key f_uid;
alter table card drop index f_uid;

外键的作用就是用来约束具有联系的表之间的数据,保证数据一致性,其约束模式有四种,如下:

no action 默认模式
restrict 严格模式,父表不能删除或更新一个已经被子表数据应用的记录,一般不使用
cascade 级联模式,父表的操作,子表关联数据跟着操作,例如:主表数据修改,子表对应数据也级联修改,一般修改操作使用
set null 置空模式,父表操作之后,子表对应的数据(外键字段)被置空,一般删除操作使用

下边写一个实例,来介绍一下约束模式的使用,在声明主键时,在后边加上对应的操作和对应的约束模式即可,如下:

# 创建外键fk_uid 并且设置约束模式,修改时是cascade,删除时是set null
alter table card add constraint fk_uid 
foreign key(uid) references user(id) on delete set null on update cascade;

使用过程中,注意几个地方:

1、当设置约束模式时,外键字段不要设置为空约束

2、外键名不能重复

3、删除外键时,要注意将创建外键时系统创建的索引也删除,一般和外键名同名

4、必须保证表的存储引擎是Innodb,如果不是,外键可以创建成功,但是没有约束作用

5、外键字段类型必须与父表的主键类型一致

猜你喜欢

转载自blog.csdn.net/chaizepeng/article/details/87883162