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 字段名