mysql表结构的完整描述(详细教程)

---基于一个列给他加上功能 

mysql表结构的完整描述图示 --用于显示表的结构,涵盖了每个字段的属性(这里字段描述5个)。

表结构描述操作

创建 create table();

显示show 

删除drop

修改表结构 alter table---

一、desc(describe)命令的输出标签---属于修改表结构内容

1、Field(字段名)

  • 描述: 列的名称。字段名用于标识表中的数据。

  • 用途: 字段名是访问表数据的关键,操作 SQL 查询时引用字段名来选择、更新或删除数据。
  • 命名规则: 避免使用 SQL 保留字(如 SELECTWHERE),字段名应具有描述性,以便代码的可读性和维护性。例如,employee_namename 更具描述性。
  • 常见问题: 避免使用特殊字符或空格,字段名应该遵循一致的命名约定,例如使用下划线分隔单词(first_name)。

 2、Type (数据类型)

  • 描述: 列的数据类型,定义了数据的存储方式和格式。
  • 基本数据类型

1.1、数值类型
  • 整型:
    • bigint
    • int(或 integer)
    • mediumint
    • smallint
    • tinyint
  • 浮点型:
    • decimal(或 numeric)
    • double
    • float
1.2、字符串类型
  • 字符类型:
    • varchar(n) (可变长度)
    • char(n) (固定长度)
  • 文本类型:
    • longtext
    • mediumtext
    • text
    • tinytext
  • 二进制类型:
    • longblob
    • mediumblob
    • blob
    • tinyblob
    • varbinary(n)
    • binary(n)
1.3、日期和时间类型
  • 日期类型:
    • year
    • time
    • timestamp
    • datetime
    • date
1.4、枚举和集合类型
  • enum:一个字符串对象,可以取预定义的值。

  • set:一个字符串对象,可以包含零个或多个预定义值。
1.5、son类型
  • json:用于存储 json 格式的数据。

长度和精度: 数值类型可以设置最大长度(例如 varchar(255)),浮点数可以设置总位数和小数位数(例如 decimal(10,2)

3、Null (是否允许 NULL)

  • 描述: 列是否可以包含 null值,默认不写是允许空值
  • 允许:null允许空值
  • 不允许:not null不允许为空值
  • 插入数据: 当字段允许 null时,你可以在插入数据时选择不提供该字段的值,MySQL 将自动将其设置为 null。
  • 查询数据: 查询中可以使用 is null 或 is not null 来筛选包含 null 或不包含 null 的记录。
  • 比较: 在 SQL 中,null 不等于任何值(包括另一个 null),比较时需要使用 is null 进行检查。

4、Key (键、索引)---基于某个列

自动生成索引减少了开发人员的负担,避免了在每次创建键时都需要手动创建索引的麻烦。

  • 描述: 列是否有索引,以及索引的类型。---show index from employeetable;(显示所有索引)
  • 注意:在 MySQL 中,外键必须引用一个存在的主键或唯一键(unique key)列。

外键与索引的关系

外键自动生成索引解释

当你定义外键时,MySQL 通常会自动为外键列创建索引。如果你后来删除了外键约束,外键的索引不会被自动删除,除非你手动删除它。---创建的是普通的索引简称:mul

手动索引独立存在解释:

如果你手动创建了索引(如在你的例子中),那么删除外键不会影响这个索引,因为它是独立于外键约束存在的。

key键的类型:

主键(primary key):

自动生成索引: 创建主键时,MySQL 会自动为主键列生成一个唯一索引,以确保主键的唯一性和非空性。

  • 用于唯一标识表中的每一行,不能有重复值且不能为空。---要给一个外键约束名称
  • #创建name表时写入(主键):
    create table name(
    id int(9) not null primary key comment'序号',
    name varchar(8) comment'名字',
    sex enum('男','女')comment'性别', 
    school varchar(30) default'柳州大学' comment'学校'
    )comment ='信息登记表';

# 创建name4表时写入(复合主键):
create table name4 (
    id int(9) not null comment '序号',
    name varchar(9) not null comment '姓名',
    sex enum('男', '女') comment '性别',
    school varchar(99) default '柳州大学',
    primary key (id, name) comment'定义复合主键' 
   ) comment = '信息登记表'; 

# 向name2表添加一个(主键):
alter table name2 add  primary key(id ); 

# 向name3表添加(复合主键)
alter table name3 add primary key(id,name);

外键(foreign key): 

自动生成索引: 当创建外键时,MySQL 不一定会自动生成索引。一般来说,如果外键列没有已有的索引,MySQL 会为其创建一个索引;如果已有索引,则会使用现有索引。

  • 用于在两个表之间建立关系,确保引用完整性,子表参照父表数值要一致。
  • 在 MySQL 中,外键必须引用一个存在的主键或唯一键(UNIQUE key)列。如果你尝试创建一个外键来引用一个没有主键或唯一键的列,MySQL 会返回错误。因此,在创建外键约束之前,你需要确保被引用的表中的列具有主键或唯一约束。

# 创建wai表是写入外键---(constraint约束)

  • create table wai (
    id int(9) not null comment'序号',
    name varchar(9) not null comment'名字',
    sex enum('男','女') comment'性别',
    school varchar(9) default'柳州大学' comment'柳州大学',
    foreign key(id) references name(id) # 外键参照name表的id列
    )comment ='登记信息表';

 向wai2表添加外键

alter table wai2
add constraint fk_wai2
foreign key(id) references wai(id);

显示wai2表的创建完整结构

show create table wai2;

删除外键使用(修改表结构)alter table 删除外键(drop)---要先知道外键名称
alter table wai3  drop foreign key ky_wi3;

# 查看显示wai2的表结构,下面即是
show create table wai2;

创建外键表后删除外键的表显示示例(导出变大写):---写外键加constraint的约束名叫啥索引就同名否者索引默认列名为索引名称

CREATE TABLE `wai2` (
  `id` int NOT NULL COMMENT '序号',
  `name` varchar(8) DEFAULT NULL COMMENT '名字',
  `sex` enum('男','女') DEFAULT NULL COMMENT '性别',
  `school` varchar(30) DEFAULT '柳州大学' COMMENT '学校',
  KEY `fk_wai2` (`id`) # 保留了一个普通索引,需要手动删除
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='信息登记表'

唯一键(Unique Key) 

自动生成索引: 创建唯一键时,MySQL 会为唯一键列生成一个索引,以确保列值的唯一性。

描述:每个值都是唯一的。与主键不同,唯一键可以包含空值。(复合唯一键写法-unique(id,name)

# 创建wai4表写入唯一键(unique key)
create table wai4(
id int(9) unique comment'序号', #定义一个唯一键
name varchar(9) comment'名字',
sex enum('男','女')comment'性别',
phone varchar(20) unique key comment'电话号码', #定义一个唯一键
state enum('在校','离校') comment'状态',
mark_for varchar(99) comment'去向'
) comment = '信息登记';

删除唯一键语句:alter table wai4 drop index id; 

复合键(unique key(id,name))

描述:基于多个列创建的主键、外键、索引---示例:primary key(id,name)

创建主键、外键、唯一键都可以自定义约束名称

索引(index)

手动创建: 普通索引需要手动创建。它不是由主键、唯一键或外键自动生成的。

定义普通索引时,直接使用 index 关键字指定索引名称,而不需要使用 constraint

描述:在某些数据库管理工具中,复合索引的显示可能仅基于第一个列。

注意:已存在的表添加索引的方法

第1:alter table name add index idx_id (id)

第2:create index index_id on name(id)

1、普通索引(index)

---基于一个列给他加上功能(提高一列的查询速度)

描述:最基本的索引类型,可以加速查询操作,但不强制唯一性。

# 创建wai5表定义一个普通单列索引和复合索引
create table wai5 (
id int(9) comment'序号',
name varchar(9) comment'名字',
sex enum('男','女') comment'性别',
age int(7) comment'年龄',
mark_for varchar(50) comment'去向',
school varchar(22) default'柳州大学' comment'学校',
index idx_id (id), #定义了一个普通的单列索引自定义名为idx_id
index idx_name_sex (name,sex) comment'复合索引' #定义了一个普通索引的复合索引
) comment ='信息登记';
 

#删除wai5表的索引idx_id
drop index idx_id on wai5

# 删除wai5表
drop table wai5

# 显示wai5的所有索引
show index from wai5

2、复合索引(Composite Index)

---基于一个列给他加上功能(一次提高多个列的查询速度)

描述:复合索引是一个索引,它由两个或多个列组成,用于加速对表中数据的查询。

主键复合索引(primary key):constraint ky_id_name_sex primary key (id,name,sex)

外键复合索引(foreign key):constraint ky_id_name_sex foreign key(id,name,sex)

唯一键复合索引(unique key):constraint unique_id_name_sex unique key(is,name,sex)

普通索引复合索引(index):index index_id_name_sex (id,name,sex)

全文索引复合索引(fulltext index):fulltext index idx_fulltext (address,school)

3、全文索引(fulltext Index)

---基于一个列给他加上功能(提高文本内容查询速度)

描述:用于文本搜索,可以在大文本数据中进行高效的全文检索,适用于char,varchar和 text 类型的列。

# 向已存在wai5表使用alter table添加一个全文索引
alter table wai5 add fulltext index idx_mark_for (mark_for);

# 向已存在wai5表使用create index 添加一个全文索引
create fulltext index idx_school on wai5(school);

# 使用alter table 删除索引 idx_mark_for
alter table wai5 drop index idx_age;

# 使用drop index 删除索引
drop index idx_school on wai5

4、空间索引(spatial Index)

描述:用于地理信息系统(GIS)中的空间数据,支持对 GEOMETRY 类型的列进行快速检索。

空间索引主要用于以下数据类型:

  • point:表示一个二维坐标点(X, Y)。
  • linestring:表示由一系列点连接而成的线。
  • polygon:表示一个多边形,由一个或多个线环定义。
  • multipoint:表示多个点的集合。
  • multilinestring:表示多个线的集合。
  • multipolygon:表示多个多边形的集合。
  • geometry:一个通用的空间数据类型,可以表示任意几何形状。

添加索引:alter table name add spatial index idx_spatial (zuobiao)

                  carete spatial index idx_spatial on name(zuobiao)

5、反向索引(Reverse Index)

描述:在 MySQL 中并没有直接的反向索引关键字,但反向索引的概念是将字段的值反转存储,以提高某些查询的性能,通常需要自定义实现。

5、default(默认值)

描述:如果没有为某个字段提供值,则使用数据库表中定义的默认值。---基于一个列给他加上功能(默认写的信息)

# 创建wai5表定义一个默认值名为柳州大学
create table wai5 (
id int(9) comment'序号',
name varchar(9) comment'名字',
sex enum('男','女') comment'性别',
age int(7) comment'年龄',
mark_for varchar(50) comment'去向',
school varchar(22) default'柳州大学' comment'学校',
index idx_id (id), #定义了一个普通的单列索引自定义名为idx_id
index idx_name_sex (name,sex) comment'复合索引' #定义了一个普通索引的复合索引
) comment ='信息登记';

6、extra(额外属性)

描述:不涉及列的自动生成或更新行为,因此它不会出现在额外属性的列表中。auto_increment列必须是主键或唯一键。一个表只允许一个自增列。---基于一个列给他加上功能(自增功能)

#wai5表id 列已经存在且希望将其设为自增
alter table wai5 modify column age int auto_increment;

# 向wai4表型添加一个新的唯一键自增列
alter table wai4 add column age int(30) auto_increment unique key

 

常见属性

  • auto_increment:用于生成唯一标识值的字段(通常用于主键)。
  • on update CURRENT_TIMESTAMP:自动更新字段(通常用于记录更新时间)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值