目录
简介
关系型数据库(RDBMS)
概念
建立在关系模型的基础上,又多张相互有所关联的二维表组成的数据库
例如:Leetcode上的一道题中表的构成
类似于Excel表格,有表头、列、行,还可以通过一列关联到另一个表的某一列
上图为经理ID managerID又对应该表的员工ID id,表与表相互关联组成数据库
特点
1.使用表格储存数据,格式统一,便于维护,容易上手(相信大家或多或少都对Excel有所了解)
2.使用SQL语言操作,使用方便,利用Navical、DataDrip等图形化界面工具软件方便查看管理
SQL
概念
SQL全称 Structured Query Language,结构化查询语言,是操作关系型数据库的编程语言,为所有关系型数据库的统一标准。
当代主流关系型数据库管理系统(DBMS)主要为Orcale、MySQL、SQL server等等
新手语法易错点
1.SQL语句可以单行或多行书写,以分号结尾。
2.SQL语句可以使用空格/缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写,避免跟自定义变量混淆。
4.若在定义varchar()变量后添加文字出错,可以在定义时引进utf8编码
name varchar(255) character set utf8
5.注释:
主要数据类型
TINYINT 小整数值 1byte
SMALLINT 大整数值 2byte
MEDIUMINT 大整数值 3byte
INT 大整数值 4byte
FLOAT 单精度浮点数值 4byte
DOUBLE 双精度浮点数值 8byte
DECIMAL 小数值(需传精度跟标度值) 如30.14 DECIMAL(4,2); CHAR 定长字符串 (性能比VARCHAR高)
VARCHAR 变长字符串 (指定长度为最大长度)
DATE YYYY-MM-DD
SQL分类
SQL语句根据其功能不同主要分为四类:DDL、DML、DQL、DCL
DDL(Data Definition Language):数据定义语言,定义数据库、数据表,对其进行增查删改(CRUD)等操作都属于DDL语句;
DML(Data Manipulation Language):数据操作语言,对数据库中表中数据进行增删改操作;
DQL(Data Query Language):数据查询语言,对数据库中表中数据进行查操作(重点);
DCL(Data Control Language):数据控制语言,对数据库用户、有无权限等操作(用于运维,非运维了解即可)。
DDL
Data Definition Language:数据定义语言,定义数据库、数据表,对其进行增查删改
库操作
1.创建数据库
CREATE DATABASE IF NOT EXISTS Students;
If Not Exists为条件,如果不存在就创建,避免同名数据库错误
2.查询所有数据库
SHOW DATABASES ;
3.查询当前数据库
SELECT DATABASE();
4.删除数据库
DROP DATABASE Students;
5.切换其他数据库
USE mysql;
表操作
1.创建表
CREATE TABLE If Not Exists Student (
id int,
name varchar(10) character set utf8,
gender char(1) character set utf8,
birth date,
school varchar(10) character set utf8
) comment '表不存在就创建';
comment为注释关键字,可以在定义完列名、表后注释
2.查询当前数据库所有表
SHOW TABLES ;
3.查看表结构
DESC Student;
4.修改表
a.添加字段
ALTER TABLE Student ADD type varchar(10);
b.修改数据类型
ALTER TABLE Student MODIFY type char(3);
c.修改字段名和字段类型
ALTER TABLE Student CHANGE type email varchar(20);
d.删除字段
ALTER TABLE Student DROP email;
5.删除表
DROP TABLE IF EXISTS Student;
如需保留表,清空表中数据可使用:
TRUNCATE TABLE Student;
DML
Data Manipulation Language:数据操作语言,对数据库中表中数据进行增删改操作;
添加数据
INSERT INTO Student VALUES(1,'一号','男','2004-1-18','清华大学');
INSERT INTO Student(ID, NAME, GENDER, BIRTH, SCHOOL) VALUES (2,'二号','女','2003-4-20','北京大学');
INSERT INTO Student VALUES (3,'三号','男','2003-9-28','上海交通大学'),
(4,'四号','男','2005-9-20','上海交通大学'),
(5,'五号','男','2004-3-24','天津大学'),
(6,'六号','女','2003-4-10','天津大学'),
(7,'七号','男','2006-1-28','清华大学'),
(8,'八号','女','2001-10-12','天津大学'),
(9,'九号','女','2001-7-14','清华大学'),
(10,'十号','女','2005-6-21','上海交通大学'),
(11,'十一号','男','2006-6-6','北京大学'),
(12,'十二号','女','2000-2-22','上海交通大学'),
(13,'十三号','男','2003-3-13','北京大学'),
(14,'十四号','女','2004-1-24','上海交通大学'),
(15,'十五号','男','2003-12-20','北京大学'),
(16,'十六号','男','2002-9-20','天津大学')
查看数据
查看该表所有数据
SELECT * FROM Student;
修改数据
UPDATE Student SET school = '南开大学' where id = 16;
删除数据
DELETE FROM Student WHERE id = 16;
注意:不加条件会全部删除
DQL
Data Query Language:数据查询语言,对数据库中表中数据进行查操作
基本语法
1.基本查询
a.全部查询
SELECT * FROM Student;
b.查询指定列名学生信息
SELECT id,name FROM Student;
c.别名自定义
SELECT id as '编号',name as '姓名' FROM Student;
as可加可不加
d.去重
SELECT DISTINCT school FROM Student;
查询有哪些学校
2.条件查询
SELECT * FROM Student WHERE birth > '2004-3-12';
查找出生日期大于2004-3-12的学生信息
3.聚合函数
count、max、min、avg、sum
SELECT count(*) as '学生数量' FROM Student;
SELECT avg(id) FROM Student;
4.分组查询
SELECT gender ’性别‘,count(*) '数量' FROM Student GROUP BY gender;
a.升序
SELECT * FROM Student ORDER BY birth asc ;
b.降序
SELECT * FROM Student ORDER BY birth desc ;
默认为升序,可不加asc ,降序desc可以通过查看表结构联合记忆
5.分页查询
SELECT * FROM Student LIMIT 0,10;
0可以省略不写,查询第一页都可以省略
查询第2页学生数据, 每页展示10条记录
SELECT * FROM Student LIMIT 10,10;
编写顺序与执行顺序
编写顺序:SELECT FROM WHERE GROUP BY HAVING ORDER BY LIMT
执行顺序:FROM WHERE GROUP BY HAVING SELECT ORDER BY LIMT
DCL
Data Control Language:数据控制语言,对数据库用户、有无权限等操作
管理用户
1.查询用户
SELECT * FROM mysql.user;
2.创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY'密码';
create user 'mydaroot'@'localhost' identified by '123456';
3.修改用户密码
alter user 'mydaroot'@'localhost' identified with mysql_native_password by '1234';
4.删除用户
drop user 'mydaroot'@'localhost';
权限管理
1.查询权限
show grants for 'mydaroot'@'localhost';
2.授予权限
grant all on test.* to 'mydaroot'@'localhost';
3.撤销权限
revoke all on test.* from 'mydaroot'@'localhost';