(三)数据表的基本操作

1.1创建数据表

数据表属于数据库,在创建数据表之前要先指定操作的是哪个数据库。这时需要用到数据库的使用(切换)命令

USE 数据库名;

1.1.1创建数据表语句

CREATE TABLE 表名

在这里插入图片描述
其中,名称不可使用关键字。如果创建多个列(字段),要用逗号隔开。
在这里插入图片描述
1.1.2查看数据表

SHOW TABLES;

在使用这条命令之前必须要先指定数据库,显示出这个数据库中有哪些数据表。
在这里插入图片描述

1.2使用约束

1.2.1使用主键约束
主键可以为一列或者多列的组合,用来标识唯一的一条记录
主键约束要求主键类数据唯一,并且不能有为空值

(1)单字段主键:可以在定义列的时候指定主键或者在定义完所有列之后指定主键

1.1在定义列的时候同时指定主键约束

字段名 数据类型 PRIMARY KEY [默认值]

在这里插入图片描述

1.2在定义完所列之后指定主键约束(可以设置约束名)

[CONSTRAINT 约束名] PRIMARY KEY (字段名)//()不可省略

在这里插入图片描述
在这里插入图片描述
所以,关键字CONSTRAINT可以创建约束名

1.3多字段联合主键
只能在定义完所列之后指定主键约束,可以使用CONSTRAINT关键词创建约束名,也可以不创建

[CONSTRAINT 约束名] PRIMARY KEY (字段1,字段2,字段3....) //()不可省略 字段名用“,”隔开

在这里插入图片描述
在这里插入图片描述

1.2.2使用外键约束
外键是用来在两个表的数据之间建立链接,它可以是一列或者多列,一个表可以一个或者多个外键,外键对应的是参照完整性,一个表的外键可以为空值,如果不为空,则每一个表的外键值必须等于另外一个表的主键的某个值.
外键:可以不是本表的主键,但对应另外一个表的主键。

外键的作用:保证数据的完整性,一致性。定义外键后,不允许删除在另一个表中具有关联关系的行。

主表:对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表;
从表:对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表;

创建外键约束的语法

[CONSTRAINT 外键约束名] FOREIGN KEY (外键字段名1,外键字段名2...)	REFERENCES 主表名 (主键字段名1,主键字段名2...)

提示:外键字段名1和主键字段名1的数据类型必须相同;外键字段名2和主键字段名2的数据类型必须相同

提示:关联指的是在关系型数据库中,相关表之间的联系,是通过相同或相容的属性或属性组来表示的。从表的外键必须是主表的主键,且关联字段数据类型必须匹配,如果不同,则创建从表的时候会报错。
一个外键字段只能对应一个主键字段,二个外键只能对应二个主键字段,以此类推。

在这里插入图片描述
提示:在字表中,一个字段可以既是主键又是外键。
外键约束是不能跨引擎使用的。
MySQL支持多种存储引擎,每一个表都可以指定不同的存储引擎。 但是外键约束是用来保证数据参照完整性的,如果需要关联外键,两个表却使用了不同的存储引擎,则这些表是不能创建外键约束的。

1.2.3使用非空约束
非空约束指字段的值不能为空。对于使用了非空约束的字段,如果用户再添加数据的时候没有指定值,数据库系统会报错。
语法如下:

字段名 数据类型 not null

注意非空约束只能在创建完每列之后添加,不能再创建完所有字段后使用CONSTRAINT关键词的方法添加。

1.2.4使用唯一性约束
要求该列唯一,允许为空,但只能出现一个空值,唯一约束可以确保一列或者几列不出现重复值,可以被更新
1.1在定义列之后直接指定唯一性约束,语法:

字段名 数据类型 UNIQUE

在这里插入图片描述
1.2 在定义完所有列之后指定唯一性约束,语法

[CONSTRAINT 约束名] UNIQUE (字段名,字段名...)

在这里插入图片描述

提示:如果在一个表中设置多个唯一性约束,要以多个字段为一个单位来判断是否重复。
在这里插入图片描述

UNIQUE和PRIMARY KEY的区别

一个表中可以多个字段被声明为UNIQUE,但是只能有一个PRIMARY KEY声明(多字段联合主键 也是 一个主键)。
声明为PRIMARY KEY的类不允许有空值,但是声明为UNIQUE的列可以有一个空值。

1.2.5使用默认约束
默认约束用来指定某一字段的默认值,如果新的一条记录没有给这个字段赋值,那么将自动为这个字段赋予默认值。
默认约束语法:

字段名 数据类型 DEFAULT 默认值

在这里插入图片描述
只能在定义每一列之后添加默认约束。

1.2.6 设置表的属性自动增加
如果希望每增加新纪录时,系统自动生成字段的主键值,则可以通过AUTO_INCREMENT关键词来完成
在MySQL中AUTO_INCREMENT的默认初始值为1,每增加一条新纪录,字段值自动加1
一个表只能有一个字段使用AUTO_INCREMENT,且该字段必须为主键的一部分AUTO_INCREMENT约束的字段可以是任何整数类型

自动增加语法

字段名 数据类型 AUTO_INCREMENT

例如指定员工的id每次添加都自动加1

在这里插入图片描述
之后这里执行insert语句

INSERT INTO tb_emp11 (name,salary)
VALUES('MIKE',5000),('BOB',8700),('TOM',4000);

提示这里的INSERT语句并不是SQL标准语句,只能在MySQL数据库中使用。
之后使用SELECT命令查看记录

SELECT*FROM 数据表名

在这里插入图片描述
如图所示,添加数据的时候,并没有添加id字段的内容,系统自动从1开始,每次添加新纪录时,该值自动加1。

默认的,AUTO_INCREMENT的初始值为1,每增加一条新纪录,自动逐个加1。
但是有的时候还可以,手动插入第一条记录的自增字段值,之后再添加新记录,就会以这个值为初始值,逐个加1。

手动插入第一个自增字段值 22。
在这里插入图片描述
从22的基础上逐个加1
在这里插入图片描述

往往设置唯一性约束的字段也要设置为自动增加

每添加一条新的信息,如果没有输入自增字段的数值,默认从最大数递增加一

2.1查看数据表结构

查看表结构可以使用“DESCRIBE”和“SHOW CREATE TABLE 表名”两种方法。

2.1.1查看表基本结构语句DESCRIBE
DESCRIBE/DESC可以查看字段名、字段数据类型、是否为主键、是否有默认值等。语法如下

DESCRIBE 表名;
可以简写为 
DESC 表名;

在这里插入图片描述
其中
Null:是否允许储存空值
Key:是否已编制索引。PRI表示是主键的一部分,NUI表示唯一性约束,MUL表示在列中某个给定值允许出现多少次
Extra:例如AUTO_INCREMENT等。

2.1.2查看表详细结构信息SHOW CREATE TABLE
该命名用来显示创建表时的CREATE TABLE语句,语法为

SHOW CREATE TABLE 表名 \G	//加上\G后结果更加直观

此命令可以返回结构信息,存储引擎信息,字符编码等。
在这里插入图片描述

3.1修改数据表

修改数据表指的是 修改数据表的结构 ,MySQL中ALTER TABLE语句来修改表。
常用的修改表的操作有:1.修改表名。2.修改字段数据类型或字段名。3.增加删除字段。4.修改字段的排列位置。5.更改表的存储引擎。6.删除表的外键约束等

3.1.1 修改表名

修改表名的语法

ALTER TABLE 表名 RENAME [TO] 新表名;

在这里插入图片描述
注意:修改表名不会改变表的结构。

3.1.2修改字段的数据类型

语法如下

ALTER TABLE 表名 MODIFY 字段名 数据类型 [约束];
//表名:需要修改的字段所在的表的名字
//字段名:需要修改的字段名
//数据类型:需要修改为什么数据类型

在这里插入图片描述

3.1.3修改字段名

语法如下

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型

如果不需要更改该字段的数据类型,可以将数据类型设置为和之前一样,但是不能为空

在这里插入图片描述

提示
CHANGE也可以只修改数据类型,实现和MODIFY同样的效果。只需要将“新字段名”和“旧字段名”设置为相同,只改变新数据类型即可。
在这里插入图片描述

注意
由于不同类型的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响原来的数据信息,所以,当数据表中已经有数据的时候,不要轻易修改数据类型。

3.1.4添加字段
一个完整的字段包括 字段名,数据类型,完整性约束。

语法如下

ALTER TABLE 表名 ADD 新字段名 数据类型 [约束类型] [FIRST | AFTER 已存在字段名]

FIRST为可选 作用为将新字段设置为表的一个字段。
AFTER为可选 作用为将新字段放到该已存在字段的后一个。
如果没有这两个参数,将默认放到表中的最后一个字段。

例1:
默认在添加一个字段在最后。
在这里插入图片描述

例2:
在表的第一列添加一个字段。
在这里插入图片描述
例3:
在表的指定列后添加一个字段。
在这里插入图片描述
3.1.5 删除字段

语法如下

ALTER TABLE 表名 DROP 需要删除的字段名;

例:删除表中的height字段
在这里插入图片描述
提示:此方法只能一次删除一个字段。
在这里插入图片描述
3.1.6改变表的排序位置

表的结构并不是不可以改变的
语法如下

ALTER TABLE 表名 MODIFY 字段1名 数据类型 [可以添加约束条件]  FIRST | AFTER 字段2名;

字段1 指想要修改的字段名 , 数据类型 是字段1的数据类型。
FIRST为调整为第一个字段,AFTER 字段2 为调整到字段2之后的位置

例1:
修改字段为第一个字段
在这里插入图片描述
例2:
修改字段为指定字段之后
在这里插入图片描述
另外注意:
此命令可以在调整字段位置的时候,也可以同时改变字段的数据类型
在这里插入图片描述
3.1.7改变表的存储引擎
MySQL数据库中可以根据自己的需要来选择不同的储存引擎,甚至可以为每一张表选择储存引擎。
改变表储存引擎的语句如下

ALTER TABLE 表名 ENGINE=更改后的存储引擎名;

我们先来查看这个数据表本身的储存引擎,用命令:

SHOW CREATE TABLE 表名;

在这里插入图片描述
3.1.8删除表的外键约束
表中的外键如果不需要可以将其删除。外键一旦被删除,就会解除主表和从表的关联
删除外键的语句为

ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;

//外键约束名 指的是CONSTRAINT关键词后面的参数。
在这里插入图片描述
在这里插入图片描述
此时TEST02表的字段deptId作为外键关联到 主表TEST01的主键id上。
删除外键约束:
在这里插入图片描述
外键被删除。

3.1.8添加外键约束
当两个表都已经创建好之后,我们希望让这两个表之间建立外键约束,也可以使用ALTER TABLE语句进行创建。
语法如下

ALTER TABLE 从表名 ADD CONSTRAINT 外键约束名 FOREIGN KEY (从表字段名) REEFERENCES 主表名 (主表字段名);

已经建立好两个没有约束的数据表。
在这里插入图片描述
使用ALTER TABLE语句建立外键约束
在这里插入图片描述
查看从表TEST02的详细情况
在这里插入图片描述

4.1删除数据表

在删除数据表的同时,表中的信息和内容也全都会被删除。

4.1.1删除没有被关联的数据表
使用DROP TABLE可以一次删除一个或多个****没有被其他表关联的数据表。
语法格式如下

DROP TABLE [IF EXISTS] 表1名,表2名...,表n名;

如果要删除的表不存在,则数据库会报出一条ERROR 1051(42S02)…报错
如果添加了参数 IF EXISTS ,在删除数据表,即是数据表不存在,SQL语句也可以顺利执行,但是会发出警告(WARNING)
在这里插入图片描述
此时在使用删除语句删除test03数据表,虽然test03数据表不存在,但是因为使用了IF EXISTS参数,SQL语句仍然会执行,但是会warning
在这里插入图片描述
如果没有使用IF EXISTS参数
在这里插入图片描述
4.1.2删除被其他表关联的数据表

数据表之间存在外键关联的关系下,如果直接删除主表,结果会报出错误。因为这样破坏的表的参照完整性。
如果必须删除这个主表,可以先删除与他关联的字表,在删除从表,只是这样主表和从表两个数据库和他们的信息就全部被删除了。
在有些情况下,需要保留字表内容,单独删除主表,只需要先将关联的表的外键约束取消,然后在单独删除主表

此时,test02表中具有名为names的外键约束,test01位主表。
在这里插入图片描述
直接删除主表:报错
在这里插入图片描述
需要保留字表,删除主表,先删除外键约束
在这里插入图片描述
删除主表test01。
在这里插入图片描述

注意事项

1.当使用DROP命令删除一个数据库或者一个数据表时,不会有任何确认信息提示,一旦执行,数据库或数据表的信息就被删除,如果没有备份,就会产生严重的后果。
使用ALTER TABLE…命令一样如此,因为数据库的改变的无法撤销的
2.外键约束是不能跨引擎使用的。
MySQL支持多种存储引擎,每一个表都可以指定不同的存储引擎。 但是外键约束是用来保证数据参照完整性的,如果需要关联外键,两个表却使用了不同的存储引擎,则这些表是不能创建外键约束的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值