登录:mysql -u root -p
查询
查询所有数据:SELECT * FROM <表名>
条件查询:SELECT * FROM <表名> WHERE <条件表达式>
条件表达式可以用AND、OR、NOT,可以用()
查询某些列:SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM ...
别名可以去掉
排序:ORDER BY 列名
列名后面加ASC/DESC 升序降序
分页:LIMIT <M> OFFSET <N>
每页M条记录,从第N条记录开始
聚合查询:COUNT、SUM、AVG、MAX、MIN
分组: GROUP BY
多表查询:SELECT * FROM <表1> <表2>
表一M条记录,表二N条记录,返回M*N条记录,小心使用
连接查询:把其他表连接在主表结果集上 https://www.liaoxuefeng.com/wiki/1177760294764384/1179610888796448
修改数据
插入:INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
更新:UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;
将WHERE搜索的值改为
删除:DELETE FROM <表名> WHERE ...;
实用
插入或替换(已存在就删除原纪录):
REPLACE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
插入或更新(已存在就更新原纪录):
INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99) ON DUPLICATE KEY UPDATE name='小明', gender='F', score=99;
插入或忽略(已存在就啥也不干):
INSERT IGNORE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
快照(复制一份当前表的数据到新表):
-- 对class_id=1的记录进行快照,并存储为新表students_of_class1:
CREATE TABLE students_of_class1 SELECT * FROM students WHERE class_id=1;
强制实用指定索引(系统不一定选择最合适的):
--索引idx_class_id必须存在
SELECT * FROM students FORCE INDEX (idx_class_id) WHERE class_id = 1 ORDER BY id DESC;
管理MySQL
库:
列出所有数据库: SHOW DATABASES;
创建库:CREATE DATABASE test;
删除库:DROP DATABASE test;
切换库:USE test;
表:
列出所有表:SHOW TABLES;
查看表的结构:DESC students;
创建表:CREATE TABLE;
删除表:DROP TABLE;
列:
新增列:ALTER TABLE students ADD COLUMN birth VARCHAR(10) NOT NULL;
修改列名和类型:ALTER TABLE students CHANGE COLUMN birth birthday VARCHAR(20) NOT NULL;
删除列:ALTER TABLE students DROP COLUMN birthday;