MySQL学习-操作表

116 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

前言

上篇我们学习了MySQL的常见数据类型与如何创建表。有兴趣的小伙伴可以阅读(# MySQL学习-数据类型与创建表)。
下面学习MySQL的修改,重命名,删除,清空表。

修改表

上一节创建了数据表myemp1。

CREATE TABLE IF NOT EXISTS myemp1(
id INT,
name VARCHAR(15),
hire_date DATE
);

下面以myemp1为基础修改。

修改表使用ALTER TABLE

添加一个字段

方式一:

ALTER TABLE myemp1 ADD salary DOUBLE(10, 2);表示小数点2位,共10位。

默认添加到表中的最后一个字段的位置。

方式二:

ALTER TABLE myemp1 ADD phone_number VARCHAR(20) FIRST;

表示添加到表中的第一位置。

方式三:

ALTER TABLE myemp1 ADD email VARCHAR(50) AFTER name;

表示添加到表中字段name的后面。

修改一个字段:数据类型,长度

一般开发中,不常修改数据类型,修改长度比较多。

ALTER TABLE myemp1 MODIFY name VARCHAR(25);

也可以修改默认值。

ALTER TABLE myemp1 MODIFY name VARCHAR(35) DEFAULT 'xxx';

重命名一个字段

ALTER TABLE myemp1 CHANGE salary vag_sal DOUBLE(10, 2);

删除一个字段

ALTER TABLE myemp1 DROP COLUMN email;

重命名表

方式一: RENAME

RENAME TABLE myemp1 TO myemp11;

方式一: ALTER ... RENAME
ALTER TABLE myemp1 RENAME TO myemp11;

删除表

不光将表结构删除掉,同时表中的数据也删除掉,释放表空间。 DROP TABLE IF EXISTS myemp2;

清空表

清空表,表示清空表中的所有数据,但是表结构保留。

TRUNCATE TABLE myemp1;

DCL中的COMMIT和ROLLBACK

COMMIT: 提交数据。一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚。
ROLLBACK: 回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。

对比TRUNCATE TABLE和DELETE FROM

相同点: 都可以实现对表中所有数据的删除,同时保留表结构。
不同点:

  • TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
  • DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚的。

DDL和DML的说明

  1. DDL的操作一旦执行,就不可回滚。指令SET autocommit = FALSE对DDL操作失效。(因为在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响的。)
  2. DML的操作默认情况,一旦执行,也是不可回滚。但是,如果在执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以实现回滚。

示例一

DELETE FROM

SET autocommit = FALSE;
DELETE FROM myemp3;

这时执行,发现数据没有数据了。

ROLLBACK;

这时执行,再查询数据,可以发现又有数据了。

示例二

TRUNCATE TABLE

SET autocommit = FALSE;
TRUNCATE TABLE myemp3;

这时执行,发现数据没有数据了。

ROLLBACK;

这时执行,再查询数据,可以发现还是没有数据。TRUNCATE TABLE不可以回滚。

今天先学习到这里,明天继续。