常用容易忘记的sql表结构相关语句

建表:

-- sql:
create table tableName(
    column dataType [constraint],
    .....
    [index indexName(column1,...,columnN)]
);
    
-- 例子
-- MySQL
create table if not exists `user`(
    `id` bigint primary key comment 'ID 主键',
    `account` varchar(256) not null comment '账号,不为空',
    `userName` varchar(256) not null comment '用户名 不为空',
    `gender` tinyint default 0 comment '性别,0未选 默认,1女性,2男性',
    index accountIndex(account) comment '账号索引' -- mysql5.5及以上可以用comment
) engine=InnoDB DEFAULT CHARSET=utf8mb4 comment '用户表'; -- 默认字符集utf8m64,默认引擎InnoDB
-- 上面的写法是MySQL的,Oracle的不一样

-- Oracle
create table if not exists "user"(
    "id" bigint primary key,
    "account" varchar(256) not null,
    "userName" varchar(256) not null,
    "gender" tinyint default 0 comment,
    index accountIndex(account) comment '账号索引'
);

-- 索引需要单独创建
CREATE INDEX accountIndex ON "user"("account");

-- 注释必须独立编写
COMMENT ON TABLE "user" IS '用户表';
COMMENT ON COLUMN "user"."id" IS 'ID 主键';
COMMENT ON COLUMN "user"."account" IS '账号,不为空';
-- Oracle不支持index加comment

查看表结构:

show create table tableName[\G];
-- 或者
describe tableName;

查看表索引:

show index from tableName [from dbname] [where condition]
-- where index_name like acc*

修改表描述:

alter table tabaleName RENAME [TO | AS] new_tbl_name;

添加新字段:

ADD [COLUMN] (col_name column_definition,...)

修改字段:

ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name column_definition;

修改字段属性:

alter table tableName MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name];

添加约束():

alter table tableName
ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name] [index_type] (key_part,...)
 [index_option] ...
 | ADD [CONSTRAINT [symbol]] FOREIGN KEY
 [index_name] (col_name,...)
 reference_definition

可以添加命名的约束:

primary key、foreign key、check、unique。

# 添加唯一约束
alter table tableName
ADD CONSTRAINT constrant_column_name UNIQUE KEY uk_name(column_name)
# []中可以不写,会有默认命名uk_product_id
alter table cart
ADD [CONSTRAINT uk_product_id] UNIQUE KEY [unique_product_id] (product_id);

添加其他约束:用修改字段属性的SQL,在末尾加上null,default。

# not null可以用其他的要求替代
alter table tableName MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] NOT NULL;
# 添加not null、default或者修改列类型
alter table cart MODIFY last_update_datetime datetime NOT null DEFAULT CURRENT_TIMESTAMP;

查询MySQL中各种类型的约束:例如unique类型

SELECT CONSTRAINT_NAME
FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = 'db_name'
  AND TABLE_NAME = 'tableName'
  AND CONSTRAINT_TYPE = 'UNIQUE';

mysql5.7:

13.1.8 ALTER TABLE Statement

 

posted @ 2026-03-18 12:26  曦灰  阅读(21)  评论(0)    收藏  举报