文章目录
一、数据库的概念
1.1、数据库(DataBase(DB))
存储数据的仓库,数据是有组织的进行存储
1.2、数据库管理系统(DataBase Management System(DBMS))
操纵和管理数据库的大型软件
1.3、SQL:(Structured Ouery Language(SOL))
操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
1.4关系型数据库(RDBMS)
概念:建立在关系模型基础上的,有多张表相互连接的二维表组成数据库。
二、SQL
2.1SQL通用语法
2.2SQL分类
2.3(数据定义语言)DDL
用来定义数据库对象(数据库,表,字段)
***语句可以大小写
2.3.1基础操作
2.3.1.1查询所有数据库
格式:SHOW DATABASES ;
2.3.1.2查询当前数据库
格式:SELECT DATABASE():
***注意:这里的()是不可以省略的。
2.3.1.3创建
格式:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET字符集][COLLATE 排序规则];
这里的【】是可选的
2.3.1.4 使用
USE 数据库名;
2.3.1.5删除
格式:DROP DATABASE[IF EXISTS]数据库名:
使用
2.3.2表的操作
2.3.2.1创建
格式:
CREATE TABLE 表名(
字段1 类型[COMMENT '注释']
字段2 类型[COMMENT '注释']
字段3 类型[COMMENT '注释']
...
)[COMMENT 表注释];
mysql> create table test_user(
-> id int comment '编号',
-> name varchar(50) comment '姓名',
-> age int comment '年龄'
-> ) comment '测试表';
Query OK, 0 rows affected (0.05 sec)
2.3.2.2查询
2.3.2.2.1查询当前数据库所有表
格式:SHOW TABLES;
2.3.2.2.2查询表结构
格式:DESC 表名:
2.3.2.2.3查询指定表的建表语句
格式:SHOW CREATE TABLE 表名;
2.3.2.3 常见数据类型
mysql> create table job_table(
-> id int comment '编号' ,
-> no varchar(10) comment '工号' ,
-> name varchar(10) comment '姓名' ,
-> gender varchar(1) comment '性别' ,
-> age tinyint unsigned comment '年龄'
-> ) comment '员工表';
Query OK, 0 rows affected (0.04 sec)
2.3.2.4修改与删除
2.3.2.4.1修改
格式:ALTER TABLE 表名 ADR 字段名 类型(长度)[COMMENT 注释][约束];
mysql> alter table job_table add niname varchar(10) comment '昵称';
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
还有两种格式;
修改数据类型
格式: ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
修改字段名和字段类型
格式: ALTER TABLE 表名 CHANGE |日字段名 新字段名 类型(长度)[COMMENT注释][约束];
修改表名
格式:ALTER TABLE 表名 RENAME TO 新表名:
2.3.2.4.2 删除
删除字段名
格式: ALTER TABLE 表名 DROP 字段名;
mysql> ALTER TABLE job_table DROP niname;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
删除表
格式:DROP TABLE「IF EXISTS]表名,
删除指定表,并重新创建该表
格式:TRUNCATE TABLE 表名)
2.4(数据操作语言)DML
用来对数据库表中的数据进行增删改
2.4.1添加数据
2.4.1.1给指定字段添加数据
格式:INSERT INTO 表名 (字段名1, 字段名2, …) VALUES (值1, 值2, …);
insert into employee(id,workno,name,gender,age,idcard,entrydate)
values(001,'001','橙汁','男',23,'440582200006010101','2000-01-01');
select * from employee;
2.4.1.2批量添加数据
INSERT INTO 表名 VALUES (值1, 值2, …), (值1, 值2, …), (值1, 值2, …) ;
2.4.2修改数据
格式:UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
UPDATE employee SET id = 1,name = '小明' , gender = '男' WHERE age=10 ;
select * from employee;
2.4.3删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
delete from employee where name= '橙汁';
*注意:没加条件限制则是删除整张表
2.5(数据查询语言)DQL
用来查询数据库中表的记录
table补充一下数据。
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (1, '001', '捷风', '女', 20, '123456789012345678', '深圳', '2024-03-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (2, '002', '铁壁', '男', 18, '123456789012345670', '深圳', '2005-09-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (3, '003', '一决', '男', 38, '123456789712345670', '广州', '2005-08-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (4, '004', '雷兹', '女', 18, '123456757123845670', '深圳', '2009-12-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (5, '005', '贤者', '女', 16, '123456769012345678', '广州', '2007-07-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (6, '006', '幽影', '男', 28, '12345678931234567X', '深圳', '2006-01-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (7, '007', '炼狱', '男', 40, '123456789212345670', '深圳', '2005-05-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (8, '008', '霓虹', '女', 38, '123456157123645670', '广州', '2015-05-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (9, '009', '斯凯', '女', 45, '123156789012345678', '深圳', '2010-04-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (10, '010', '猎萧', '男', 53, '123456789012345670', '广州', '2011-01-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (11, '011', '零', '男', 55, '123567897123465670', '广州', '2015-05-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (12, '012', '保安', '男', 32, '123446757152345670', '深圳', '2004-02-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (13, '013', '海王', '男', 88, '123656789012345678', '广州', '2020-11-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (14, '014', '奇乐', '女', 65, '123456719012345670', '汕头', '2019-05-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (15, '015', '盖克', '男', 70, '12345674971234567X', '汕头', '2018-04-01');
INSERT INTO employee(id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (16, '016', '黑梦', '女', 18, NULL, '深圳', '2012-06-01');
格式:
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
2.5.1 基础查询语法
2.5.1.1查询字段
(1) SELECT 字段1, 字段2, 字段3 … FROM 表名 ;
(2)SELECT * FROM 表名 ;
注意:*号表示全部字段
2.5.1.2 设置字段的别名
格式:SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] … FROM 表名;
注意:AS可以不加
2.5.1.3 返回不重复的字段值
格式:SELECT DISTINCT 字段列表 FROM 表名;
2.5.2 条件查询语法
格式:SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
常见的比较运算符
常用的逻辑运算符
2.5.2.1 查询年龄大于50的员工
2.5.2.2 查询没有身份证号的员工信息
select * from employee where idcard is NULL;
2.5.2.3 查询姓名为某些字的员工信息
select * from employee where name like ‘捷风’;
2.5.2.4 查询身份证号最后一位是X的员工信息
格式:select * from emp where idcard like ‘%X’;
2.5.3 聚合函数查询语法
简介:将一列数据作为一个整体,进行纵向计算
格式:
SELECT 聚合函数(字段列表) FROM 表名 ;
常见的聚合函数:
2.5.3.1统计企业员工数量
select count(*) from employee; -- 统计的是总记录数
select count(idcard) from employee;-- 统计的是idcard字段不为null的记录数
2.5.3.2 统计广州地区员工的年龄之和
select sum(age) from employee where workaddress=‘广州’ ;
2.5.4 分组查询语法
格式:
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [HAVING 分组后过滤条件 ];
where与having的区别:
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组 之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
执行顺序:where>聚合函数>having
2.5.4.1 统计男性员工和女性员工的数量
select gender,count(*)
from employee
group by gender;
2.5.4.2 查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于2的工作地址
select workaddress,count(*) as address_count
from employee
where age<50
group by workaddress
having address_count>2;
2.5.5 排序查询语法
格式:ASC : 升序(默认值),DESC: 降序
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
2.5.5.1根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序
select age,entrydate
from employee
order by age asc,entrydate asc;
2.5.6分页查询语法
格式:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
select *
from employee
limit 0,10;
2.5.7 执行顺序
select age #④
from employee #①
where age>11 #②
group by age #③
Having age>30
order by age asc #⑤
limit 0,10; #⑥
2.6(数据控制语言)DCL
用来创建数据库用户、控制数据库的访问权限
2.6.1管理用户
在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。
2.6.1.1查询用户
格式:
select * from mysql.user;
其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问,是不可以远程访问的。
2.6.1.2创建用户
格式:
CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’;
创建用户test03, 只能够在当前主机localhost访问, 密码a123456;如果想创建任意主机访问该数据库则将’test03’@‘localhost’改成’test03’@'%'即可
create user 'test03'@'localhost' identified by 'a123456';
2.6.1.1修改用户密码
格式:
ALTER USER ‘用户名’@‘主机名’ IDENTIFIED WITH mysql_native_password BY ‘新密码’
修改用户test03的访问密码为123456;
alter user 'test03'@'localhost' identified with mysql_native_password by '123456';
2.6.1.1删除用户
格式:
DROP USER ‘用户名’@‘主机名’ ;
删除 test03@localhost 用户
drop user ‘test03’@‘localhost’;
2.6.2 权限控制
基础权限
2.6.2.1 查询权限
格式:
SHOW GRANTS FOR ‘用户名’@‘主机名’ ;
查询 ‘test03’@‘%’ 用户的权限
show grants for 'test03'@'%';
2.6.2.2授予权限
GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘主机名’;
授予 ‘test03’@‘%’ 用户test01数据库所有表的所有操作权限
grant all on test01.* to 'test03'@'%';
2.6.2.3撤销权限
格式:
REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名’@‘主机名’;
撤销 ‘test03’@‘%’ 用户的test01数据库的所有权限
revoke all on test01.* from ‘test03’@‘%’;