MySQL必须要会的基础语句

本文详细介绍了MySQL数据库的基本操作,包括创建数据库和数据表,选择字符集与排序规则,删除数据库和表,插入、更新和删除数据,以及查询技巧如WHERE、HAVING子句,分组、排序和分页。此外,还涉及到了表连接、字段修改和删除,提供了丰富的示例代码,帮助理解MySQL数据库管理。
摘要由CSDN通过智能技术生成

1.创建数据库

/**
* character:字符集
* collate:排序方式
*/
create database `databasename` 
character set 'utf8' collate 'utf8_general_ci';

字符集-主要选择两种

1.utf8:unicode编码区从1 ~ 126属于传统utf8区,一般都够用,除非需要存储特殊字符
2:utf8mb4:utf8mb4兼容utf8,且比utf8能表示更多的字符。utf8mb4也兼容utf8 的区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间
所以字符集一般选择是:utf8,除非有特殊字符就选utf8mb4。

排序规则

1.bin:二进制, a 和 A 会别区别对待
2.general_ci:不区分大小写,注册用户名和邮箱的时候就要使用。
3.utf8_general_cs:区分大小写
4.utf8_general_ci:校对速度快,但准确度稍差。(准确度够用,一般建库选择这个)
5.utf8_unicode_ci:准确度高,但校对速度稍慢

2.删除数据库

# if exists:如果存在
drop database if exists databasename

3.创建数据表

/**
* if not exists:如果不存在
* primary key:主键
* not null:不能为空
* default:默认值
* index:索引
* foreign key:外键(建议:海量数据下不用外键,数据量较小可以使用外键)
* references:表创建外键时的一个固定语法,作用:持数据一致性,完整性
*/
create table if not exists tab_name(
	id bigint not null auto_increment,
	name varchar(255),
	age int(3) default('18'),
	dep_id bigint,
	primary key(id),
	index(name)
	# depart_ment:外键链接的表名称
	# id:外键表的字段名
	# dep_id:外键表关联的字段在创建的这张表中的字段名
	# foreign key(dep_id) references depart_ment(id),
	# 同步更新
	# on update cascade 
	# 同步删除
	# on delete cascade 
)

4.删除数据表

drop table if exists tab_name

5.插入数据

/**
* 直接插入 
* 多条插入:直接在后面加( ,("二只小狐狸OvO",'3','1') )
*/
insert into tab_name(name,age,dep_id) values("一只小狐狸OvO",'18','1')
/**
* 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据
* 否则,直接插入新数据
*/
replace  into tab_name(name,age,dep_id) values("一只小狐狸OvO",'18','1')

6.where和having

where:并不是针对结果集,
having:针对结果集,
聚合函数也是对结果集进行聚合,因此having里可以包含聚合函数,where中不可包含聚会函数。
执行顺序: from–> where–>group by–>having–>select–>order by

7.更新数据

# where 后面可以用 and、or 来多加一些条件
update tab_name set age = '3' where id='1' 

8.查询数据

# 养成良好习惯不要随意用*
select id,name,age,dep_id from tab_name 

9.删除数据

delete from tab_name where id='1' 

10.排序

# order by: 排序 
# DESC: 降序,从大到小
# ASC: 升序,从小到大(系统默认)
select id,name,age,dep_id from tab_name order by age DESC

11.分组

# group by: 排序
select id,name,age,dep_id from tab_name group by age
# 通过 age字段分组 如果age中有重复数据 那么在结果集中只会保留第一条数据
# group by 通常用于配合聚合函数使用
# 常用的聚合函数:COUNT()总数量总行数、SUM()总数总和、AVG()平均值、MIN()最小值、MAX()最大值
select count(age) from tab_name group by age
# 比如有3个人的age一样,那么查出来的就是3

12.模糊查询

# like: 模糊查询
select id,name,age,dep_id from tab_name where name like '%小狐狸%'
# 通常like配合通配符使用
# 常用的通配符:
# 	%:表零个或多个字符
# 	_:仅替代一个字符
# 	[]:字符列中的任何单一字符
# 	[^]/[!]:不在字符列中的任何单一字符

13.去重

# distinct:去重
select distinct(age) from tab_name
# distinct 通常配合聚合函数使用 比如:获取重复的数据有多少个
select count(distinct(age)) as "重复个数" from tab_name
# 如果想要只获取重复数据的第一条,可以用排序去处理

如果想要只获取重复数据 sql 如下

select t.id,t.name,t.age,t.dep_id from tab_name as t where t.age in (select ta.age from tab_name as ta group by ta.age having count(ta.age) > 1)

14.分页

# limit: 分页
select id,name,age,dep_id from tab_name limit 0,10
# 0,10:获取第1条到第10条数据

15.表连接

# inner join: 内连接
# 2张有关联表 通过关联数据 打印他们共同的部分
select t.id,t.name,t.age,t.dep_id,s.pass_word from tab_name as t inner join sys_user as s where s.age = t.age

# left join: 左连接
# 2张有关联表 通过关联数据 打印左表的全部数据以及右表有关联的数据
select t.id,t.name,t.age,t.dep_id,s.pass_word from tab_name as t left join sys_user as s on s.age = t.age

# right join: 右连接
# 2张有关联表 通过关联数据 只打印左表跟右表有关联的数据
select t.id,t.name,t.age,t.dep_id,s.pass_word from tab_name as t right join sys_user as s on s.age = t.age

# union: 全连接 会清除重复数据
select name as uname,age from tab_name
union
select user_name as uname,age from sys_user

# union all: 全连接 不会清除重复数据
select name as uname,age from tab_name
union all
select user_name as uname,age from sys_user

16.修改字段类型及长度

alter table tab_name modify column age varchar(255)

17.修改字段名

alter table 表名 change 字段名 字段新名称 字段的类型

18.添加字段

# 新增默认为空的字段
alter table 表名 add column 字段名 字段类型 default null
# 新增不为空的字段
alter table 表名 add column 字段名 字段类型 not null
# 新增不为空的字段 默认值为1
alter table 表名 add 字段名 字段类型 not null default 默认值

19.删除字段

alter table 表名 drop column 字段名
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小狐狸崽子OvO

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

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

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

打赏作者

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

抵扣说明:

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

余额充值