一.MySQL概述
关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点:
1.使用表存储数据,格式统一,便于维护
2.使用SQL语言操作,标准统一,使用方便
数据模型
客户端>>>DBMS>>>数据库
二.SQL
1.SQL通用语法
SQL语句可以单行或多行书写,以分号结尾。
SQL语句可以使用空格/缩进来增强语句的可读性。
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
注释:》单行注释:-- 注释内容 或# 注释内容(MySQL特有)
》多行注释:/* 注释内容 */
2.SQL语句的分类
1.DDL
数据定义语言,用来定义数据库对象
DDL数据库操作:
查询:
查询所有数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASE();
创建:
CRFATE DATABASE [IF NOT EXISTS]数据库名 [DFFAULT CHAREST 字符集] [COLLATE 排序规则]
删除:
DROP DATABASE[IF EXISTS]数据库名;
使用:
USE 数据库名;
----------------------------------------------------------------------
DDL-表操作-查询
查询当前数据库所有表
SHOW TABLES;
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;
-----------------------------------------------------------------------------------------------
DDL-表操作-创建
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段2 字段2类型[COMMENT 字段2注释],
字段3 字段3类型[COMMENT 字段3注释],
...
字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 字段1注释];
---------------------------------------------------------------
DDL-表操作-数据类型
数值类型
案例1:定义age,正常情况int就可以了,但是实际上INT的范围太大所以可以给到TINYINT,并且年龄不可能是负数,所以定义应该如下
age TINYINT UNSIGNED
案例2:定义score,使用double,括号中写(总共显示几位,小数点后几位)
score DOUBLE(4,1)
字符串类型
char----》性能高---------------------------》gender使用
varchar---》相对性能低一点点----------》username使用
--------------------------------------------------------------------------------------
日期类型
DDL数据类型大案例
creat table emp(
id int comment '编号';
workid varchar(10) comment '员工工号',
name varchar(10) comment'员工姓名',
gender char(1) comment'性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
entrydate date comment'入职时间'
)comment ‘员工信息表’;
DDL-表操作-修改
添加
ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释] [约束]
案例:为tmp表 添加一个新的字段 昵称为‘Nickname’ 长度为20
alter table emp add Nickname char(20)comment ‘昵称';
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT 注释] [约束];
案例:将emp表中的Nickname改为username,长度为30
ALTER TABLE 表名 CHANGE Nickname username varchar(30)comment '更改为username';
删除字段
ALTER TABLE 表名 DROP 字段名;
案例:删除username字段:
ALTER TABLE emp DROP username;
修改表名
ALTER TABLE RENAME TO 新表名;
案例:将emp更改为fjq
ALTER TABLE emp RENAME TO fjq;
删除表
DROP TABLE [IF EXISTS] 表名 ;
删除指定表,并且重新创建该表
TRUNCATE TABLE 表名;
在删除表时,表中的全部数据都会被删除。
2.DML
数据操作语言,用来对数据库表中的数据记录进行增删改的操作
添加数据INSERT
修改数据UPDATE
删除数据DELETE
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 表名 (值1,值2,...) (值1,值2,...) (值1,值2,...) ;
注意:
插入数据时,指定的字段顺序需要与值得顺序是一一对应的
字符串和日期型数据应该包含在引号中
插入的数据大小,应该在字段的规定范围内
案例:
insert into employee(id, workno, name, gender, age, itcard, entrydate)values(1,'1','fjq','男',21,'123456789123456789','2023-08-13'); select * from employee; insert into employee values(2,'2','zxl','女',21,'123456789123456789','2023-08-13');
DML-修改操作
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2,...[WHERE 条件]
注意:
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
案例:
-- 修改id为1的数据,将name修改为itheima update employee set name = 'itheima' where id = 1; -- 修改id为1的数据,将name改为xiaoming,性别改为女 update employee set name = 'itheima' , gender = '女' where id = 1; -- 将所有员工入职日期改为2023年8月13日 update employee set entrydate = '2023-8-23';
DML-删除数据
DELETE FROM 表名 [WHERE 条件]
注意:
DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
DELETE语句不能删除某个字段的值(可以使用update)
案例:
-- 删除gender为男的员工 delete from employee where gender = '男'; -- 删除所有员工 delete from employee;
3.DQL
DQL-介绍
DQL英文全称是Data Query Language(数据查询语言)。数据查询语言,用来查询数据库中表的记录。查询关键字:SELECT
DQL-语法
SELECT
字段列表
FROM
表名列表
基本查询
WHERE
条件列表
条件查询
(聚合函数count,max,min,avg,sum)
GROUP BY
分组字段列表
HAVING
分组后条件列表
分组查询
ORDER BY
排序字段列表
排序查询
LIMIT
分页参数
分页查询
DQL-基本查询
1.查询多个字段
SELECT 字段1,字段2,字段3... FROM 表名;
SELECT * FROM 表名;
2.设置别名
SELECT 字段1 [AS 别名1],字段2 [AS 别名2]...FROM 表名;
3.去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
案例:
1.查询指定字段name,workno,age返回
select name,workno,age from emp;
2.查询所有字段并返回
select id,name,workno,gende,idcard,workaddress,entrydate from emp;
select * from emp;不推荐使用
3.查询所有员工的工作地址,并起别名
select workaaddress as '工作地址' from emp;
4.查询所有员工的上班地址(不重复)
select distinct workaddress '工作地址' from emp;
DQL-条件查询
1.语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
2.条件
>= > < <= <>或!=
BETWEEN...AND... 在某个范围内(含最小值,最大值)
IN(...) 在in之后的列表的值,多选一
LIKE 占位符 模糊匹配(_匹配单个字符,%匹配任意个字符)
IS NULL
AND或&& OR或|| NOT或!
案例:
1.查询年龄等于88的员工
select * from emp where age = 88;
2.查询年龄小于28的员工信息
select * from emp where age < 28;
3.查询年龄小于等于28的员工信息
select * from emp where age <= 28;
4.查询没有身份证号信息的员工信息
select * from emp where idcard is null;
5.查询有身份证号员工的信息
select * from emp where idcard is not null;
6.查询年龄不等于88的员工信息
select * from emp where age != 88;
select * from emp where age <> 88;
7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息
select * from emp where age >= 15 && age <=25;
select * from emp where age >= 15 and age <=25;
select * from emp where age between 15 and 25;
8.查询性别为女 且年龄小于25岁的员工信息
select * from emp where gender = '女' and age < 25;
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 idcardlikke '%X';
DQL-聚合函数
1.介绍
将一列数据作为一个整体,进行纵向计算
2.常见聚合函数
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
3.语法
SELECT 聚合函数(字段列表) FROM 表名;
案例:
1.统计该企业的员工数量
select count(*) from emp;
select count (idcard) 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 = '西安';