mysql基础

一、什么是数据库?

  1. 用于存储和管理数据的仓库
  2. 英文单词为:DataBase,简称DB

二、数据库的好处?

  1. 可以持久化存储数据
  2. 方便存储和管理数据
  3. 使用了统一的方式操作数据库--SQL

 三、数据库、数据表、数据的关系介绍?

     数据库

  1. 用于存储和管理数据的仓库
  2. 一个库中可以包含多个数据表

    数据表

  1. 数据库最重要的组成部分之一
  2. 它由纵向的列和横向的行组成类似(excel表格)
  3. 可以指定列名、数据类型、约束

     数据

  1. 想要永久存储的数据

四、SQL通用语法

  • SQL语句可以单行或多行书写,以分号结尾
  • 可以使用空格和缩进来增强语句的可读性
  • MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
  • 数据库的注释:单行注释 --注释内容 #注释内容(mysql特有)  多行注释:/*注释内容*/

五、SQL分类

  • DDL(Data Definition Language)数据定义语言
  1. 用来定义数据库对象:数据库、表、列等,关键字:create、drop、alter等
  • DML(Data Manipulation Language)数据操作语言
  1. 用来对数据库中表的数据进行增删改。关键字:insert、delete、update等
  • DQL(Data Query Language)数据查询语言
  1. 用来查询数据库中表的记录(数据)。关键字:select、where等
  • DCL(Data Control Language)数据控制语言
  1. 用来定义数据库的访问权限和安全级别,及创建用户,关键字:GRANT,REVOKE等

六、DDL-操作数据库

  • R(Retrieve):查询
--查询所有数据库
SHOW DATABASES;

--查询某个数据库都创建语句
SHOW CREATE DATABASE 数据库名称;

--查看mysql数据库的创建格式
SHOW CREATE DATABASE mysql;
  •   C(Create):创建
--创建数据库
CREATE DATABASE 数据库名称;
--创建student数据库(重点)
CREATE DATABASE student;
--先判断数据是否存在,不存在数据库在创建(重点)
CREATE DATABASE IF NOT EXISTS student;
--先判断,在创建,同时指定字符集
CREATE DATABASE IF NOT EXISTS student CHARACTER SET utf8_mb4;
  • U(update):修改
--修改数据库的字符集
#ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称
ALTER DATABASE student CHARACTER SET utf8;
  • D(Delete):删除
--删除数据库(重点)
#DROP DATABASE 数据库名称;
DROP DATABASE student;

--删除数据库(先判断存在,再删除)(重点)
#DROP DATABASE IF EXISTS 数据库名称;
DROP DATABASE IF EXISTS student;
  • 使用数据库
--查询当前正在使用的数据库
SELECT DATABASE();

--使用数据库(重点)
#USE 数据库名称;
USE student;

七、DDL-操作数据表

  • C(Create):创建
--创建数据表
--CREATE TABLE 表名(
--  列名1 数据类型1,
--  列名2 数据类型2,
--  ......
--  列名n 数据类型n
--);

CREATE TABLE student(
    id INT,
    name VARCHAR(20),
    age INT,
    address VARCHAR(40)
);
  • 数据类型
  1. int: 整数类型
  2. double:小数类型  double(5,2)
  3. date:日期,只包含年月日  yyyy-MM-dd
  4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
  5. timestamp:时间戳类型  包含年月日时分秒 yyyy-MM-dd HH:mm:ss
  6. varchar:字符串 varchar(20)
  • R(Retrieve):查询
--使用mysql数据库
USE mysql;

--查询数据库中所有的数据表
SHOW TABLES;

--查询student表结构
DESC student;

--查询表的详细信息
SHOW TABLE STATUS FROM 库名 LIKE '表名';
--查询mysql数据库中student表的详细信息
SHOW TABLE STATUS FROM mysql LIKE 'student';
  • 复制表
--语法(重点)
CREATE TABLE 表名 LIKE 被复制的表名;
--复制student表到user表
CREATE TABLE student LIKE user;
  • 删除表
--删除表 语法(重点)
DROP TABLE 表名;
--删除student表
DROP TABLE student;

--删除表存在则删除 语法
DROP TABLE IF EXISTS 表名;
--删除student表,如果存在则删除
DROP TABLE IF EXISTS student;

--删除一个字段 语法
ALTER TABLE 表名 DROP 列名;

--删除age字段
ALTER TABLE user DROP age;
  • U(Update):修改
--修改表名 语法
ALTER TABLE 表名 RENAME TO 新的表名;

--修改student表名为user表
ALTER TABLE student RENAME TO user;

--修改表的字符集 语法
ALTER TABLE 表名 CHARACTER SET 字符集名称;

--修改user数据表字符集为gbk;
ALTER TABLE user CHARACTER SET gbk;

--修改字段名数据类型 语法
ALTER TABLE 表名 MODIFY 列名  新数据类型;

--修改user表中sex属性
ALTER TABLE user MODIFY sex varchar(3);


--修改字段名称和数据类型 语法
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;

--修改user表中列名为sex数据类型为Varchar 改为 列名为gender 数据类型为int
ALTER TABLE user CHANGE sex gender int;

--查看mysql数据库中user数据表字符集
SHOW TABLE STATUS FROM mysql LIKE 'user';
  • 添加
--添加一列  语法
ALTER TABLE 表名 ADD 列名 数据类型;
--给user数据表添加一列
ALTER TABLE user ADD sex VARCHAR(4);

八、DML-(INSERT,UPDATE、DELETE语句)

  • 新增表数据语法
--给指定列添加数据 语法
INSERT INTO 表名(列名1,列名2,....) VALUES (值1,值2,....);
--向user表添加指定列数据
INSERT INTO user(id,name,age,sex) VALUES (1,'苏苏',18,'女孩');

--默认给全部列添加数据 语法
INSERT INTO user values (值1,值2,值3,...);

--向user表中添加数据
insert into user values (1,'火灵儿',18,'女孩');


--向user表中添加多条数据
insert into user values (1,'火灵儿',18,'女孩'),(1,'涂山红红',18,'女孩');

--查看表中所有数据 语法
SELECT * FROM 表名;
--查看user表中所有数据
select * from user;

  • 修改表数据语法
--修改表数据语法
UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,...[where 条件];
--修改id为1的学生性别为女孩
update user set sex='女孩' where id = 1;
--不写where条件就是修改表中所有数据
  • 删除表数据语法
--语法
DELETE FROM 表名 [WHERE 条件];

--删除user表中的19岁的信息
delete from user where age = 19;--注意删除语句必须加条件,如果不加条件则将所有数据删除

九、DQL-单表查询

  • 查询语法

select 

     字段列表 

from

     表名列表 

where

     条件列表 

group by

     分组字段 

having

     分组之后的条件

order by

     排序

limit

     分页限定

  • 表查询
#查询语法(查询user表所有数据)
select * from user;
#多字段查询
select id,name,age from user;
  • 去除重复查询(注意只有全部重复的才可以去除)
#去除重复查询  DISTINCT:去重
SELECT DISTINCT name,age FROM user;
  • 计算列的值(四则运算)
/*
	计算列的值
	标准语法:
		SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
		
	如果某一列为null,可以进行替换
	ifnull(表达式1,表达式2)
	表达式1:想替换的列
	表达式2:想替换的值
*/
#在学生原有年龄上+10
SELECT id,name,age+10,sex,stu_time FROM user;
#IFNULLIFNULL(age,0) 对age判断null,如果age值有null就为0
select id,name,IFNULL(age,0)+10,sex,stu_time FROM user;
  • 起别名
#标准语法
SELECT 列名1,列名2,... AS 别名 FROM 表名;

#起别名
SELECT
	id AS 学生id,
	name AS 姓名,
	age AS 年龄,
	sex AS 性别,
	stu_time AS 出生日期 
FROM
	user;

  • 条件查询
  1. 条件分类

        

符号功能
>大于
<小于
>=大于等于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN ... AND ...在某个范围之内(都包含)
IN(...)多选一
LIKE 占位符模糊查询 _单个任意字符 %多个任意字符
IS NULL是NULL
IS NOT NULL不是NULL
AND 或 &&并且
OR 或 ||或者
NOT 或 !非,不是
  2.条件查询语法
#标准语法
SELECT 列名 FROM 表名 WHERE 条件;
#查询年龄在大于18的
SELECT * FROM user WHERE age > 18;
#查询姓名为苏沐橙的
SELECT * FROM user WHERE name = '苏沐橙';
#查询年龄在18到20之间的
SELECT * FROM user WHERE age >= 18 AND age <= 20;
SELECT * FROM user WHERE age BETWEEN 18 AND 20;
#查询学生id为1,2,4,6的学生数据
SELECT * FROM user WHERE id=1 OR id=2 OR id=4 OR id=6;
SELECT * FROM user WHERE id IN(1,2,4,6);
#查询age为null的
SELECT * FROM user WHERE age IS NULL;
#查询age不为null的
SELECT * FROM user WHERE age IS NOT NULL;
#查询以叶开头的学生信息 %是不限定字符数量  _是限定一个字符
SELECT * FROM user WHERE name LIKE '叶%';
#查询姓名第二个字是沐的
SELECT * FROM user WHERE name LIKE '_沐%';
#查询姓名为两个字的学生信息
SELECT * FROM user WHERE name LIKE '__';
#查询姓名包含灵的学生信息
SELECT * FROM user WHERE name LIKE '%灵%';
  • 聚合函数(将一列数据作为一个整体,进行纵向的计算 ) 聚合函数分类 
函数名功能
count(列名)统计数量(一般选用不为null的列)
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值
  •  聚合函数语法
-- 标准语法
SELECT 函数名(列名) FROM 表名 [WHERE 条件];
#计算user表中总记录条数
SELECT COUNT(*) FROM user;
SELECT COUNT(1) FROM user;
SELECT COUNT(name) FROM user;
#获取最高年龄
SELECT MAX(age) FROM user;
#获取最高年龄的学生姓名
SELECT name,
	age 
FROM
USER 
WHERE
	age = ( SELECT MAX( age ) FROM USER );
#获取最低年龄
SELECT MIN(age) FROM user;
#获取最底年龄的学生姓名
SELECT name,age FROM user WHERE age=(SELECT MIN(age) FROM user);

#获取总年龄
SELECT SUM(age) FROM user;
#获取女孩的总年龄
SELECT SUM(age) FROM user WHERE sex='女孩';
#获取学生的平均年龄
SELECT AVG(age) FROM user;
#获取女孩学生的平均年龄
SELECT AVG(age) FROM user WHERE sex='女孩';
  • 排序查询
      1、排序分类(注意:多个排序条件,当前边的条件值一样时,才会判断第二条件 )   
关键词功能
ORDER BY 列名1 排序方式1,列名2 排序方式2对指定列排序,ASC升序(默认的) DESC降序
     2、排序语法
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;
#按照年龄升序
SELECT * FROM user ORDER BY age ASC;
#查询性别为女孩的学生,按照年龄降序排序
SELECT * FROM user WHERE sex='女孩' ORDER BY age DESC;
#查询姓名中包含灵的学生信息,按照年龄降序排序
SELECT * FROM user WHERE name LIKE '%灵%' ORDER BY age DESC;
  • 分组查询
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];
#按照性别分组,获取每组总年龄
SELECT sex,SUM(age) FROM user GROUP BY sex;
#对年龄大于16的学生信息,按照性别分组,获取每组的总年龄,只显示总年龄大于50的
SELECT sex,SUM(age) AS 年龄 FROM user WHERE age > 16 GROUP BY sex HAVING 年龄 > 50;
#对年龄大于16的学生信息,按照性别分组,获取每组的总年龄,只显示总年龄大于40的,并且按照总年龄升序
SELECT sex,SUM(age) AS 年龄 FROM user WHERE age > 16 GROUP BY sex HAVING 年龄 > 40 ORDER BY 年龄 ASC;
  • 分页查询
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式] LIMIT 开始索引,查询条数;
-- 公式:开始索引 = (当前页码-1) * 每页显示的条数
#每页显示两条信息
SELECT * FROM user LIMIT 0,2;   -- 第一页 开始索引=(1-1) * 2
SELECT * FROM user LIMIT 2,2;   -- 第二页 开始索引=(2-1) * 2
SELECT * FROM user LIMIT 4,2;	-- 第三页 开始索引=(3-1) * 2
SELECT * FROM user LIMIT 6,2;	-- 第四页 开始索引=(4-1) * 2

 十、约束

  • 约束的概念

        1、对表中的数据进行限定,保证数据的正确性,有效性,完整性。

  • 约束的分类
约束说明
PRIMARY KEY主键约束
PRIMARY KEY AUTO_INCREMENT主键、自动增长
UNIQUE唯一约束
NOT NULL非空约束
FOREIGN KEY外键约束
FOREIGN KEY ON UPDATE CASCADE外键级联更新
FOREIGN KEY ON DELETE CASCADE外键级联删除
  • 主键约束

        1、主键约束特点

             1.主键约束包含:非空和唯一两个功能

             2.一张表只能有一个列作为主键

             3.主键一般用于表中数据的唯一标识

  • 添加主键约束
-- 标准语法
CREATE TABLE 表名(
	列名 数据类型 PRIMARY KEY, #PRIMARY KEY 主键
	列名 数据类型,
	....
);
-- 创建stu表主键默认唯一,默认非空
CREATE TABLE stu(
	id INT PRIMARY KEY, -- 给id添加主键约束
	name VARCHAR(6),
	age INT
);

-- 在表外添加主键
-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;
-- 添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
  • 删除主键
-- 标准语法
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 删除主键
ALTER TABLE stu DROP PRIMARY KEY;
  • 添加外键
-- 表里外键约束
CREATE TABLE user(
	id INT auto_increment PRIMARY  KEY,
	name VARCHAR(6),
	sex VARCHAR(4),
	age INT,
	sid INT
);
-- 表外外键约束
ALTER TABLE user ADD CONSTRAINT sfid FOREIGN KEY (sid) REFERENCES stu(id);
  • 删除外键约束
-- 删除外键约束 语法
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;

ALTER TABLE user DROP FOREIGN KEY sfid;
  • 外键的级联更新和级联删除
    1、什么是级联更新和级联删除     

         当我想把user用户表中的某个用户删掉,我希望该用户所有的订单也随之被删除

         当我想把user用户表中的某个用户id修改,我希望订单表中该用户所属的订单用户编号也随   之修改

  • 添加级联更新和级联删除
    -- 添加外键约束,同时添加级联更新  标准语法
    ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON UPDATE CASCADE;
    
    -- 添加外键约束,同时添加级联更新
    ALTER TABLE user 
    ADD CONSTRAINT sfid FOREIGN KEY (sid) 
    REFERENCES stu(id) ON UPDATE CASCADE;
    
    
    -- 添加外键约束,同时添加级联删除  标准语法
    ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON DELETE CASCADE;
    
    ALTER TABLE user 
    ADD CONSTRAINT sfid FOREIGN KEY (sid) 
    REFERENCES stu(id) ON DELETE CASCADE;
    
    -- 添加外键约束,同时添加级联更新和级联删除  标准语法
    ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON UPDATE CASCADE ON DELETE CASCADE;
    
    ALTER TABLE user 
    ADD CONSTRAINT sfid FOREIGN KEY (sid) 
    REFERENCES stu(id) ON UPDATE CASCADE ON DELETE CASCADE;

    十一、多表设计

  • 一对一(人和身份证。一个人只有一个身份证,一个身份证只能对应一个人 )
  • 实现原则 (在任意一个表建立外键,去关联另外一个表的主键 )
  • 一对多(用户和订单。一个用户可以有多个订单! )
  • 实现原则 (在多的一方,建立外键约束,来关联一的一方主键 )
  • 多对多(学生和课程。一个学生可以选择多个课程,一个课程也可以被多个学生选择! )
  • 实现原则 (需要借助第三张表中间表,中间表至少包含两个列,这两个列作为中间表的外键,分别关联两张表的主键 )

十二、多表查询

  • 内连接查询

        内连接查询的是两张表有交集的部分数据(有主外键关联的数据)

-- 标准语法
SELECT 列名 FROM 表名1 [INNER] JOIN 表名2 ON 条件;
-- 显示内连接
SELECT * FROM user INNER JOIN stu ON `user`.id = stu.id;

-- 标准语法
SELECT 列名 FROM 表名1,表名2 WHERE 条件;
-- 隐式内连接
SELECT s.name,s.age,s.sex,o.name FROM stu s,`user` o WHERE s.id = o.id;
  • 外连接查询
    -- 标准语法 左外连接
    SELECT 列名 FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 条件;
    -- 左连接 OUTER 可要/不要
    SELECT * FROM stu s LEFT OUTER JOIN user u ON s.id = u.id;
    
    --标准语法 右外连接
    SELECT 列名 FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 条件;
    -- 右连接
    SELECT s.`name`,s.sex,u.`name`,u.sex FROM stu s RIGHT OUTER JOIN user u ON s.id=u.sid;
  •  多表查询-子查询(查询语句中嵌套了查询语句。我们就将嵌套查询称为子查询 )
-- 标准语法
SELECT 列名 FROM 表名 WHERE 列名=(SELECT 聚合函数(列名) FROM 表名 [WHERE 条件]);
#查询user表中年龄最高,查询姓名,性别,年龄
SELECT `name`,sex,age FROM user WHERE age = (SELECT MAX(age) FROM user);

#查询年龄大于19的stu表和user表的信息
SELECT * FROM user u JOIN (SELECT * FROM stu WHERE age > 19) s WHERE u.sid = s.id;

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渣男あ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值