系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
MySQL启动与停止
net start mysql
net stop mysql
客户端连接
方式一:MySQL提供的客户端命令行工具
方式二:系统自带的命令行工具执行指令
mysql [-h 127.0.0.1] [-p 3306] -u root -p
指定IP 指定端口
参数可省,默认连接本机
注意:使用这种方式时,需要配置PATH环境变量
数据模型
dbms为Database Management System数据库管理系统,一个系统包含多个数据库,一个数据库包含多张表,表中存储实际数据
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释:
单行注释:–注释内容 或 # 注释内容(MySQL特有)
多行注释:/注释内容/
SQL分类
一、SQL-DDL语句
DDL-数据库操作
查询
SHOW DATABASES; --查询所有数据
SELECT DATABASES(); --查询当前数据库
创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
--创建itheima数据库,指定默认字符集为utf8mb4
CREATE DATABASE itheima default charset utf8mb4;
删除
DROP DATABASE [IF EXISTS] 数据库名;
--删除test数据库
DROP DATABASE test;
--如果存在test则删除,避免删除不存在报错
DROP DATABASE if exists test;
使用
USE 数据库名;
--使用test数据库
USE test;
--起别名
select * from emp e; //获取emp所有数据并且起别名
DDL-表操作
查询
SHOW TABLES; --查询当前数据库所有表
DESC 表名; --查询表结构
SHOW CREATE TABLE 表名; --查询指定表的建表语句
创建
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段2 字段2类型[COMMENT 字段2注释],
字段3 字段3类型[COMMENT 字段3注释],
......
字段n 字段n类型[COMMENT 字段n注释]
)
示例
MYSQL数据类型
对于DECIMAL 如123.45精度为5,标度为2
示例
修改
添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束]
--为emp表增加一个新的字段”昵称”为nickname,类型为varchar(20)
ALTER TABLE EMP ADD NICKNAME VARCHAR(20) COMMENT '昵称';
修改字段
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); --修改数据类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; --修改字段名和字段类型
案例
将emp表的nickname字段修改为username,类型为varchar(30)
alter table emp change nickname username varchar(30) comment '用户名';
删除字段
ALTER TABLE 表名 DROP 字段名; --删除字段
案例
将emp表的字段username删除
ALTER TABLE EMP DROP USERNAME;
修改表名
ALTER TABLE 表名 RENAME TO 新表名; --修改表名
案例
将emp表的表名修改为 employee
ALTER TABLE emp RENAME TO employee;
删除表
DROP TABLE [IF EXISTS] 表名; --删除表
drop table if exists tb_user; --如果不存在tb_user则不执行
TRUNCATE TABLE 表名; --删除指定表,并重新创建该表
DDL总结
二、SQL-DML语句
DML-介绍
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
DML-操作
添加数据
指定字段添加数据
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,...);
insert into employee(id, workno, name, gender, age, idcard, entrydate)
values(1, '1', 'Itcast', '男', 10, '12345', '2000-01-01');
insert into employee values(2, '2', '张无忌', '男', 18,'12345', '2000-01-01' );
insert into employee values(2, '2', '张无忌', '男', 18,'12345', '2000-01-01' ),(3, '3', '张忌', '男', 18,'12345', '2000-01-01' );
修改数据
修改
UPDATE 表名 SET 字段名1=值1, 字段名2=值2,...[WHERE 条件]; --不加条件则对表所有数据修改
update employee set name = 'itheima' where id = 1; --对id1作修改
update employee set entrydate= '2008-01-01'; --对所有进行修改
删除
DELETE FROM 表名 [WHERE 条件]
delete from employee where gender = '女'; --条件删除
delete from employee; --删除所有数据
总结
三、SQL-DQL语句
DQL介绍
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
DQL语法
下图为各条件在语句中的编写顺序
DQL-基本查询
--查询多个字段
SELECT 字段1,字段2,字段3,... FROM 表名;
SELECT * FROM 表名;
--设置别名
SELECT 字段1 [AS 别名1], 字段2[AS 别名2] ... FROM 表名;
--去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
示例
--查询指定字段
SELLECT name,wokrno,age FROM emp;
--查询所有字段返回
SELECT * FROM emp;
--查指定字段起别名
SELECT workaddress AS '工作地址' FROM emp;
--查询公司员工的上班地址(不要重复)
SELECT DISTINCT workaddress '工作地址' FROM EMP;
DQL-条件查询
语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
示例
--查询年龄等于88的员工
SELECT * FROM emp WHERE age = 88;
--查询年龄小于等于20的员工
SELECT * FROM emp WHERE age <= 20;
--查询没有身份证号的员工信息
SELECT * FROM emp WHERE idcard IS NULL;
--查询有身份证号的员工信息
SELECT * FROM emp WHERE idcard IS NOT NULL;
--查询年龄不等于88的员工
SELECT * FROM emp WHERE age != 88;
SELECT * FROM emp WHERE age <> 88;
--查询年龄在15到20之间的员工
SELECT * FROM emp WHERE age >= 15 && <= 20;
SELECT * FROM emp WHERE age >= 15 AND <= 20;
SELECT * FROM emp WHERE age BETWEEN 15 AND 20; --注意不能写反
--查询性别为女且年龄小于20的员工
SELECT * FROM emp WHERE gender = '女' AND age < 25;
--查询年龄等于18或20或40的员工信息
SELECT * FROM emp WHERE age = 18 or age = 20 or age = 40;
SELECT * FROM emp WHERE age in(18,20,40);
--查询姓名为两个字的员工信息 _%
SELECT * FROM emp WHERE name like '__'; --两个下划线占位符
--查询身份证号最后一位是X的员工信息
SELECT * FROM emp WHERE name like '$X'; --或者17个下划线代替% 如果想查李开头的则'李%'
DQL-聚合函数
将一列数据作为一个整体,进行纵向计算
常见聚合函数
注意:null值不参与所有聚合函数运算
语法
SELECT 聚合函数(字段列表) FROM 表名;
示例
--统计该企业员工数量
SELECT COUNT(*) FROM emp;
SELECT COUNT(idcard) FROM emp;
--统计该企业员工的平均年龄
SELECT AVG(age) FROM emp;
--统计该企业员工的最大年龄
SELECT MAX(age) FROM emp;
--统计西安地区员工的年龄之和
SELECT SUM(age) FROM emp WHERE workaddress = '西安';
DQL-分组查询
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
分组通常配合聚合使用
示例
--根据性别分组,统计男性员工和女性员工的数量
SELECT gender, count(*) FROM emp GROUP BY gender;
--根据性别分组,统计男性员工 和 女性员工的平均年龄
SELECT gender, AVG(age) FROM emp GROUP BY gender;
--查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
SELECT workaddress, COUNT(*) FROM emp WHERE age < 45 GROUP BY workaddress HAVING COUNT(*) >= 3;
DQL-排序查询
语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;
排序方式
示例
--根据年龄对公司的员工进行升序排序
SELECT * FROM emp ORDER BY age ASC;
SELECT * FROM emp ORDER BY age DESC;
--根据入职时间,对员工进行降序排序
SELECT * FROM emp ORDER BY entrydate DESC;
--根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
SELECT * FROM emp ORDER BY age ASC , entrydate DESC;
DQL-分页查询
语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
示例
--查询第一页员工数据,每页展示10条记录
SELECT * FROM emp LIMIT 0,10;
--查询第二页员工数据,每页展示10条记录 (页码-1)乘以页展示记录数
SELECT * FROM emp LIMIT 10,10;
一共16条数据,第一页显示10则第二页只剩6条
DQL-案例
--1.查询年龄为20,21,22,23岁的员工信息。
select * from emp where age in (20,21,22,23);
--2.查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。
select * from emp where gender = '男' and age between 20 and 40 and name like '___';
--3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
select gender, count(*) from emp where age < 60 group by gender;
--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 an 40 order by age asc , entrydate asc limit 5;
DQL-执行顺序
例子
select e.name ename , e.age eage from emp e where eage > 15 order by age asc;
这条语句是报错的,因为eage是select处起的别名,而where在select前执行
总结
四、SQL-DCL语句
DCL介绍
DCL英文全称是Dala ControlLanguaqe(数据控制语言),用来管理数据库用户,控制数据库的访问权限制。
DCL语法
DCL-管理用户
--查询用户
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';
--创建用户 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';
DCL-权限控制
MySQL中定义了很多种权限,但是常用的就以下几种:
--查询权限
SHOW GRANTS FOR '用户名'@'主机名';
--授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
--撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
示例
--查询权限
show grants for 'heima'@'%';
--授予权限
grant all on itcast.* to 'heima'@'%';
--撤销权限
revoke all on itcast.* from 'heima'@'%';