常用容易忘记的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

浙公网安备 33010602011771号