高效存储与处理这些数据才是核心!数据库就是专门存储与处理的!!
MySQL就是大型管理数据的软件,我们要通过SQL语言来操作它
下面我们就把成为合格的MySQL的工程师,分为三个阶段,此博客主要围绕着基础篇展开,后续我也会整理出进阶与运维篇。大家一起努力吧!!
数据库相关概念
名称 | 全称 | 简称 |
---|---|---|
数据库 | 存储数据的仓库,数据是有组织的进行存储 | DataBase (DB) |
数据库管理系统 | 操纵和管理数据库的大型软件 | DataBase Management System (DBMS) |
SQL | 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 | Structured Query Language (SQL) |
MySQL官方提供了两种不同的版本:
双击进入后:
等待安装…
然后next——next…安装完了
注意:使用这种方式时,需要配置PATH环境变量
一般在:C:\Program Files\MySQL\MySQL Server 8.0\bin 然后配置环境变量添加这个路径
关系型数据库(RDMMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
SHOW DATABASES;
SELECT DATABASE();
CREATE DATABASE [IF NOT EXISTS]数据库名[DEFAULT CHARSET字符集] [COLLATE 排序规则];
DROP DATABASE [IF EXISTS] 数据库名;
USE 数据库名;
Enter password: **************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.33 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.01 sec)
mysql>
这几个是自创的
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| test |
| world |
+--------------------+
7 rows in set (0.00 sec)
重复创建错误
mysql> create database test;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id: 11
Current database: *** NONE ***
ERROR 1007 (HY000): Can't create database 'test'; database exists
mysql> create database if not exists test;
Query OK, 1 row affected, 1 warning (0.00 sec)
删除
mysql> drop database test;
Query OK, 0 rows affected (0.01 sec)
mysql> drop database test;
ERROR 1008 (HY000): Can't drop database 'test'; database doesn't exist
mysql> drop database if exists test;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Use
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> use test;
Database changed
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
SHOW TABLES;
DESC 表名;
SHOW CREATE TABLE 表名;
show tables
mysql> show tables;
Empty set (0.01 sec)
mysql> use sys;
Database changed
mysql> show tables;
+-----------------------------------------------+
| Tables_in_sys |
+-----------------------------------------------+
| host_summary |
......好多好多......
+-----------------------------------------------+
101 rows in set (0.01 sec)
切换到自己的test中 ,不要在系统中sys中创建 use test;
注意: […] 为可选参数,最后一个字段后面没有逗号
例子:
id | name | age | gender |
---|---|---|---|
1 | 令狐冲 | 28 | 男 |
2 | 风清扬 | 68 | 男 |
3 | 东方不败 | 32 | 男 |
mysql> create table tb_user(
-> id int comment '编号',
-> name varchar(50) comment '姓名',
-> age int comment '年龄',
-> gender varchar(1) comment '性别'
-> ) comment '用户表' ;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tb_user |
+----------------+
1 row in set (0.00 sec)
mysql> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int | YES | | NULL | |
| gender | varchar(1) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
show create table tb_user
mysql> show create table tb_user;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table
|
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_user | CREATE TABLE `tb_user` (
`id` int DEFAULT NULL COMMENT '编号',
`name` varchar(50) DEFAULT NULL COMMENT '姓名',
`age` int DEFAULT NULL COMMENT '年龄',
`gender` varchar(1) DEFAULT NULL COMMENT '性别'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表' |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
上面写的int varchar 是什么啊?
数据库中有三种数据类型:
数值类型
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
TINYINT | 1 byte | (-128, 127) | (0,255) | 小整数值 |
SMALLINT | 2 bytes | (-32768, 32767) | (0, 65535) | 大整数值 |
MEDIUMINT | 3 bytes | (-8388608, 8388607) | (0,16777215) | 大整数值 |
INT或INTEGER | 4 bytes | (-2147483648, 2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8 bytes | (-263, 263-1) | (0, 264-1) | 极大整数值 |
FLOAT | 4 bytes | (-3.402823466 E+38,3.402823466351 E+38) | 0和(1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8 bytes | (-1.7976931348623157 E+308, 1.7976931348623157 E+308) | 0和(2.2250738585072014 E-308, 1.7976931348623157 E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点数) |
其中,TINYINT相当于Java中的byte、SMALLINT相当于Java中的short、BIGINT相当于JAVA中的long
例 123.45
精度为5 标度为2
其中,比如年龄,我们其实就可以选择TINYINT 而且年龄不可能为负数,所有我们选择无符号范围:
age TINYINT UNSIGNED
如果我们要是分数呢,我们选择double即可——最大是100.0 而且只有一位小数,所以:
score double(4,1)
字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16,777,215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16,777,215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4,294,967,295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4,294,967,295 bytes | 极大文本数据 |
char(10)与varchar(10)的区别?
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3 | 1000-01-01至9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59 至838:59:59 | HH: MM: ss | 时间值或持续时间 |
YEAR | 1 | 1901至2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00至9999-12-31 23:59:59 | YYYY-MM-DD HH:MM: ss | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:01至2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
mysql> create table emp(
-> ID int comment '编号',
-> Num Char(10) comment '员工工号',
-> Name Varchar(10) comment '员工姓名',
-> Gender Char(1) comment '性别',
-> Age TINYINT comment '年龄',
-> ID_p Varchar(18) comment '身份证号',
-> ruzhi_Time DATE comment '入职时间'
-> )comment '员工表' ;
Query OK, 0 rows affected (0.01 sec)
mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID | int | YES | | NULL | |
| Num | char(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Gender | char(1) | YES | | NULL | |
| Age | tinyint | YES | | NULL | |
| ID_p | varchar(18) | YES | | NULL | |
| ruzhi_Time | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp |
| tb_user |
+----------------+
2 rows in set (0.00 sec)
添加字段:ALTER TABLE 表名 ADD 字段名类型(长度) [COMMENT 注释] [约束];
mysql> alter table emp add nickname varchar(20) comment '昵称' ;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID | int | YES | | NULL | |
| Num | char(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Gender | char(1) | YES | | NULL | |
| Age | tinyint | YES | | NULL | |
| ID_p | varchar(18) | YES | | NULL | |
| ruzhi_Time | date | YES | | NULL | |
| nickname | varchar(20) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
修改数据类型:ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
mysql> alter table emp modify Num varchar(10);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID | int | YES | | NULL | |
| Num | varchar(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Gender | char(1) | YES | | NULL | |
| Age | tinyint | YES | | NULL | |
| ID_p | varchar(18) | YES | | NULL | |
| ruzhi_Time | date | YES | | NULL | |
| nickname | varchar(20) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
修改字段名和字段类型:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
mysql> alter table emp change ID_p IDcard char(18) comment '身份证号' ;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID | int | YES | | NULL | |
| Num | varchar(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Gender | char(1) | YES | | NULL | |
| Age | tinyint | YES | | NULL | |
| IDcard | char(18) | YES | | NULL | |
| ruzhi_Time | date | YES | | NULL | |
| nickname | varchar(20) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
删除字段:ALTER TABLE 表名 DROP 字段名;
mysql> alter table emp drop nickname;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID | int | YES | | NULL | |
| Num | varchar(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Gender | char(1) | YES | | NULL | |
| Age | tinyint | YES | | NULL | |
| IDcard | char(18) | YES | | NULL | |
| ruzhi_Time | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
修改表名:ALTER TABLE 表名 RENAME TO 新表名;
mysql> alter table emp rename to emp_2;
Query OK, 0 rows affected (0.01 sec)
mysql> desc emp;
ERROR 1146 (42S02): Table 'test.emp' doesn't exist
mysql> desc emp_2;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID | int | YES | | NULL | |
| Num | varchar(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Gender | char(1) | YES | | NULL | |
| Age | tinyint | YES | | NULL | |
| IDcard | char(18) | YES | | NULL | |
| ruzhi_Time | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp_2 |
| tb_user |
+----------------+
2 rows in set (0.00 sec)
mysql>
删除表:DROP TABLE [IF EXISTS] 表名;
mysql> drop table if exists tb_user;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp_2 |
+----------------+
1 row in set (0.00 sec)
删除指定表,并重新创建该表:TRUNCATE TABLE 表名;
数据删除,只有表头了
mysql> desc emp_2;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID | int | YES | | NULL | |
| Num | varchar(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Gender | char(1) | YES | | NULL | |
| Age | tinyint | YES | | NULL | |
| IDcard | char(18) | YES | | NULL | |
| ruzhi_Time | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
mysql> truncate table emp_2;
Query OK, 0 rows affected (0.01 sec)
mysql> desc emp_2;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID | int | YES | | NULL | |
| Num | varchar(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Gender | char(1) | YES | | NULL | |
| Age | tinyint | YES | | NULL | |
| IDcard | char(18) | YES | | NULL | |
| ruzhi_Time | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
第一次打开点击DownLoad即可,然后点击testconnection 显示successful即可。
这就是我们之前整的,我们可以清楚的看到层级关系以及数据表头等信息!!!!!
那么怎么在Datagrip中创建建立呢???
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
给指定字段添加数据:INSERT INTO 表名 (字段名1,字段名2...) VALUES (值1,值2, ...);
给全部字段添加数据:INSERT INTO 表名 VALUES (值1,值2, ...);
批量添加数据
INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2...),(值1,值2...),(值1,值2...);
INSERT INTO 表名 VALUES (值1,值2...),(值1,值2...),(值1,值2...);
注意:
添加1
insert into emp_2(id, num, name, gender, age, idcard, ruzhi_time) values (1,'1','帝','男','19','123456789987654321','2000-01-01');
select * from emp_2;
添加2
insert into emp_2 values (2,'2','戈','女','81','123456789987654321','1949-10-01');
必须一一对应!!!
添加3
insert into emp_2 values (3,'3','戈1','女','13','123456789987654321','1949-10-01'),(4,'4','戈2','女','81','123456789987654321','1949-10-01');
DML-修改数据:UPDATE 表名 SET 字段名1 = 值1 ,字段名2 = 值2....[WHERE条件];
注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
更新:
update emp_2 set Name = '老八' where ID = 3;
update emp_2 set Gender = '男',IDcard = '987456321123654789' where ID = 4;
update emp_2 set ruzhi_Time = '1921-07-01';
DELETE FROM 表名 [ WHERE条件]
DELETE FROM emp_2 where ID = 3;
注意:
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
查询关键字:SELECT
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
查询多个字段
SELECT字段1, 字段2, 字段3 FROM 表名;
SELECT * FROM 表名;
设置 别名
SELECT 字段1 [AS别名1], 字段2 [AS别名2] ... FROM表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
练习!!
-- 查询数据 --------------
-- 数据准备
create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
workaddress varchar(50) comment '工作地址',
entrydate date comment '入职时间'
)comment'员工表';
insert into emp (id, workno, name, gender, age, idcard, workaddress, entrydate )
values (1,'1', '柳岩','女',20, '123456789012345678','北京','2000-01-01'),
(2,'2', '张无忌','男',18, '123456789012345670','北京','2005-09-01') ,
(3,'3', '韦一笑','男',38, '123456789712345670','上海','2005-08-01'),
(4,'4', '赵敏','女' ,18,'123456757123845670','北京','2009-12-01') ,
(5,'5', '小昭','女',16, '123456769012345678','上海','2007-07-01'),
(6,'6', '杨逍','男',28, '12345678931234567X','北京','2006-01-01'),
(7,'7', '范瑶','男',40, '123456789212345670', '北京','2005-05-01'),
(8,'8', '黛绮丝','女',38, '123456157123645670','天津', '2015-05-01'),
(9,'9', '范凉凉','女',45, '123156789012345678', '北京', '2010-04-01') ,
(10,'10', '陈友谅','男',53, '123456789012345670','上海', '2011-01-01'),
(11,'11', '张士诚','男' ,55,'123567897123465670','江苏' , '2015-05-01' ) ,
(12,'12', '常遇春','男',88, '123656789012345678', '江苏','2020-11-01') ,
(14,'14', '灭绝','女', 65,'123456719012345670','西安' , '2019-05-01' ),
(15,'15', '胡青牛','男',70, '12345674971234567X','西安','2018-04-01' ),
(16,'16', '周芷若','女' ,18,nuLl, '北京' , '2012-06-01');
-- -------------------------查询需求--------------------------------------
-- 基本查询 --------------
-- 1.查询指定字段name, workno, age返回
select name,workno,age from emp;
-- 2.查询所有字段返回
select *from emp;
-- 3.查询所有员工的工作地址,起别名
select workaddress as '工作地址' from emp;
-- 4. 查询公司员工的上班地址(不要重复)
select distinct workaddress from emp;
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
比较运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<>或!= | 不等于 |
BETWEEN …AND… | 在某个范围之内(含最小、最大值) |
IN(…) | 在in之后的列表中的值,多选一 |
LIKE 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
IS NULL | 是NULL |
逻辑运算符 | 功能 |
---|---|
AND或&& | 并且(多个条件同时成立) |
OR或II | 或者(多个条件任意一个成立) |
NOT或! | 非,不是 |
-- 条件查询-----------------------------------
-- 1.查询年龄等于88的员工
select * from emp where age=88;
-- 2.查询年龄小于20的员工信息
select * from emp where age<20;
-- 3.查询年龄小于等于20的员工信息
select * from emp where age<=20;
-- 4.查询没有身份证好的员工信息
select * from emp where idcard=NULL;
-- 5.查询有身份证号的员工信息
select * from emp where idcard!=NULL;
-- 6.查询年龄不等于88的员工信息
select * from emp where age!=88;
-- 7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息
select * from emp where age<=20&&age>=15;
-- 8.查询性别为女且年龄小于25岁的员工信息
select * from emp where age<=25&&gender = '女';
-- 9.查询年龄等于18或20或40的员工信息
select * from emp where age =18 or age=20 or age=40;
select * from emp where age in(18,20, 40) ;
-- 10.查询姓名为两个字的员工信息
select * from emp where name like '__';
-- 11. 查询身份证号最后一位是X的员工信息
select * from emp where idcard like '%X';
将一列数据作为一个整体,进行纵向计算。(可以对照Excel的功能)
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
SELECT 聚合函数 (字段列表) FROM表名;
-- 聚合函数----------------------------------
-- 1.统计该企业员工数量
select count(id) from emp;
-- 2.统计该企业员工的平均年龄
select avg(age) from emp;
-- 3.统计该企业员工的最大年龄
select max(age) from emp;
-- 4.统计该企业员工的最小年龄
select min(age) from emp;
-- 5.统计西安地区员工年龄之和
select sum(age)from emp where workaddress='西安';
SELECT 字段列表 FROM 表名 [WHERE条件] GROUP BY 分组字段名 [HAVING分组后过滤条件];
where与having区别:
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
判断条件不同: where不能对聚合函数进行判断,而having可以。
-- 分组查询-------------------------------------------
-- 1.根据性别分组,统计男性员工和女性员工的数量
select gender,count(*) from emp group by gender ;
-- 2.根据性别分组,统计男性员工和女性员工的平均年龄
select gender,avg(age) from emp group by gender ;
-- 3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress,count(*) from emp where age<45 group by workaddress having count(*)>3;
注意
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2;
排序方式
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
-- 排序查询-------------------------------------------
-- 1.根据年龄对公司的员工进行升序排序
select * from emp order by age ASC;
-- 2.根据入职时间,对员工进行降序排序
select * from emp order by entrydate DESC ;
-- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select * from emp order by age ASC ,entrydate DESC ;
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
注意
-- 分页查询
-- 1.查询第1页员工数据,每页展示10条记录
select * from emp limit 0,10;
select * from emp limit 10;
-- 2.查询第2页员工数据,每页展示10条记录
select * from emp limit 10,10;
按照需求完成如下DQL语句编写
1.查询年龄为20,21,22,23岁 的员工信息。
2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。
3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
5.查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
-- 按照需求完成如下DQL语句编写----------------------------------------------------
-- 1.查询年龄为20,21,22,23岁 的员工信息。
select * from emp where gender = '女' and age= 20 or age = 21 or age = 22 or age = 23;
-- 2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。
select * from emp where gender = '男' and age between 20 and 40 && name like '___';
-- 3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
select age,count(*) '人数' from emp where age<60 group by age;
-- 4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
select name,age from emp where age<=35 order by age ASC, entrydate DESC ;
-- 5.查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select * from emp where gender = '男'and (age between 20 and 40) order by age ASC, entrydate ASC limit 0,5 ;
DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。
USE mysql;
SELECT * FROM user;
CREATE USER '用户名’@'主机名’ IDENTIFIED BY‘密码' ;
ALTER USER‘用户名'@'主机名’ IDENTIFIED WITH mysqL native_ password BY '新密码’ ;
DROP USER '用户名'@'主机名';
-- 创建用户itcast ,只能够在当前主机LocaLhost访问,密码123456;
create user 'itcast'@'localhost' identified by '123456';
访问权限都是NO
我们仅仅创建了用户,但是没有权限访问数据库
下面我们创建一个任意主机可访问的!
-- 创建用户heima ,可以在任意主机访问该数据库,密码123456 ;
create user 'heima'@'%' identified by '123456';
-- 修改用户heima 的访问密码为1234 ;
alter user 'heima'@'%' identified with mysql_native_password by '1234';
-- 删除itcast@LocaLhost用户
drop user 'itcast'@'localhost';
MySQL中定义了很多种权限,但是常用的就以下几种:
权限 | 说明 |
---|---|
ALL, ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
SHOW GRANTS FOR ‘用户名'@'主机名';
GRANT 权限列表ON 数据库名.表名 TO '用户名’@'主机名';
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
show grants for 'heima'@'%';
grant all on test.* to 'heima'@'%';
revoke all on test.* from 'heima'@'%';