找回密码
 立即注册
快捷导航

[数据库] DDL 创建和管理(删、改)表

[复制链接]
镖师 2023-7-12 02:33:11 | 显示全部楼层
本帖最后由 镖师 于 2023-7-12 15:21 编辑

创建/使用数据库
create database 数据库名;
create database 数据库名 character set 字符集;
create database if not exists 数据库名;    -- 判断数据库是否存在,不存在则创建;

show databases;    -- 查看当前所有的数据库
select database();    -- 查看当前正在使用的数据库
show tables from 数据库名;    -- 查看指定库下所有的表
show create database 数据库名;    -- 查看数据库的创建信息

use 数据库名;    -- 使用/切换 数据库

修改数据库
更改字符集
alter database 数据库名 character set 字符集;     -- 字符集包括 gbk utf8等

删除数据库
drop database 数据库名;
drop database if exists 数据库名;    -- 推荐

创建表



crreate table IF NOT EXISTS emp (
    emp_id INT auto_increment,    -- int类型,自增
    emp_name varchar(20),
    salary double,
    birthday date,
    primary key (emp_id)    -- 主键
);
desc emp;

查看表结构
MySQL支持使用 DESCRIBE/DESC 语句查看数据表结构,也支持使用 SHOW CREATE TABLE 语句查看数据表结构。
SHOW CREATE TABLE 表名;
使用 SHOW CREATE TABLE 语句不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码。

修改表
  • 向已有的表中添加列
  • 修改现有表中的列(包括 数据类型、长度、默认值)
  • 删除现有表中的列
  • 重命名现有表中的列

追加一个列
alter table 表名 add [column] 字段名 字段类型 [first | after 字段名];
alter table dept80 add job_id varchat(15);

修改一个列
alter table 表名 modify [column] 字段名1 字段类型 [default 默认值] [first | after 字段名2];
alter table dept80 modify last_name varchar(30);
alter table dept80 modify salary double(9, 2) default 1000;

重命名一个列
alter table 表名 change [column] 旧列名 新列名 新数据类型;
alter table dept80 change department_name dept_name varchar(15);

删除一个列
alter table 表名 drop [column] 字段名;
alter table dept80 drop column job_id;

重命名表
方式1:rename table emp to myemp;
方式2:alter table dept rename [to] detail_dept;

删除表
- 在MySQL中,当一张数据表`没有与其他任何数据表形成关联关系`时,可以将当前数据表直接删除。
- 数据和结构都被删除
- 所有正在运行的相关事务被提交
- 所有相关索引被删除
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];
- DROP TABLE 语句 **不能回滚**

清空表
TRUNCATE TABLE detail_dept;
TRUNCATE语句**不能回滚**,而使用 DELETE 语句删除数据,可以回滚

DCL(TCL)中的 COMMIT 和 ROLLBACK

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

记住:
DDL 的所有操作,一旦执行,就不可以回滚;
DML 的操作默认情况下,一旦执行,也是不可以回滚的,但是如果在执行DML前,执行了 SET autocommit = false,则执行的DML操作就可以实现回滚
commit;
set autocommit = false;
delete from 表名;
ROLLBack;
TRUNCATE TABLE 不能回滚、Delete From 能回滚,生产上,要用哪个?
不建议使用 TRUNCATE TABLE ,虽然它速度快、占用系统资源少;

阿里开发规范:
【参考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。
说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-10-30 10:26

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表