mysql
基础命令
1.1 启动、关闭MySQL服务器
启动:net start mysql
关闭:net stop mysql
1.2 登录MySQL服务器
mysql -u账号 -p密码 ip地址
root:管理员账号(最高权限)
数据操作语言(DML)
1.数据库操作
- 显示所有数据库
命令: show databases; - 创建数据库
格式: create database 数据库名 chatset=utf8; - 切换数据库
use 数据库名 - 显示当前数据库中的所有表
show tables; - 删除数据库
drop database 数据库名;
2.表操作
2.1创建表
create table 表名(列名 类型 [约束1[,约束2[,……]]])
注意:建表之前,要切换到数据库
2.2.查看表结构
desc 表名;
2.3.删除表
drop table 表名;
2.4.修改表结构
alter table 表名
1)添加列 add
alter table 表名 add 列名 列类型 约束 after 已有列,add 列名 列类型 约束 after 已有列...;
注意:默认在表的末尾添加列。可以使用after指定位置
2)修改列类型 modify
alter table 表名 modify 列名 列新类型 约束,modify 列名 列新类型 约束...;
注意:modify可以修改类型及约束。但不能添加主键约束
3)修改列名 change
alter table 表名 change 新列名 列类型 约束,change 新列名 列类型 约束...;
4)删除列 drop
alter table 表名 drop 列名,drop 列名...;
5)修改表名 rename 或 rename to
alter table 表名 rename to 新表名
6)添加和删除主键
删除主键:alter table 表名 drop primary key;
添加主键:alter table 表名 add primary key(主键列);
7)外键
1 . 外键约束作用
对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性
2. 对于已经存在的字段添加外键约束
-- 为cls_id字段添加外键约束
alter table students add foreign key(cls_id) references classes(id);
3. 在创建数据表时设置外键约束
-- 创建学校表
create table school(id int not null primary key auto_increment,name varchar(10));
-- 创建老师表
create table teacher(id int not null primary key auto_increment,name varchar(10),s_id int not null,foreign key(s_id) references school(id));
4. 删除外键约束
-- 需要先获取外键约束名称,该名称系统会自动生成,可以通过查看表创建语句来获取名称
show create table teacher;
-- 获取名称之后就可以根据名称来删除外键约束
alter table teacher drop foreign key 外键名;
5. 小结
- 添加外键约束: alter table 从表 add foreign key(外键字段) references 主表(主键字段);
- 删除外键约束: alter table 表名 drop foreign key 外键名;
2.5.数据类型
整型:int(长度),默认长度11
age int (5) 或 age int
字符型:
1)不可变长字串:char(长度)
2)可变长字符串:varchar(长度)
name char(10):元字符,长度小于20时,数据存储时,也占20字符
name varchar(10):元字符,长度小于20时,数据存储时,以实际长度为准
小数:
float(总长度,小数位)
double(总长度,小数位)
decimal(总长度,小数位)
日期:
date
datetime
year
集合:多选
set
枚举:单选
enum
2.6.约束:插入的数据时的限制
主键:primary key
特点1:非空并且唯一
特点2:可以被引用
自增长:auto_increment
非空: not null
插入数据时,该字段不能为null
唯一:unique
插入数据时,该字段不能重复
注意:对一个字段做非空且唯一约束,并不等于主键
默认值:default值
当插入数据时,该字段可以没数据,此时用默认值补充
外键:
constraint 外键名 foreign key (列名) references 引用表名(主键列名
DDL 数据定义语言(表记录的修改)
3.1.插入数据 insert into
指定列插入数据:insert into 表名(列名,列名...) values(对应列的值),(对应列的值),...;
注意:未指定的列,补null,如果未指定的列有约束,按照数据的约束来添加内容
插入全部列数据:insert into 表名 values(所有列的值),(所有列的值),...;
注意:有默认值的约束:可以用default占位,将用默认值来代替
如果某列不想插入数据,写null
3.2.修改表记录 update
update 表名 set 列名=值,...where 条件
注意:如果没有where子句,将会修改所有记录
3.3.删除表记录 delete
delete from 表名 where 条件
注意:如果没有where子句,删除所有表记录
DQL 数据查询语言
select 列名 as别名,别名,...
from 表名
where 条件
group by 列名 select deptno,group_concat(ename) from emp group by deptno;
order by 列名
having二次筛选条件
1)条件的关系:
and(并且)\or(或者)\not(反)
2)模糊查询:like
%:替代多个字符
_:替代单个字符
3)范围查询:in
4)不在范围:not in
5)区间查询:列名 between 开始值 and 终止值
6)控制处理函数:ifnull(字段名,替代空的值)
7)排序:
order by 列名 升\降
asc 升序(默认)
desc:降序
8)分组:
group by 列名
注意:一般查询的内容都是分组列和聚合函数
group_concat(列名)函数:按照分组,将指定列的所有内容在一列显示
having子句;二次筛选
having子句和where子句的区别:如果表中有的列作判断条件,用where子句;
如果表中没有的列,用having子句
9)聚合函数
求个数:count(列名)
求总和:sum(列名)
求平均:avg(列名)
保留小数:round(内容,小数位)
求最大值: max(列名)
求最小值:min(列名)
连接查询(多表查询)
1.内连接:两张表中都有的内容才会显示
select 表1.列名,表2.列名,...
from 表1 inner join 表2 on 表1.列名=表2.列名
where 条件
group by 列名
2.外连接
左外连接:左表全部显示,右表没有对应,用null补充
select 表1.列名,表2.列名,..
from 表1 left outer join 表2 on 表1.列名=表2.列名
where 条件
group by 列名
右外连接:右表全部显示,左表没有对应,用null补充
select 表1.列名,表2.列名,..
from 表1 right outer join 表2 on 表1.列名=表2.列名
where 条件
group by 列名
注意:先写的表叫左表,后写的叫右表
自连接
同一张表,起两个别名,逻辑上当两张表看待
建表areas(id,name,pid)完成一下查询
查询地名编号、地名名称以及其所属的地域名
select a.id,a.name,b.name
from areas as a left join areas as b on b.id=a.pid;
分页
limit(开始位置,每页记录数)
规则:每页n条记录,显示第m页的算法规则
limit (m-1)*n,n
子查询
1.子查询结果为单行单列,运算符:>,<,>=,<=,!=,=
空值查询:例题:查询奖金为空时的员工.is
在emp表中列出薪金比关羽高的
select * from emp where salary>(select salary from emp where name='关羽')
2.子查询姐过为单行多列:运算符 in
查询和关羽工作\薪资一样的员工信息
select * from emp
-> where (job,salary) in (select job,salary from emp where ename='关羽');
3.子查询结果为多行单列:运算符:in、any(任意)、all(所有)
查询所有工资高于2部门所有人的员工信息
事务处理
1.创建事务
begin;
2.数据库操作
3.提交
commit;
4.回滚(撤销所有内存中的操作)
rollback;
视图(一张用select查询出来的虚拟表)
1.创建视图
create view 视图名 as select 语句
视图名:尽量做到以V开头
2.使用视图(仅用于查询)
3.查看视图
show tables
4.删除视图
drop view 视图名
索引
1.检测sql语句运行时间
set profiling=1;
2.创建索引
create index 索引名 on 表名(索引列名(列长度))
3.查看索引
show index from 表名
4.查看sql语句运行的时间
show profiles;
5.删除索引
drop index 索引名 on 表名(字段名) ;