MySQL
登录
mysql -uroot -p1234 -- 登录
exit //退出
注释
#不区分大小写,建议大写
/* 多行
注释 */
-- 内容 -- 单行注释
#单行注释
/*
DDL 操作数据库或者表
DML/DQL 对表中的数据增删改/查
DCL 对数据库权限控制
*/
DDL
对数据库操作
show databases; #查询所有数据库
create database 数据库名称; #创建数据库
create database if not exists 数据库名称; #如果名为name的数据库不存在再创建
drop database 数据库名称; #删除数据库
drop database if exists 数据库名称; #同上
use 数据库名称; #使用(进入)数据库
select database(); #查询当前使用(所在)的数据库
对表操作
查询
show tables; #查询当前数据库的表
desc 表名称; #查询具体的表的机构信息
创建
create table 表名(
名字1 数据类型1,
名字2 数据类型2,
...
名字n 数据类型n -- 最后不加 逗号
);
#名字 double(分数总长度最大值,小数点后保留位数)
#名字 int -- 直接用
#name char(最长字数) 固定占用最长字数存储 空间换时间
#name varchar(最长字数) 根据数据实际占用存储 时间换空间
删除
drop table 表名;
drop table if exists 表名;
修改
alter table 原名字 rename to 新名字; #更改表名
alter table 表名 add 列名 数据类型; #添加新的列
alter table 表名 modify 列名 新数据类型; #修改某一列数据类型
alter table 表名 change 列名 新列名 新数据类型; #同时修改数据类型和列名
alter table 表名 drop 列名; #删除列
DML
添加数据
insert into 表名(列名1,列名2,...) values(值1,值2...);
#给指定列添加数据 添加一行数据
insert into 表名 values(值1,值2...);
#给所有数据添加数据
insert into 表名(列名1,列名2,...) values(值1,值2...),values(值1,值2...)..;
#批量给指定列添加数据
修改数据
update 表名 set 列名1=值1,列明2=值2... where 条件;
-- 当where条件的时候 将对应列的数据改为值1..
#如果没有加where条件,则表中全部改变!
删除数据
delete from 表名 where 条件;
#如果没有加where条件,则表中全部删除!
DQL
select
字段列表
from
表格名称
where
条件列表
group by
分组字段
having
分组后条件
order by
排序字段
limit
分页限定
基础查询
-- 查询特定列
select 列名1,列名2,... from 表格名
#去重 加distinct
select distinct 列名1,列名2,.. from 表格名
#取别名 可以不加as
select
列名1 as 别名1,
列名2 as 别名2,
...
from
表格名
#查询所有列,但是不要用!
select * from 表格名
条件查询
-- 查询范围在 范围1 和 范围2 之间的数据
where between 范围1 and 范围2;
where between 列名 >= 范围1 and 列名 <= 范围2; #含义同上
-- 查询列中数值是否为括号中数值
where 列名 in (数值1,数值2,..)
where 列名 = 数值1 or 列名 = 数值2 or .. ;
-- null 不能用等号和不等号判断,用is 或 is not
where 列名 is null; #查询列中为null的
where 列名 is not null; #查询列中不是null的
-- 模糊查询
/*
_: 代表单个任意字符
%: 代表任意个数字符
*/
where 列名 like '%德%'; #此为查询名字包含'德'字的列中的内容
-- && = and
-- || = or
-- 日期类型 也是可以用 大小于号 比较的
-- 判断相等为 =,不是 ==
-- 不等号 != 或 <>
排序查询
-- 优先列名1 排列方式1,若相同则判断列名2 排列方式2..
select 列名 from 表名 order by 列名1 排序方式1,列名2 排序方式2, ..;
-- asc 升序 默认升序
-- desc 降序
分组查询
聚合函数
将一列函数作为一个整体,进行纵向操作
select 聚合函数名(列名) from 表名;
-- null 不参与聚合函数计算
select count(*) from 表名; #查询表中数量
分组查询
-- having 是聚合操作完以后 再进行数据的筛选
select 列名,聚合函数 from [where 分组前条件限定]表名 group by 列名 [having 分组后条件过滤];
分页查询
select 字段名 from 表名 limit 起始索引,查询条目数 -- limit 是MySQL特有的
约束
普通约束
对一列的数据进行有约束
-- MySQL不支持检查约束
-- 默认约束 是只有不给字段添加任何值的时候才行,如果给了null,那么就是null
外键约束
-- 先创建主表 再创建子表
-- 创建表的时候加外键约束
create table 表名(
列名 数据类型,
...
[constraint] [外键名称] foreign key(外键列名) references 主表(主表列名)
);
-- 创建表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key(当前表要添加列名) references 主表名称(主表列名称);
-- 删除约束
alter table 表名 drop foreign key 外键名称;
数据库设计
表关系
一对多,多对多,一对一