表的创建、修改与删除
创建表:
CREATE TABLE
[IF NOT EXISTS] tb_name -- 不存在才创建,存在就跳过
(column_name1 data_type1 -- 列名和类型必选
[ PRIMARY KEY -- 可选的约束,主键
FOREIGN KEY -- 外键,引用其他表的键值
AUTO_INCREMENT -- 自增ID
COMMENT comment -- 列注释(评论)
DEFAULT default_value -- 默认值
UNIQUE -- 唯一性约束,不允许两条记录该列值相同
NOT NULL -- 该列非空
], ...
)
[CHARACTER SET charset] -- 字符集编码
[COLLATE collate_value] -- 列排序和比较时的规则(是否区分大小写等)
从另一张表复制表结构创建表:
CREATE TABLE tb_name
LIKE tb_name_old
从另一张表的查询结果创建表:
CREATE TABLE tb_name
AS SELECT * FROM tb_name_old
WHERE options
修改表:
ALTER TABLE 表名
#修改选项
{ ADD COLUMN <列名> <类型> -- 增加列
| CHANGE COLUMN <旧列名> <新列名> <新列类型> -- 修改列名或类型
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT } -- 修改/删除 列的默认值
| MODIFY COLUMN <列名> <类型> -- 修改列类型
| DROP COLUMN <列名> -- 删除列
| RENAME TO <新表名> -- 修改表名
| CHARACTER SET <字符集名> -- 修改字符集
| COLLATE <校对规则名> } -- 修改校对规则(比较和排序时用到)
删除表:
DROP TABLE
[IF EXISTS] 表名1 [,表名2]
索引的创建与删除
1.1 create方式创建索引:
CREATE
[UNIQUE -- 唯一索引
|FULLTEXT -- 全文索引
] INDEX index_name ON table_name -- 不指定唯一或全文时默认普通索引
(column1[(length) [DESC|ASC]] [,column2,...]) -- 可以对多列建立组合索引
- 普通索引:
CREATE INDEX
- 唯一索引:
CREATE UNIQUE INDEX
- 全文索引:
CREATE FULLTEXT INDEX
1.2 alter方式创建索引:
ALTER TABLE tb_name
ADD [UNIQUE | FULLTEXT] [INDEX] index_content(content)
2.1 drop方式删除索引:
DROP INDEX <索引名> ON <表名>
2.2 alter方式删除索引:
ALTER TABLE <表名> DROP INDEX <索引名>
3.1 索引的使用:
- 索引使用时满足最左前缀匹配原则,即对于组合索引(col1, col2),在不考虑引擎优化时,条件必须是col1在前col2在后,或者只使用col1,索引才会生效;
- 索引不包含有NULL值的列
- 一个查询只使用一次索引,where中如果使用了索引,order by就不会使用
- like做字段比较时只有前缀确定时才会使用索引
聚合函数
这里就只记录了一下 截断平均值
(和-最大值-最小值) / (总个数-2): (sum(score) - max(score) - min(score)) / (count(score) - 2)
ROUDN(xxx, 1) 表示取一位小数
分组查询
group_concat
其完整的语法如下
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
(看完题解我仍觉得自己是个傻子)
Reference
题目及学习网站:牛客网