1、数据类型
1.1、整数类型
1.2、小数类型
1.3、字符
1.4、日期类型
date表示日期,默认格式为‘YYYY-MM-DD’; time表示时间,格式为‘HH:ii:ss’; year表示年份; datetime与timestamp是日期和时间的混合类型,格式为’YYYY-MM-DD HH:ii:ss’
2、修改表
2.1、修改表类型
ALTER TABLE 表名 MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
- 修改表 student 的 name 字段,将 varchar(20)改为 varchar(30)
mysql> alter table Student modify name varchar(30);
2.2、增加表字段
ALTER TABLE 表名 ADD [COLUMN] [FIRST | AFTER col_name];
- 表 student 上新增加字段 age,类型为 int(3)
mysql> alter table student add column age int(3);
2.3、删除表字段
ALTER TABLE 表名 DROP [COLUMN] col_name
- 表student删除字段age
mysql> alter table student drop column age;
2.3、字段改名
ALTER TABLE 表名 CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
- 将 sex1 改名为 sex,同时修改字段类型为 int(4)
mysql> alter table student change sex1 sex int(4);
3、面试题
3.1、查询效率优化
使用主键查询或联合索引查询
3.2、一千万条数据的表, 如何分页查询
数据量过大的情况下, limit offset 分页会由于扫描数据太多而越往后查询越慢. 可以配合当前页最后一条ID进行查询, SELECT * FROM T WHERE id > #{ID} LIMIT #{LIMIT} . 当然, 这种情况下ID必须是有序的, 这也是有序ID的好处之一。
3.3、订单表数据量越来越大导致查询缓慢, 如何处理
分库分表. 由于历史订单使用率并不高, 高频的可能只是近期订单, 因此, 将订单表按照时间进行拆分, 根据数据量的大小考虑按月分表或按年分表. 订单ID最好包含时间(如根据雪花算法生成), 此时既能根据订单ID直接获取到订单记录, 也能按照时间进行查询。
3.4、NOW()和 CURRENT_DATE ()有什么区别?
NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒
CURRENT_DATE()仅显示当前年份,月份和日期
3.5、exists与in区别
- 外层小表,内层大表(或者将sql从左到由来看:左面小表,右边大表): exists 比 in 的效率高
- 外层大表,内层小表(或者将sql从左到由来看:左面大表,右边小表): in 比 exists 的效率高