共计 2362 个字符,预计需要花费 6 分钟才能阅读完成。
在安装完数据库后,不管是 Windows 还是 Linux 平台, MySQL 的 sql 命令都大同小异,相关命令都是相同的,每个命令结束后 都以 ; 结尾, 注意在 Windows 平台中表名是不区分大小写的,在 Linux 中是区分的。例如 tl1 与 TL1 在 Linux 中是区分的。为了一致所有的数据库名,表名,列名都采用小写。为了方便简单使用了 sqllog 客户端工具学习。
在安装完数据库后会出现的几个系统数据库:
Mysql 库: 该数据库存储了系统的用户权限信息
In_formation_schema 库: 该数据库存储了一些数据库对象信息。比如用户表信息,列信息,权限信息,字符集信息,分区信息等。
Test 库: 系统自动创建的测试数据库,任何用户都可以使用。
1. 切换数据库
USE test;
2. 查看该数据库下的表
SHOW TABLES;
3. 删除数据库
DROP DATABASE test1;
4. 创建表
基本语法是 CREATE TABLE tableanme (column_name column_type CONSTRAINTS)
CREATE TABLE emp
(ename VARCHAR(10),
hiredate DATE,
sal DECIMAL(10,2),
deptno INT(2));
5. 删除表
DROP TABLE emp;
6. 修改表
— 修改表类型,将 emp 表 ename 字段从 varchar(10) 改为 varchar(20)
ALTER TABLE emp MODIFY ename VARCHAR(20);
— 再查看表架构
DESC emp;
— 增加表字段
ALTER TABLE emp ADD COLUMN age INT(20);
— 再查看表架构
DESC emp;
— 删除表字段
ALTER TABLE emp DROP COLUMN age;
DESC emp;
— 字段改名
ALTER TABLE emp CHANGE deptno deptno1 INT(2);
DESC emp;
— 修改字段的排列顺序,添加字段 birth 放在 ename 下面
ALTER TABLE emp ADD birth DATE AFTER ename;
DESC emp;
— 修改 sal 字段排序,放在最前面
ALTER TABLE emp MODIFY sal DECIMAL(10,2) FIRST;
DESC emp;
7. 修改表名
ALTER TABLE emp RENAME emp1;
8. 插入数据
INSERT INTO emp (ename,sal)VALUES(‘dony’,1000);
— 插入多条
INSERT INTO emp (ename,sal)
VALUES(‘dony01’,1000),(‘dony02’,1000);
9. 更新
UPDATE emp SET sal=4000 WHERE ename=’dony’;
— 更新两个表
UPDATE emp,emp1 SET emp.sal=3000, emp1.sal=3000 WHERE
emp.ename=emp1.ename
10. 删除数据
DELETE FROM emp WHERE emp.ename=’dony02′;
11. 查询
— 查询不重复记录 DISTINCT
SELECT DISTINCT * FROM emp;
— 查询条件 (比较运算符可以是 =,>,<, >=,<=,!=)
SELECT * FROM emp WHERE sal >=3000;
— 排序 ordery desc|asc
SELECT * FROM emp ORDER BY sal DESC;
— 查询前 1 条
SELECT * FROM emp ORDER BY sal LIMIT 1;
— 查询前 3 条,从第 2 条开始
SELECT * FROM emp ORDER BY sal LIMIT 1,3;
12. 聚合
常用的聚合函数 sum(),count(*),max(),min() group by 分类聚合, having 聚合后的结果进行过滤,with rollup 分类聚合后的结果进行汇总
— 查询 GROUP BY
SELECT ename,COUNT(1) FROM emp GROUP BY sal ;
— with rollup
SELECT ename,COUNT(1) FROM emp GROUP BY sal WITH ROLLUP;
— 查询 HAVING
SELECT ename,COUNT(1) FROM emp GROUP BY ename HAVING COUNT(1)>1;
13. 表连接
内连接:两张表中相互匹配的记录,外连接选出不匹配的记录(外连接有分为左连接和右连接)
— 内联接
SELECT * FROM dept,emp WHERE dept.`deptno`=emp.`deptno`;
— 左联接
SELECT * FROM dept LEFT JOIN emp ON dept.`deptno`=emp.`deptno`;
— 右联接
SELECT * FROM dept RIGHT JOIN emp ON dept.`deptno`=emp.`deptno`;
14. 子查询
子查询的关键字主要包括 in、not in、=、!=、exists、not exists
— in 子查询
SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM dept);
— 如果子查询记录数唯一,可以用 =
SELECT * FROM emp WHERE deptno = (SELECT deptno FROM dept LIMIT 1);
15. 记录联合
union 和 union all,union 是将 union all 的结果集合并后在 distinct
SELECT deptno FROM emp
UNION ALL
SELECT deptno FROM dept;
SELECT deptno FROM emp
UNION
SELECT deptno FROM dept;
: