-- 创建一个用户表
create table tb_user(
id bigint(20) not null auto_increment comment '主键',
name varchar(50) comment '用户名',
phone varchar(11) comment '手机号码',
address varchar(255) comment '地址',
hobby varchar(200) comment '兴趣爱号',
version int(1) comment '版本号',
create_time datetime null default current_timestamp comment '添加时间',
modify_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
primary key (id) using btree
)engine=innodb default charset=utf8mb4 comment='用户表';
-- 插入一条数据
insert into tb_user(name,phone,address,hobby) values('sugar','13745678911','上海','01,02,03');
-- 修改一个字段属性大小
alter table tb_user modify hobby varchar(150);
-- 修改一个字段属性名称
alter table tb_user modify hobby favorite_item varchar(150);
-- 给一个字段赋值
update tb_user set phone=13888888888,address ='西安' where name = 'sugar'
-- 删除一个数据(慎用,数据是资源,可以备份一下,备份表)
create table tb_user_copy select * from tb_user;
delete from tb_user_copy where id = 1
-- 给表添加多个字段
alter table tb_user add (field_id bigint(20) default null comment '注释',field_name varchar(100) default null comment '注释');
-- Boolean 值
alter table tb_user add sex bit(1) default b'0' comment '0 男 ,1 女';
alter table tb_user add sex boolean default '0' comment '0 男 ,1 女';
添加索引:
聚合索引
alter table tableName add index `index_name` (`column1`,`column2`(15),`column3`,...);
聚合索引 `index_name` ====> `index_cloumn1_cloumn2_...` (15)===>限制该字段的匹配长度
主键索引
alter table tableName add primary key (`column`);
唯一索引
alter table tableName add unique (`column`);
语法:
alter table 表名 add 索引别名 (索引字段[单个或者多个,逗号隔开])
alter table table_name add index `index_name`(`index_column`);
alter table table_name add unique `unique_name`(`unique_column`);
---慢sql 捕捉
select * from information_schema.processlist where info is not null;
--分库分环境好多表加新字段,验证是否脚本加成功
select a.TABLE_SCHEMA, a.table_name,a.column_name,b.column_name from
(select * from information_schema.columns where table_name like 'tb_user%' and column_name = '主键' group by TABLE_SCHEMA, TABLE_NAME )a left join
(select * from information_schema.columns where table_name like 'tb_user%' and column_name = 'add field' group by TABLE_SCHEMA, TABLE_NAME)b
on b.table_name = a.table_name;
-- 进公司不知道表在那个库,只有一个数据库服务
select *
from information_schema.tables
where table_name like 'table_%'
# 查询表数据
show table status like 'table_name';
# 某个库所有表
select table_name from information_schema.tables where table_schema ='table_name'
-- 修改默认值
update table_name set column ='A' where column='B';
alter table table_name alter column column set default 'A';
-- excel 函数
$ 最后一行
=CHAR(39)&A2&CHAR(39)&"," 例 A ==> 'A',
--- pgSql 分组后获取 最大最小值
//获取分组后的最大值
first_value(field_f) over (partition by filed_a, field_b, field_c order by field_d desc, id desc)
//获取分组后的最小值
first_value(field_f) over (partition by filed_a, field_b, field_c order by field_d asc, id asc )
建议
遵循3大 范式
- 确保每列保持原子性
- 确保表中的每列都和主键相关
- 确保每列都和主键列直接相关,而不是间接相关
备注:具体还是要根据实际业务出发,才可以设计出适合业务的表结构,3大范式只是参考
创建一个表至少要有几个必须字段:
1.主键
2.创建时间
3.更新时间
4.版本号
5.业务字段