一、DML

1、插入语句

(1)方式一:

insert into 表名(列名,...) values (值1,...)

特点:

  • 插入的值的类型要与列的类型一致或兼容
  • 列的顺序可以调换
  • 列数和值的个数必须一致
  • 可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致

(2)方式二:

insert into 表名 set 列名=值,列名=值,...

2、修改语句

3、删除语句

(1)方式一:

delete from 表名 where 筛选条件

(2)方式二:
删除表的全部数据,不能加where条件

truncate table 表名;

delete和truncate的对比:

  • delete 可以添加where条件,truncate不能加
  • truncate删除,效率高一丢丢
  • 假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始。
  • truncate删除没有返回值,delete删除后会返回删除多少行记录
  • truncate删除不能回滚,delete删除可以回滚

二、DDL

1、库操作

(1)库创建

create database [if not exists]库名;

(2)库修改

rename database books to 新库名;

(3)库删除

drop database [if exists] books;

2、表操作

(1)表创建
语法:

create table 表名(
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    列名 列的类型【(长度) 约束】,
    ...
    列名 列的类型【(长度) 约束】,
)

案例:

CREATE TABLE IF NOT EXISTS `db_grant_right` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT,
    `ab` varchar(50) NOT NULL COMMENT ’描述',
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY index_db_name_grant_project (`ab`)
) COMMENT '表';

(2)表修改

  • 修改列名
alter table 表名 change column 列名 新列名 新类型的类型 ;
  • 修改列的类型或约束
alter table 表名 modify column 列名 新的类型;
  • 添加新列
alter table 表名 add column 列名 类型 约束 after;
  • 删除列
alter table 表名 drop column 列名;
  • 修改表名
alter table 表名 rename to 新表名;

(3)表删除

drop table if exists 表名;

(4)复制

  • 仅仅复制表结构
create table 表名1 like 表名2
  • 复制表的结构 + 数据
create table 表名1 (select * from 表名2);
  • 仅仅复制某些字段
create table 表名1 
select 字段1, 字段2
from 表名2
where 0;

三、alter操作的幂等性

在MySQL中,ALTER TABLE 语句用于修改现有的表结构。然而,不是所有的 ALTER TABLE 操作都是幂等的。幂等性意味着一个操作无论执行多少次,结果都是一样的。

以下是一些常见的 ALTER TABLE 操作以及它们是否具有幂等性的简要说明:

  • 添加列 (ADD COLUMN): 如果列已经存在,这个操作通常会失败(除非使用了IF NOT EXISTS子句,这是MySQL 8.0及更高版本中引入的)。因此不具有幂等性
  • 删除列 (DROP COLUMN): 如果列不存在,这个操作通常会失败。因此不具有幂等性
  • 修改列类型 (MODIFY COLUMN): 如果列已经具有指定的类型,这个操作可能会被视为“无操作”或可能会失败(取决于具体的MySQL版本和配置)。因此不具有幂等性
  • 重命名列 (CHANGE COLUMN): 如果新列名与现有列名相同,并且其他属性也没有变化,这个操作可能是幂等的。但是,如果新列名与现有列名不同,那么它就不是幂等的。因此通常不具有幂等性
  • 添加主键 (ADD PRIMARY KEY): 如果表已经有一个主键,这个操作通常会失败。因此不具有幂等性
  • 删除主键 (DROP PRIMARY KEY): 如果表没有主键,这个操作可能会被视为“无操作”或可能会失败。因此不具有幂等性
  • 添加索引 (ADD INDEX): 如果索引已经存在,这个操作通常会失败(除非使用了IF NOT EXISTS子句)。因此不具有幂等性
    • ALTER TABLE 表名 DROP INDEX 索引名;
  • 删除索引 (DROP INDEX): 如果索引不存在,这个操作通常会失败。因此不具有幂等性
  • 修改表名 (RENAME TABLE): 如果新表名已经存在,这个操作通常会失败。因此不具有幂等性
  • 修改表选项 (如更改存储引擎): 这个操作可能会根据具体的选项和当前表的状态而有所不同。但通常,如果选项已经设置为你尝试设置的值,那么它可能是幂等的。然而,由于其他潜在的影响(如性能、数据兼容性等),这通常不被视为幂等操作。不具有幂等性

需要注意的是,虽然某些操作在某些特定情况下可能是幂等的,但在一般情况下,ALTER TABLE 语句并不被认为是幂等的。因此,在执行这些操作之前,最好先检查表的结构,以确保操作是必要的,并且准备好处理可能出现的错误。

更多推荐