Mysql
目录
Mysql
Sql语句分类
- DDL 定义语言
- DML 操作语言
- DCL 控制语言(权限相关)
- DQL 查询语言
注释方法
- --
- /* */
-
#
简单操作
库操作
操作文件夹(库)
增 create database db1 charset utf8;
查 show create database db1;
show databases;
select database();
改 alter database db1 charset gbk;
删 drop database db1;
表操作
操作文件(表)
切换文件夹:use db1;
查看当前所在文件夹:select database();
增 create table t1(id int,name char);
查 show create table t1;
show tables;
desc t1;
改 alter table t1 modify name char(6);
alter table t1 change name NAME char(6)
alter table t1 add age int;
alter table t1 drop age;
rename table t1 to t2 ;
## unique相关
alter table userinfo add unique(xxx,xxx);
alter table userinfo modify name char(30) unique;
alter table userinfo drop index name; #删除约束
删 drop table t1;
truncate t20; #应该用它来清空表
记录操作
操作文件内容(记录)
增 insert t1(id,name) values(1,'egon1'), (2,'egon2'),(3,'egon3');
查 select id,name from db1.t1;
select * from db1.t1;
and &&
or ||
asc 默认升序
dsc 降序
改 update db1.t1 set name='SB';
update db1.t1 set name='ALEX' where id=2;
删 delete from t1;
delete from t1 where id=2;
数据类型
数值
日期
字符串
枚举和集合类型
enmu只能一个 集合可以多个
create table consumer
( id int,
name char(16),
sex enum('male','female','other'),
level enum('vip1','vip2','vip3'),
hobbies set('play','music','read','run')
);
表约束
not null 与 default
create table t15( id int(11) unsigned zerofill);
create table t16( id int, name char(6), sex enum('male','female') not null default 'male');
unique key
#单列唯一
#方式一
create table department( id int unique, name char(10) unique);
#方式二:
create table department( id int, name char(10),unique(id), unique(name));
#联合唯一
create table services( id int, ip char(15), port int, unique(id),unique(ip,port));
primary key
# 单列主键
create table t17( id int primary key, name char(16));
# 复合主键
create table t19( ip char(15), port int, primary key(ip,port));
auto_increment
create table t20( id int primary key auto_increment, name char(16));
#了解
show variables like 'auto_inc%';
#步长:
auto_increment_increment默认为1
#起始偏移量
auto_increment_offset默认1
#设置步长
set session auto_increment_increment=5; set global auto_increment_increment=5;
#设置起始偏移量
set global auto_increment_offset=3; 强调:起始偏移量<=步长
foreign key(外键)
#1、建立表关系: **
#先建被关联的表,并且保证被关联的字段唯一
create table dep(id int primary key,name char(16),comment char(50));
#再建立关联的表
create table emp
( id int primary key,
name char(10),
sex enum('male','female')**,
dep_id int, foreign key(dep_id) references dep(id)
on delete cascade
on update cascade);
As 起别名
select name as 姓名 from student;
select t.name as xx,t.age as xx from teacher t'
分组
根据哪个字段分的组 就只能查哪个字段
要查询其他字段 用 grop_concat() count ,avg,sum,max,min
SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;#按照岗位分组,并查看组内成员名
函数
字符串函数
数学函数
round(xxx,1) 保留一位小数·
日期时间函数
比较日期 要 date(字段)
控制流函数
Like
- % 任意
- _ 任意单个
事务
- 开启事务
start transaction
- 提交事务
commit
- 回滚事务
rollback
其他
delete from Vs truncate
delete from 只删数据 外键 约束等还在 速度慢
truncate 全删 速度快
存储引擎
权限管理
复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;
只复制表结构
mysql> select * from service where 1=2; //条件为假,表记录为空
mysql> create table t4 like employees;
concat 定义显示格式
SELECT CONCAT('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary FROM employee;
case
#有比较大小 case后面为空
select
name,
(case
when age>18 then "成年人" else "未成年"
end) 年龄
from employee;
# 无比较大小 case后面写字段
select
name,
(case name when "alex" then "sb" else "其他" end )
from employee
where Vs having
有聚合函数的地方就不能用where
#!!!执行优先级从高到低:where > group by > having
#1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
#2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
exists
带EXISTS关键字的子查询EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。
而是返回一个真假值。True或False
当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询
数据备份
视图 触发器 事务 存储过程 函数
https://www.cnblogs.com/linhaifeng/articles/7495918.html
视图
- 语法
create [or replace] [algorithm={undefined|merge|temptable}]
view viewname [(column_list)]
as select_statement
[with [cascaded|local] check option]
- 创建试图
- 修改视图
create or replace
- 删除视图
存储过程
-
定义
## 无参数 delimiter// create procedure p1 () begin select*from db7.teacher; end delimiter// #Mysql call p1(); #Python cursor.call_proc('p1') ##有参数 delimiter// create procedure p1 (in n1 int,in n2 int,out res int) begin select*from db7.teacher where tid >n1 and tid<n2; set res =1; end delimiter// #Mysql set @x=0 call p1(2,4,@x) select @x #Pymysql cursor.cakk_proc('p1',(2,4,0))
-
查看 修改
show create procedure p1; alter drop
索引原理与慢查询优化
https://www.cnblogs.com/linhaifeng/articles/7274563.html
其他
开启查询时间
select@@profiling;
#0关闭 1开启
set profiling=1;
#查看全部
show profiles;
#查看上一个详细信息
show profile;
show profile for query 2;
查看版本
select version()