从零开始学习MySQL(基础命令汇总)
数据库概述
理解数据库
- RDBMS=管理员(manager)+仓库(database)
- 仓库(database)=N个table
- table=表结构+表记录
sql语法
- sql语句可以单行或多行书写,以分号结尾;
- 使用空格和缩进增强可读性;
- mysql不区分大小写,建议使用大写。
sql语句分类
-
DDL:数据定义语言
对数据库或表的结构进行操作
-
DML:数据操作语言
对标的记录进行更新
-
DCL:数据控制语言
对用户的创建和授权
-
DQL:数据查询语言
对表的记录进行查询
DDL
数据库
- 查看所有数据库:SHOW DATABASES;
- 切换数据库:USE 数据库名称
- 创建数据库:CREATE DATABASE 数据库名称;
- 删除数据库:DROP DATABASE 数据库名称;
- 修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8;
数据类型
-
int 整型
-
double 浮点型
double(5,2)表示最多五位,且有两位小数,即最大值为999.99;
-
decimal 浮点型
钱方面用这个,不会造成精度缺失
-
char 固定长度字符串(最大255)
char(255)数据长度不足指定长度,则自动补全。(固定长度的数据用固长<身份证号码,时间>)
-
varchar 可变长度字符串类型(最大65535)
浪费一个字节记录长度
-
text 字符串类型(mySQL独有,标准的叫clob)
- tinytext_ 2 8 − 1 2^8-1 28−1
- text_ 2 16 − 1 2^{16}-1 216−1
- mediumtext_ 2 24 − 1 2^{24}-1 224−1
- longtext_ 2 32 − 1 2^{32}-1 232−1
-
blob 字节类型
- tinyblob_ 2 8 − 1 2^8-1 28−1
- blob_ 2 16 − 1 2^{16}-1 216−1
- mediumblob_ 2 24 − 1 2^{24}-1 224−1
- longblob_ 2 32 − 1 2^{32}-1 232−1 (4G)
-
data 日期类型
yyyy-MM-dd
-
time 时间类型
hh:mm:ss
-
timestamp 时间戳类型
yyyy-MM-dd hh:mm:ss
表
实例中表名称为stu
-
创建表
mysql> CREATE TABLE stu(
-> name varchar(50),
-> age int,
-> number char(11)
-> ); -
查看当前数据库中所有表名称
SHOW TABLES;
-
查看表结构
DESC stu;
-
删除表
DROP stu;
-
修改表
- 添加列
ALTER TABLE 表名
ADD(
列名 数据类型
);
- 修改列类型
ALTER TABLE 表名
MODIFY 列名 数据类型
- 删除列
ALTER TABLE 表名
DROP 列名
- 修改表名称
ALTER TABLE 表名
RENAME TO 表名
DML
-
插入数据(字符串使用单引号)
//指定列插入
INSERT INTO stu(
name,age,num
)
VALUES(
‘张三’, 18,‘1806020224’
);
//插入所有列(按照顺序插入)
INSERT INTO stu VALUES(
‘张三’, 18,‘1806020224’
);
-
修改数据
运算符:=、!=、<>、<=、>=、IN…、BETWEEN … AND…、IS NULL、NOT、OR、AND、
update stu_1 set age=18, name=‘cql’;//全改
update stu_1 set age=18 where name=‘xhx’;
update stu_1 set age=18 where name=‘ldl’ or num=‘1004’;
update stu_1 set age=age+1 where age>=20 and age<=30;
update stu_1 set age=age+1 where age between 20 and 40;
update stu_1 set age=36 where name in (‘name’,‘lisi’);
update stu_1 set age=age+1 where not age between 20 and 40;
update stu_1 set age=36 where age is null;//不能是age=null
update stu_1 set age=36 where age is not null;
-
删除数据
DELETE FROM 表名 WHERE name=‘cql’;//删除姓名全为“cql”
DELETE FROM 表名;//表内数据全删
-
查询数据
SELECT * FROM 表名
DCL
-
创建用户
CREATE USER 用户@IP地址 IDENTIFIED BY ‘密码’;
CREATE USER 用户@’%’ IDENTIFIED BY ‘密码’;
-
给用户授权
GRANT SELECT,DELETE,INSERT ON stu.* TO 用户@IP地址;
GRANT ALL ON STU.* 用户@IP地址;
-
撤销授权
REVOKE DELETE ON stu.* FROM 用户@IP地址;
-
查看权限
SHOW GRANTS FOR 用户@IP地址;
-
删除用户
DROP USER 用户@IP地址;
DQL
(select/from/where/group by/having/order by)
-
字段(列)控制
-
查询所有列
SELECT * FROM EMP;
-
查询指定列
SELECT ENAME,SAL FROM EMP;
-
完全重复的记录只查一次
SELECT DISTINCT * FROM EMP;
SELECT DISTINCT job FROM emp;
-
列运算
-
数量类型可以做加、减、乘、除;
SELECT SAL*1.5 FROM EMP;
-
字符串类型可以连续运算//使用concat()函数
SELECT CONCAT(ENAEM, JOB) FROM emp;
-
转换NULL值
SELECT SAL+IFNULL(COMM,0) FROM EMP;
-
给列起名字
SELECT CONCAT(ENAEM, JOB) AS 描述 FROM emp;
SELECT ENAME AS 姓名, JOB AS 工作 FROM EMP;
SELECT ENAME 姓名, JOB 工作 FROM EMP;
-
-
-
条件控制
-
条件查询
SELECT * FROM emp WHERE SAL>100;
SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000;
SELECT * FROM emp WHERE comm IS NOT NULL;
SELECT * FROM emp WHERE job IN (‘SALESMAN’);
-
模糊查询
SELECT * FROM emp WHERE ename LIKE ‘a%’;//%代表n个字符
a%:以a开头的字符串
%a:以a结尾的字符串
%a%:字符串中有a的字符串
a_:‘-’匹配一个字符,查询的是a某
a__:a某某
-
-
排序
-
升序
SELECT * FROM emp ORDER BY sal ASC;//ASC可以省略
SELECT * FROM emp ORDER BY sal ASC, comm DESC;//先依据sal升序排序,如果sal相等则比较comm进行降序排序
-
降序
SELECT * FROM emp ORDER BY sal DESC;//DESC可以省略
-
-
聚合函数
SELECT count(*) from emp;
SELECT sum(SAL) FROM emp;
SELECT max(SAL) FROM emp;
SELECT min(SAL) FROM emp;
SELECT avg(SAL) FROM emp;
-
分组查询
SELECT JOB, COUNT(*) 人数, max(sal) 最大 from emp group by job;
select deptno,count(*) from emp group by deptno;
select deptno,count(*) from emp WHERE sal>1500 group by deptno;
select deptno,count() from emp WHERE sal>1500 group by deptno having count()>=3;//工资大于1500的人进行分组,并显示人数大于等于3的组别
-
LIMIT语句
SELECT * FROM emp LIMIT 0,5;//从第0行开始查五行