MySQL——表的创建和管理

112 阅读4分钟

「这是我参与2022首次更文挑战的第32天,活动详情查看:2022首次更文挑战

1、表的创建

用代码创建

-- 注意点:英文括号()   表的名称和字段尽量用``
-- AUTO_INCREMENT 自增 一个表只能有一个自增键,而且必须是主键
-- 字符串用单引号括起来
-- 所有的语句后面加,(英文的)  最后一个不用加
-- PRIMARY KEY 设置主键,一个表一般只有唯一的主键
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR (50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 拓展
SHOW CREATE DATABASE school -- 查看数据库的语句
SHOW CREATE TABLE student -- 查看表的语句 
DESC student  -- 显示表的结构

在这里插入图片描述

基于现有的表创建,同时导入数据

create table myemp2 as select employee_id,last_name,salary from employees;

在这里插入图片描述

2、表的修改

修改表名

-- 修改表名 
-- 方式一:ALTER TABLE 原表名 RENAME AS 现表名
ALTER TABLE teacher RENAME AS teacher1
-- 方式二:
rename table teacher1 to teacher3

添加表的字段

要向表中添加一个或多个列,需要执行以下步骤:

  • 首先,在ALTER TABLE子句之后指定要添加table_name,表示列所在的表。
  • 其次,将新列定义放在ADD子句之后。 如果要在表中指定新列的顺序,可以使用可选子句AFTER existing_column
-- 增加表的字段,默认添加到表的最后一个位置   ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE myemp2 
ADD qq INT(11)
表
-- 添加多个字段,以下语句一次将fee和max_limit列添加到myemp2表
ALTER TABLE myemp2 
ADD fee NUMERIC (10, 2) AFTER qq,
ADD max_limit INT AFTER fee;

在这里插入图片描述

修改表的字段

-- 修改表的字段(1.重命名 2.修改约束)

-- 修改约束  ALTER TABLE 表名 MODIFY 字段 列属性
ALTER TABLE teacher1 MODIFY age VARCHAR(11)

-- 字段重命名  把qq重命名为weixin,还把int类型变为varchar类型  ALTER TABLE 表名 CHANGE 原字段名 现字段名 列属性
ALTER TABLE teacher1 CHANGE qq weixin VARCHAR(10)

结论 :modify用来修改约束和类型,change用来字段重命名

删除字段

当表的字段已过时且未被任何其他数据库对象(如触发器,视图,存储过程和存储过程)使用时,需要将其从表中删除。

要删除一个或多个列,使用以下语法:

-- 删除表的字段  ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP afe

ALTER TABLE table_name
DROP column_name,
DROP colum_name,
...

3、表的删除

随着数据库在应用过程不断的数据增加,有时需要从数据库中删除过时的冗余表或不用的表。 要删除表,可使用DROP TABLE语句。

以下是DROP TABLE语句的语法。

DROP TABLE IF EXISTS table_name;

要删除现有表,可在DROP TABLE子句后指定表的名称。 如果要删除的表不存在,则数据库系统会发出错误。

DROP TABLE语句允许同时删除多个表。 为此,需要在DROP TABLE子句之后指定逗号分隔表名称的列表,如下所示:

DROP TABLE table_name1,table_name2,...;

然后,数据库系统逐个删除指定的所有表。

4、表的清空

使用DROP TABLE删除表时,不光删除表的结构,还会把表中的数据删除。

要清空表中的所有数据,使用TRUNCATE TABLE语句:

TRUNCATE TABLE table_name;

MySQL 允许直接省略TABLE关键字,因此在MySQL中TRUNCATE TABLE语句用法如下:

-- 删除一个表的数据
TRUNCATE table_name;

-- 删除多个表的数据
TRUNCATE table_name1, table_name2, ...;

使用实例

TRUNCATE myemp3; -- 删除数据
select  * from myemp3 -- 查看数据

在这里插入图片描述

TRUNCATE 和 DELETE 的区别

逻辑上,TRUNCATE TABLE语句和不带WHERE子句的DELETE语句(delete from myemp3)提供了从表中删除所有数据的相同效果。 但是,它们确实存在一些差别:

  • 使用DELETE语句时,数据库系统会记录操作。 通过一些努力,可以回滚已删除的数据。 但是,当使用TRUNCATE TABLE语句时,除非在尚未提交的事务中使用它,否则无法回滚。
  • 要从外键约束引用的表中删除数据,不能使用TRUNCATE TABLE语句。 在这种情况下,必须使用DELETE语句。
  • 如果表具有与之关联的触发器,则TRUNCATE TABLE语句不会触发delete触发器。
  • 执行TRUNCATE TABLE语句后,某些数据库系统会将自动增量列(或标识,序列等)的值重置为其起始值。 DELETE语句不是这种情况。
  • 带有WHERE子句的DELETE语句从表中删除部分数据,而TRUNCATE TABLE语句始终从表中删除所有数据。