MySQL基础

本文详细介绍了数据库的基本概念,如数据库、表、行和列的层次结构,主键的作用及定义,以及SQL语言的增删改查操作。通过具体实例展示了如何使用SQL进行数据的插入、删除、更新和查询,包括条件筛选、数据聚合、分组排序等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念


层次

database table column row
数据库→表→行、列,行是专业术语,也可以说成是记录。

主键
  • 主键列不允许有NULL,主键值不能重复。
  • 能唯一区分表中的每个行,保证更新,删除操作只针对特定的行。
  • 通常定义在表中的一个列上,也可以使用多个列作为主键。
  • 可以使用多个列组成主键
    primary key(order_num,order_item)

数据库、表


create database database_name;
drop database database_name;
use database_name;

DDL 待续

create alter drop

alter table table_name rename to new_table_name;
alter table table_name add primary key(column_name);
alter table table_name modify column_name int auto_increment;


增删改查


INSERT INTO

  • 不指定列名按默认顺序,指定列名可以按任意(列名顺序)插入value值。
  • 指定列名可以插入部分值但是注意,主键不可以为空。
  • 指定列名的好处(表结构变化依然可以使用原insert into 语句)
create table user(
name VARCHAR(10),
age INTEGER,
id INTEGER PRIMARY KEY);
# 不指定列名
INSERT INTO user VALUES('zll',18,1);
# INSERT INTO user VALUES(1,18,'zll'); 顺序不对,报错

#指定列名顺序任意
INSERT INTO user (id,name,age) VALUES(2,'njz',18);
INSERT INTO user (name,age,id) VALUES('zjn',18,2);

# 主键的问题
# INSERT INTO user(name,age) VALUES('zds',18); 主键不能为空,报错
INSERT INTO user(name,id) VALUES('zds',18);
  • 批量插入,主键自动增长
# INSERT INTO user VALUES('a',18,3),('b',18,3),('c',18,3); 主键值不能重复,报错
alter table user3 modify id int auto_increment;
INSERT INTO user3 VALUES('a',18,NULL),('b',18,NULL),('c',18,NULL);

在这里插入图片描述

DELETE

#全删除
delete from user3;
#
delete from user3 where id = 3;

UPDATE

update table_name set column1_name = new_value where column2_name = XXX;

  • DISTINCT 去重复
select distinct id from user;`
  • LIMIT 定义检索的开始结束行数
    单值n—前n行;
    两个值—起始位置 、查询行数;第一行为行0
    在这里插入图片描述
SELECT name from 3user limit 3; #a,b,c
SELECT name from 3user limit 1,2; #b,c

WHERE 过滤数据
  • 操作符
操作符含义
=等于
<>不等于
!=不等于
betweenBETWEEN a AND b
  • IN
    in与or可以完成相同的功能,但是in执行的更快,而且可以包含其他的select语句。
  • LIKE 通配符过滤
    速度慢,尽量不要使用,尽量放到最后。
符号含义
%任意字符出现的任意次数 0→正无穷
_任意字符匹配一次
  • Concat
SELECT Concat(user_name,'(',user_id,')') from users;
#----- zhangjianan(18)
#----- nanjiazhang(81)
  • 聚集函数
    可以使用distinct去重
    avg count max main sum
    • count 指定列名忽略NULL,不指定列名计算NULL
    • max 忽略null
    • min 忽略null
    • sum
      在这里插入图片描述
分组 和 排序

where过滤行,having过滤分组,having可以替代where,where过滤掉的行不会存在分组中。
在这里插入图片描述
在这里插入图片描述
分组
在这里插入图片描述

联结 join

外键:某个表的一列,包含另一个表的主键值,定义了两个表之间的关系。
联结:是一种机制,用来关联表。

  • 内部联结(等值联结)
    inner join on
SELECT prod_name,prod_name,prod_prices 
FROM vendor INNER JOIN products
ON products.vendor_id = vendor.id;
  • 自联结(使用表别名)
  • 外部联结(包含没有关联行的行f)
    left outer join on
    right outer join on
组合查询

UNION:必须有>=2 的查询语句,每个查询必须包含相同的列,表达式或者聚集函数,列出现的顺序可以不同,union包含自动去重,可以使用union all返回所有匹配行。

insert select

实际上mysql不关心select返回的列名,它使用列的位置进行匹配。

insert into customers(
cust_email,
cust_name,
cust_address,
cust_state,
cust_zip)
select 
cust_email,
cust_name,
cust_address,
cust_state,
cust_zip
from custnew;

性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值