社会保险本着mysql经常使用语句的事无巨细总结

下面总结的知识点都是常用的,全都是干货,好好珍藏吧。

/* 启动mysql */
net start mysql

/* 连接和断开服务器 */
mysql -h 地址 -p 端口 -u 用户名 -p 密码

/* 跳了权力验证登录mysql */
mysqld –skip-grant-tables
— 修改root密码
密码加密函数password()
update mysql.user set password=password(‘root’);

show processlist — 显示怎么线程正在周转
show variables —

/* 数据库操作 */ ——————
— 查看时数据库
select database();
— 显示当前时刻、用户称、数据库版本
select now(), user(), version();
— 创建库
create database[ if not exists] 数据库名 数据库选项
数据库选项:
character set charset_name
collate collation_name
— 查看已发生库
show databases[ like ‘pattern’]
— 查看时库信息
show create database 数据库名
— 修改库的挑三拣四项信息
alter database 库名 选项信息
— 删除库
drop database[ if exists] 数据库名
并且删除该数据库相关的目录及其目录内容

/* 表的操作 */ ——————
— 创建表
create [temporary] table[ if not exists] [库名.]说明名 (
表的结构定义 )[ 表选项]
每个字段必须出数据类型
末了一个字段后无可知起逗号
temporary 临时表,会话结束时表自动消失
对于字段的概念:
字段名 数据类型 [not null | null] [default default_value]
[auto_increment] [unique [key] | [primary] key] [comment
‘string’]
— 表选项
— 字符集
charset = charset_name
假使表没有设定,则采取数据库字符集
— 存储引擎
engine = engine_name
发明在管理数据经常采用的不等的数据结构,结构不一会促成处理方式、提供的风味操作等不同
广泛的引擎:innodb myisam memory/heap bdb merge example csv maxdb
archive
差的发动机在保存表的布局以及数码经常利用不同的不二法门
myisam表文件含义:.frm表定义,.myd表数据,.myi表索引
innodb表文件含义:.frm表定义,表空间数据和日志文件
show engines — 显示存储引擎的状态信息
show engine 引擎名 {logs|status} — 显示存储引擎的日记或状态信息
— 数据文件目录
data directory = ‘目录’
— 索引文件目录
index directory = ‘目录’
— 表注释
comment = ‘string’
— 分区选项
partition by … (详细呈现手册)
— 查看所有表
show tables[ like ‘pattern’]
show tables from 表名
— 查看表机构
show create table 表名 (信息再详尽)
desc 表名 / describe 表名 / explain 表名 / show columns from 表名 [like
‘pattern’]
show table status [from db_name] [like ‘pattern’]
— 修改表
— 修改表本身的选料
alter table 表名 表的选料
eg: alter table 表名 engine=myisam;
— 对表进行再命名
rename table 原表名 to 新表名
rename table 原表名 to 库名.表名 (可拿说明动及任何一个数据库)
— rename可以换成两只表名
— 修改表的字段机构
alter table 表名 操作名
— 操作名
add[ column] 字段名 — 增加字段
after 字段名 — 表示增加在拖欠字段名后面
first — 表示增加在第一独
add primary key(字段名) — 创建主键
add unique [索引名] (字段名)– 创建唯一索引
add index [索引名] (字段名) — 创建普通索引
add
drop[ column] 字段名 — 删除字段
modify[ column] 字段名 字段属性 —
支持对配段属性进行改动,不克改字段名(所有原有属性也要写及)
change[ column] 原字段名 新字段名 字段属性 — 支持针对许段名修改
drop primary key — 删除主键(删除主键前待去其auto_increment属性)
drop index 索引名 — 删除索引
drop foreign key 外键 — 删除外键

— 删除表
drop table[ if exists] 表名 …
— 清空表数据
truncate [table] 表名
— 复制表结构
create table 表名 like 要复制的表名
— 复制表结构和多少
create table 表名 [as] select * from 要复制的表名
— 检查表是否出不当
check table tbl_name [, tbl_name] … [option] …
— 优化表
optimize [local | no_write_to_binlog] table tbl_name [,
tbl_name] …
— 修复表
repair [local | no_write_to_binlog] table tbl_name [, tbl_name]
… [quick] [extended] [use_frm]
— 分析表
analyze [local | no_write_to_binlog] table tbl_name [,
tbl_name] …

 

/* 数据操作 */ ——————
— 增
insert [into] 表名 [(字段列表)] values (值列表)[, (值列表), …]
— 如果假定插入的值列表包含有字段并且逐一一致,则好省略字段列表。
— 可同时插入多漫长数记录!
replace 与 insert 完全平等,可换。
insert [into] 表名 set 字段名=值[, 字段名=值, …]
— 查
select 字段列表 from 表名[ 其他子句]
— 可来多只说明底大多独字段
— 其他子句可以免采用
— 字段列表可以用*代替,表示拥有字段
— 删
delete from 表名[ 删除条件子句]
并未规则子句,则会删除所有
— 改
update 表名 set 字段名=新值[, 字段名=新值] [更新标准]

/* 字符集编码 */ ——————
— mysql、数据库、表、字段均只是装编码
— 数据编码与客户端编码不欲一致
show variables like ‘character_set_%’ — 查看所有字符集编码项
character_set_client 客户端向服务器发送数据经常用的编码
character_set_results 服务器端将结果回到给客户端所运用的编码
character_set_connection 连接层编码
set 变量名 = 变量值
set character_set_client = gbk;
set character_set_results = gbk;
set character_set_connection = gbk;
set names gbk; — 相当给完成以上三独装
— 校对集
校集用以排序
show character set [like ‘pattern’]/show charset [like ‘pattern’]
查看有字符集
show collation [like ‘pattern’] 查看有校对集
charset 字符集编码 设置字符集编码
collate 校对集编码 设置校对集编码

/* 数据类型(列类型) */ ——————

  1. 数值类
    — a. 整型 ———-
    类 字节 范围(有号子位)
    tinyint 1字节 -128 ~ 127 无标志位:0 ~ 255
    smallint 2字节 -32768 ~ 32767
    mediumint 3字节 -8388608 ~ 8388607
    int 4字节
    bigint 8字节

int(m) m代表总位数

  • 默认存在符号位,unsigned 属性修改
  • 展示涨幅,如果有数不敷定义字段时设置的位数,则前面以0补填,zerofill
    属性修改
    章:int(5) 插入一个数’123’,补填后为’00123′
  • 于满足要求的景况下,越聊更好。

    1意味着bool值真,0意味着bool值假。mysql没有布尔类型,通过整型0和1表示。常因此tinyint(1)表示布尔型。

— b. 浮点型 ———-
类型 字节 范围
float(单精度) 4字节
double(双精度) 8字节
浮点型既支持符号位 unsigned 属性,也支撑显得涨幅 zerofill 属性。
不同为整型,前后俱会加填0.
概念浮点型时,需点名总位数与小数位数。
float(m, d) double(m, d)
m表示总位数,d表示小数位数。
m和d的大小会决定浮点数的界定。不同为整型的定势范围。
m既表示总位数(不包小数点和正负号),也意味着显示涨幅(所有显示符号都包括)。
支撑科学计数法表示。
浮点数表示近似值。

— c. 定点数 ———-
decimal — 可转移长
decimal(m, d) m也代表总位数,d表示小数位数。
保留一个准儿的数值,不会见发生多少的变更,不同为浮点数的季放弃五合乎。
以浮点数转换为字符串来保存,每9各数字保存也4独字节。

  1. 字符串类型
    — a. char, varchar ———-
    char 定长字符串,速度快,但浪费空间
    varchar 变长字符串,速度放缓,但节省空间
    m表示能积存的无比酷尺寸,此尺寸是字符数,非字节数。
    不等之编码,所占的半空中不同。
    char,最多255个字符,与编码无关。
    varchar,最多65535字符,与编码有关。
    一律漫漫中记录最特别不能够超越65535单字节。
    utf8 最大为21844个字符,gbk 最大为32766个字符,latin1
    最大为65532个字符
    varchar 是易长的,需要采取存储空间保存 varchar
    的长短,如果数据低于255单字节,则运用一个字节来保存长度,反的要少独字节来保存。
    varchar 的无比要命使得长度由最要命实施大小与采用的字符集确定。
    尽酷使得长度是65532字节,因为在varchar存字符串时,第一只字节是拖欠的,不设有其他数,然后还用两个字节来存放在字符串的长度,所以中长度是64432-1-2=65532字节。
    章:若一个表定义为 create table tb(c1 int, c2 char(30), c3 varchar(n))
    charset=utf8; 问n的卓绝大值是稍稍? 答:(65535-1-2-4-30*3)/3

— b. blob, text ———-
blob 二向前制字符串(字节字符串)
tinyblob, blob, mediumblob, longblob
text 非第二迈入制字符串(字符字符串)
tinytext, text, mediumtext, longtext
text 以概念时,不欲定义长度,也无会见算计总长度。
text 类型在概念时,不可被default值

— c. binary, varbinary ———-
类似于char和varchar,用于保存二向前制字符串,也即是保存字节字符串而无字符字符串。
char, varchar, text 对应 binary, varbinary, blob.

  1. 日期时项目
    貌似用整型保存时间戳,因为php可以很方便之将时间戳进行格式化。
    datetime 8字节 日期就间 1000-01-01 00:00:00 到 9999-12-31 23:59:59
    date 3字节 日期 1000-01-01 到 9999-12-31
    timestamp 4字节 时间戳 19700101000000 到 2038-01-19 03:14:07
    time 3字节 时间 -838:59:59 到 838:59:59
    year 1字节 年份 1901 – 2155

datetime “yyyy-mm-dd hh:mm:ss”
timestamp “yy-mm-dd hh:mm:ss”
“yyyymmddhhmmss”
“yymmddhhmmss”
yyyymmddhhmmss
yymmddhhmmss
date “yyyy-mm-dd”
“yy-mm-dd”
“yyyymmdd”
“yymmdd”
yyyymmdd
yymmdd
time “hh:mm:ss”
“hhmmss”
hhmmss
year “yyyy”
“yy”
yyyy
yy

  1. 枚举和聚集
    — 枚举(enum) ———-
    enum(val1, val2, val3…)
    在曾知晓之价值备受进行单选。最充分数额为65535.
    枚举值在保存时,以2只字节的整型(smallint)保存。每个枚举值,按保存的职顺序,从1始发逐递增。
    呈现为字符串类型,存储却是整型。
    null值的目录是null。
    空字符串错误值的索引值是0。

— 集合(set) ———-
set(val1, val2, val3…)
create table tab ( gender set(‘男’, ‘女’, ‘无’) );
insert into tab values (‘男, 女’);
无限多得生出64只不同之成员。以bigint存储,共8独字节。采取各项运算的样式。
当创建表时,set成员值的尾巴空格将机关为去除。

/* 选择品种 */
— php角度

  1. 功用满足
  2. 存储空间尽量小,处理效率又强
  3. 考虑兼容问题

— ip存储 ———-

  1. 只有需要贮存,可用字符串
  2. 假如急需计算,查找等,可存储吗4只字节的无符号int,即unsigned
    1) php函数转换
    ip2long可转移为整型,但会出现携带符号问题。需格式化为无符号的整型。
    运sprintf函数格式化字符串
    sprintf(“%u”, ip2long(‘192.168.3.134’));
    然后用long2ip将整型转回ip字符串
    2) mysql函数转换(无符号整型,unsigned)
    inet_aton(‘127.0.0.1’) 将ip转为整型
    inet_ntoa(2130706433) 将整型转为ip

 

/* 列属性(列约束) */ ——————

  1. 主键
  2. 能够唯一标识记录的字段,可以视作主键。
  3. 一个表明只能有一个主键。
  4. 主键具有唯一性。
  5. 声明字段时,用 primary key 标识。
    呢可以于字段列表之后声明
    例:create table tab ( id int, stu varchar(10), primary key (id));
  6. 主键字段的值不可知也null。
  7. 主键可以由多单字段共同组成。此时得以字段列表后声称的章程。
    例:create table tab ( id int, stu varchar(10), age int, primary key
    (stu, age));

  8. unique 唯一索引(唯一约束)
    教某字段的值吗非能够重复。

  9. null 约束
    null不是数据类型,是排的一个特性。
    表示目前排是否足以啊null,表示什么都不曾。
    null, 允许为空。默认。
    not null, 不允许吗空。
    insert into tab values (null, ‘val’);
    — 这表示以首先独字段的值设为null, 取决于该字段是否同意为null

  10. default 默认值属性
    时字段的默认值。
    insert into tab values (default, ‘val’); — 此时代表强制行使默认值。
    create table tab ( add_time timestamp default current_timestamp );
    — 表示以目前光阴的年月戳设为默认值。
    current_date, current_time

  11. auto_increment 自动增长约
    电动增长得为索引(主键或unique)
    不得不存在一个字段为自行增长。
    默认为1起活动增长。可以通过表属性 auto_increment = x进行设置,或
    alter table tbl auto_increment = x;

  12. comment 注释
    章:create table tab ( id int ) comment ‘注释内容’;

  13. foreign key 外键约束
    用来限制主表与从表数据完整性。
    alter table t1 add constraint `t1_t2_fk` foreign key (t1_id)
    references t2(id);
    — 将表t1的t1_id外键关联到表t2底id字段。
    — 每个外键都起一个名,可以透过 constraint 指定

是外键的阐发,称之为从表(子表),外键指向的发明,称之为主表(父表)。

图:保持数据一致性,完整性,主要目的是控制存储于外键表(从表)中的数量。

mysql中,可以针对innodb引擎使用外键约束:
语法:
foreign key (外键字段) references 主表名 (关联字段)
[主表记录删除时的动作] [主表记录更新时之动作]
这会儿亟需检测一个从表的外键需要约束为主表的早已是的值。外键在未曾涉及的情况下,可以设置也null.前提是该外键列,没有not
null。

好不指定主表记录转或者更新时的动作,那么此时主表的操作为驳回。
假如指定了 on update 或 on
delete:在剔除或更新时,有如下几个操作可以择:
1.
cascade,级联操作。主表数据为更新(主键值更新),从表也受更新(外键值更新)。主表记录受删,从表相关记录也被删去。

  1. set
    null,设置为null。主表数据让更新(主键值更新),从表的外键被设置为null。主表记录受删除,从表相关记录外键被装成null。但注意,要求该外键列,没有not
    null属性约束。
  2. restrict,拒绝父表删除和创新。

留意,外键只吃innodb存储引擎所支持。其他发动机是匪支持之。

/* 建表规范 */ ——————
— normal format, nf

  • 每个表保存一个实体信息
  • 每个有一个id字段作为主键
  • id主键 + 原子表
    — 1nf, 第一范式
    字段不可知再分开,就满足第一范式。
    — 2nf, 第二范式
    满足第一范式的前提下,不能够出现部分因。
    解符合主键就得免有些因。增加单列关键字。
    — 3nf, 第三范式
    满足第二范式的前提下,不能够出现传递依赖。
    某字段依赖让主键,而发出另外字段依赖让该字段。这就是传递依赖。
    用一个实体信息之数在一个表内实现。

/* select */ ——————

select [all|distinct] select_expr from -> where -> group by
[说道函数] -> having -> order by -> limit

a. select_expr
— 可以用 * 表示拥有字段。
select * from tb;
— 可以以表达式(计算公式、函数调用、字段也是只表达式)
select stu, 29+25, now() from tb;
— 可以吧每个列下别名。适用于简化列标识,避免多单列标识符重复。

  • 应用 as 关键字,也不过看略 as.
    select stu+10 as add10 from tb;

b. from 子句
用于标识查询来源。
— 可以吧说明起别名。使用as关键字。
select * from tb1 as tt, tb2 as bb;
— from子词后,可以以起多个说明。
— 大抵只表会横向叠加到齐,而数会形成一个笛卡尔积。
select * from tb1, tb2;

c. where 子句
— 于from获得的数据源中进行筛。
— 整型1表示真,0表示假。
— 表达式由运算符和运算数组成。
— 运算数:变量(字段)、值、函数返回值
— 运算符:
=, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
in (not) null, (not) like, (not) in, (not) between and, is (not), and,
or, not, xor
is/is not 加上ture/false/unknown,检验某个值的真伪
<=>与<>功能雷同,<=>可用来null比较

d. group by 子句, 分组子句
group by 字段/别名 [排序方式]
分组后会见开展排序。升序:asc,降序:desc

以下[共谋函数]需配合 group by 使用:
count 返回不同的非null值数目 count(*)、count(字段)
sum 求和
max 求最大值
min 求最小值
avg 求平均值
group_concat
返回带有来自一个组的连天的非null值的字符串结果。组内字符串连接。

e. having 子词,条件子句
跟 where 功能、用法平,执行会不比。
where 在开头时实施检测数据,对原本数开展过滤。
having 对罗产生的结果又开展过滤。
having 字段必须是查询出来的,where 字段必须是数据表存在的。
where 不可以动用字段的号,having
可以。因为执行where代码时,可能没确定列值。
where 不得以采取协议函数。一般需要用合计函数才会用 having
sql标准要求having必须引用group by子句被之排或用于合计函数中的排列。

f. order by 子句子,排序子句
order by 排序字段/别名 排序方式 [,排序字段/别名 排序方式]…
升序:asc,降序:desc
支持多单字段的排序。

g. limit 子句子,限制结果数量子句
单单对处理好的结果进行数量限制。将处理好之结果的当是一个聚集,按照记录出现的逐条,索引从0开始。
limit 起始位置, 获取条数
简单易行第一只参数,表示从索引0开始。limit 获取条数

h. distinct, all 选项
distinct 去除重复记录
沉默寡言认为 all, 全部记下

/* union */ ——————
用大半只select查询的结果成成一个结实集合。
select … union [all|distinct] select …
默认 distinct 方式,即有返回的实行还是唯一的
提议,对每个select查询加上小括声泪俱下包裹。
order by 排序时,需加上 limit 进行结合。
欲各个select查询的字段数量一样。
每个select查询的字段列表(数量、类型)应同,因为结果受之字段名以第一修select语句也以。

/* 子查询 */ ——————

  • 分段查询需要用括号包裹。
    — from型
    from后要求凡一个阐明,必须给子查询结果得到个别名。
  • 简化每个查询内之极。
  • from型需用结果好成一个即表格,可用以原表的锁定的自由。
  • 旁查询返回一个发明,表型子查询。
    select * from (select * from tb where id>0) as subfrom where
    id>1;
    — where型
  • 子查询返回一个价值,标量子查询。
  • 免欲给子查询取别名。
  • where子查询内之表明,不能够直接用于更新。
    select * from tb where money = (select max(money) from tb);
    — 列子查询
    如果子查询结果返回的凡一列。
    应用 in 或 not in 完成查询
    exists 和 not exists 条件
    如果子查询返回数据,则赶回1或0。常用来判断标准。
    select column1 from t1 where exists (select * from t2);
    — 行子查询
    查询条件是一个推行。
    select * from t1 where (id, gender) in (select id, gender from t2);
    行构造符:(col1, col2, …) 或 row(col1, col2, …)
    行构造符通常用于与对会回到两单或零星单以上列的子查询进行比较。

— 特殊运算符
!= all() 相当于 not in
= some() 相当于 in。any 是 some 的别名
!= some() 不均等于 not in,不对等其中有一个。
all, some 可以兼容其他运算符一起使用。

/* 连接查询(join) */ ——————
将多单说明的字段进行连接,可以指定连接条件。
— 内连接(inner join)

  • 默认就是内连续,可省略inner。
  • 只出多少有时时才会发送连接。即连续结果莫可知出现空行。
    on
    表示连接条件。其法表达式与where类似。也可简单条件(表示法永远为真)
    呢可用where表示连接条件。
    再有 using, 但需配段名相同。 using(字段名)

— 交叉连接 cross join
不怕,没有标准的内连接。
select * from tb1 cross join tb2;
— 外连接(outer join)

  • 设若数据不有,也会见面世于连续结果吃。
    — 左外连接 left join
    假定数据未存在,左表记录会出现,而右表为null填充
    — 右外接连 right join
    若是数据不存,右表记录会出现,而左表为null填充
    — 自然连接(natural join)
    自行判断连条件形成连接。
    一定给简单了using,会自行寻相同字段名。
    natural join
    natural left join
    natural right join

select info.id, info.name, info.stu_num, extra_info.hobby,
extra_info.sex from info, extra_info where info.stu_num =
extra_info.stu_id;

/* 导入导出 */ ——————
select * into outfile 文件地点 [操纵格式] from 表名; — 导出表数据
load data [local] infile 文件地点 [replace|ignore] into table 表名
[控制格式]; — 导入数据
变迁的数据默认的隔符是制表符
local未指定,则数据文件必须在服务器上
replace 和 ignore 关键词控制对现有的唯一键记录之又的拍卖
— 控制格式
fields 控制字段格式
默认:fields terminated by ‘\t’ enclosed by ” escaped by ‘\\’
terminated by ‘string’ — 终止
enclosed by ‘char’ — 包裹
escaped by ‘char’ — 转义
— 示例:
select a,b,a+b into outfile ‘/tmp/result.text’
fields terminated by ‘,’ optionally enclosed by ‘”‘
lines terminated by ‘\n’
from test_table;
lines 控制行格式
默认:lines terminated by ‘\n’
terminated by ‘string’ — 终止

/* insert */ ——————
select语句获得的数码可就此insert插入。

可略对列的指定,要求 values ()
括号内,提供于了按列顺序出现的所有字段的价值。
要么以set语法。
insert into tbl_name set field=value,…;

可一次性使用多单价值,采用(), (), ();的形式。
insert into tbl_name values (), (), ();

可在列值指定时,使用表达式。
insert into tbl_name values (field_value, 10+10, now());
可以采用一个特殊值 default,表示该列使用默认值。
insert into tbl_name values (field_value, default);

好经一个询问的结果,作为需要插入的价值。
insert into tbl_name select …;

可以指定在插入的值出现主键(或唯一索引)冲突时常,更新任何非主键列的信。
insert into tbl_name values/set/select on duplicate key update 字段=值,
…;

/* delete */ ——————
delete from tbl_name [where where_definition] [order by …]
[limit row_count]

本标准化去

指定删除的最多记录数。limit

得经过排序条件去。order by + limit

支持多表删除,使用类似连接语法。
delete from 需要去数据多表1,表2 using 表连接操作 条件。

/* truncate */ ——————
truncate [table] tbl_name
清空数据
剔除重建表

区别:
1,truncate 是剔除表再创建,delete 是各个条删除
2,truncate 重置auto_increment的值。而delete不会
3,truncate 不晓去了几长达,而delete知道。
4,当被用来带分区的表时,truncate 会保留分区

/* 备份与尚原 */ ——————
备份,将数据的构造及表内数据保存起来。
使 mysqldump 指令就。

— 导出

  1. 传输出同张表
      mysqldump -u用户名 -p密码 库名 表名 > 文件名(d:/a.sql)
  2. 导出多张表
      mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(d:/a.sql)
  3. 导出所有表
      mysqldump -u用户名 -p密码 库名 > 文件名(d:/a.sql)
  4. 导出一个仓房
      mysqldump -u用户名 -p密码 -b 库名 > 文件名(d:/a.sql)

好-w携带备份条件

— 导入

  1. 以签到mysql的状态下:
      source 备份文件
  2. 每当未记名的情景下
      mysql -u用户名 -p密码 库名 < 备份文件

/* 视图 */ ——————
什么是视图:
视图是一个虚拟表,其情节由询问定义。同实际的阐发一样,视图包含一层层涵盖名称的列和行数据。但是,视图并无以数据库中盖囤的多寡值集形式有。行和排数据来由定义视图的询问所引用的阐明,并且以援视图时动态变化。
视图具有表结构文件,但不存在数据文件。
对内部所引用的底蕴表来说,视图的意图类似于筛选。定义视图的淘好来当前或者其它数据库的一个或多独说明,或者其他视图。通过视图进行询问没有其它限制,通过它进行数据修改时的克也殊少。
视图是储存在数据库中之询问的sql语句,它要出于两栽原因:安全由,视图可以隐藏一些多少,如:社会保险基金表,可以用视图只展示姓名,地址,而休显得社会保险号和工资数等,另一样因是可若复杂的询问好理解与采用。

— 创建视图
create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)] as select_statement

  • 看图名必须唯一,同时不可知与表重名。
  • 视图可以采用select语句询问到的列名,也可协调指定相应的列名。
  • 得指定视图执行之算法,通过algorithm指定。
  • column_list如果存在,则数必须等select语句检索的列数

— 查看结构
show create view view_name

— 删除视图

  • 抹视图后,数据还有。
  • 而是又删除多只视图。
    drop view [if exists] view_name …

— 修改视图结构

  • 诚如不改动视图,因为无是独具的翻新视图都见面射到表上。
    alter view view_name [(column_list)] as select_statement

— 视图作用

  1. 简化工作逻辑
  2. 对客户端隐藏真实的表结构

— 视图算法(algorithm)
merge 合并
拿视图的查询语句,与外部查询需要事先统一重复实践!
temptable 临时表
以视图执行了后,形成临时表,再开外层查询!
undefined 未定义(默认),指的凡mysql自主去拣相应的算法。

 

/* 事务(transaction) */ ——————
工作是因逻辑上之同一组操作,组成这组操作的一一单元,要无统成而无备败。

  • 支撑连sql的共用成功还是公共收回。
  • 作业是数据库在数据晚自习方面的一个效。
  • 消运用 innodb 或 bdb 存储引擎,对自动提交的表征支持好。
  • innodb被称作事务安全型引擎。

— 事务开启
start transaction; 或者 begin;
打开事务后,所有被实践的sql语句都被认作当前事务内的sql语句。
— 事务提交
commit;
— 事务回滚
rollback;
若有操作发生问题,映射到业务开启前。

— 事务的特点

  1. 原子性(atomicity)
    事务是一个不可分割的劳作单位,事务中的操作还是都发出,要么都非起。
  2. 一致性(consistency)
    工作前后数据的完整性必须保持一致。
  3. 业务开始和终结时,外部数据一致
  4. 以全部业务进程中,操作是接二连三的
  5. 隔离性(isolation)
    多只用户并发访问数据库时,一个用户的政工不能够被外用户的物所干扰,多只冒出事务中的多寡如果互相隔离。
  6. 持久性(durability)
    一个作业一旦被提交,它对数据库被之数变动就是永久性的。

— 事务的贯彻

  1. 求是事情支持的表类型
  2. 履行同样组有关的操作前被事务
    3.
    整组操作完成后,都成,则交;如果在黄,选择回滚,则会回去工作开始的备份点。

— 事务之法则
以innodb的活动提交(autocommit)特性成就。
一般说来的mysql执行语句后,当前底数据交由操作均只是给其他客户端可见。
只要事情是临时关张“自动提交”机制,需要commit提交持久化数据操作。

— 注意
1.
数额定义语言(ddl)语句不可知于回滚,比如创建或者撤销数据库的语句,和创建、取消或还改表或存储的子程序的语。

  1. 事务不能够让嵌套

— 保存点
savepoint 保存点名称 — 设置一个事情保存点
rollback to savepoint 保存点名称 — 回滚到保存点
release savepoint 保存点名称 — 删除保存点

— innodb自动提交特性设置

set autocommit = 0|1; 0表示关闭自动提交,1意味着被自动提交。

如关闭了,那通常操作的结果对其它客户端也不可见,需要commit提交后才能够持久化数据操作。

  • 呢得关闭自动提交来打开事务。但跟start transaction不同之是,
    set
    autocommit是恒久改变服务器的装,直到下次再也修改该装置。(针对当下连日)
    如果start
    transaction记录被前之状态,而只要事情提交或回滚后便待更开事务。(针对时作业)

/* 锁表 */
说明锁定只用于防止其他客户端进行不正当地读取和写入
myisam 支持表锁,innodb 支持行锁
— 锁定
lock tables tbl_name [as alias]
— 解锁
unlock tables

/* 触发器 */ ——————
点程序是和发明有关的命名数据库对象,当该表出现一定事件频仍,将激活该对象
监听:记录之增多、修改、删除。

— 创建触发器
create trigger trigger_name trigger_time trigger_event on tbl_name
for each row trigger_stmt
参数:
trigger_time是接触程序的动作时。它好是 before 或
after,以指明触发程序是于激活它的话语之前要后触发。
trigger_event指明了激活触发程序的口舌的品种
insert:将新行插入表时激活触发程序
update:更改某平等实施时激活触发程序
delete:从表中删除某同执时激活触发程序
tbl_name:监听的表,必须是永久性的阐明,不可知以触发程序和temporary表或视图关联起来。
trigger_stmt:当接触程序激活时实施之讲话。执行多单话,可使begin…end复合语句结构

— 删除
drop trigger [schema_name.]trigger_name

得利用old和new代替旧的跟初的数据
创新操作,更新前是old,更新后是new.
除去操作,只有old.
增加操作,只有new.

— 注意

  1. 对于有所同等点程序动作时及波之给定表,不克来星星点点独点程序。

— 字符连接函数
concat(str1[, str2,…])

— 分支语句
if 条件 then
实践语句
elseif 条件 then
履语句
else
履语句
end if;

— 修改最外层语句结束符
delimiter 自定义了符号
sql语句
自定义了符号

delimiter ; — 修改回本的分公司

— 语词块包裹
begin
语句块
end

— 特殊之执行

  1. 如果加上记录,就见面硌程序。
  2. insert into on duplicate key update 语法会触发:
    设若无重复记录,会触发 before insert, after insert;
    倘若有重复记录并创新,会触发 before insert, before update, after
    update;
    假设发重复记录但是没有产生更新,则触发 before insert, before update
  3. replace 语法 如果产生记录,则行 before insert, before delete, after
    delete, after insert

/* sql编程 */ ——————

–// 局部变量 ———-
— 变量声明
declare var_name[,…] type [default value]
这话为用来声称局部变量。要受变量提供一个默认值,请包含一个default子词。值好叫指定为一个表达式,不需呢一个常数。如果没default子句,初始值为null。

— 赋值
动用 set 和 select into 语句也变量赋值。

– 注意:在函数内是足以使用全局变量(用户从定义的变量)

–// 全局变量 ———-
— 定义、赋值
set 语句可以定义并为变量赋值。
set @var = value;
否可行使select
into语句子也变量初始化并赋值。这样要求select语句只能回到一行,但是可是差不多单字段,就表示同时为多只变量进行赋值,变量的多寡需与查询的列数一致。
还可将赋值语句看作一个表达式,通过select执行得。此时为避免=被当关系运算符看待,使用:=代替。(set语句可以运用=
和 :=)。
select @var:=20;
select @v1:=id, @v2=name from t1 limit 1;
select * from tbl_name where @var:=30;

select into 可以用表明中查询得到的多寡赋给变量。
-| select max(height) into @max_height from tb;

— 于定义变量名
以避免select语句被,用户从定义的变量和网标识符(通常是配段名)冲突,用户从定义变量在变量名前运@作为开始符号。
@var=10;

– 变量被定义后,在普会话周期且使得(登录到离)

–// 控制结构 ———-
— if语句
if search_condition then
statement_list
[elseif search_condition then
statement_list]

[else
statement_list]
end if;

— case语句
case value when [compare-value] then result
[when [compare-value] then result …]
[else result]
end

— while循环
[begin_label:] while search_condition do
statement_list
end while [end_label];

– 如果要以循环内提前停止
while循环,则要采用标签;标签需要变成对出现。

— 退出循环
离整个循环 leave
退时循环 iterate
经过退出的价签决定退出哪个循环

–// 内置函数 ———-
— 数值函数
abs(x) — 绝对值 abs(-10.9) = 10
format(x, d) — 格式化千私分各数值 format(1234567.456, 2) = 1,234,567.46
ceil(x) — 向上取整 ceil(10.1) = 11
floor(x) — 向下取整 floor (10.1) = 10
round(x) — 四放弃五副去整理
mod(m, n) — m%n m mod n 求余 10%3=1
pi() — 获得圆周率
pow(m, n) — m^n
sqrt(x) — 算术平方根
rand() — 随机数
truncate(x, d) — 截取d位小数

— 时间日期函数
now(), current_timestamp(); — 当前日期时
current_date(); — 当前日子
current_time(); — 当前时间
date(‘yyyy-mm-dd hh:ii:ss’); — 获取日期有
time(‘yyyy-mm-dd hh:ii:ss’); — 获取时间部分
date_format(‘yyyy-mm-dd hh:ii:ss’, ‘%d %y %a %d %m %b %j’); —
格式化时间
unix_timestamp(); — 获得unix时间戳
from_unixtime(); — 从时间戳获得时间

— 字符串函数
length(string) — string长度,字节
char_length(string) — string的字符个数
substring(str, position [,length]) —
从str的position开始,取length个字符
replace(str ,search_str ,replace_str) —
在str中用replace_str替换search_str
instr(string ,substring) — 返回substring首次当string中冒出的位置
concat(string [,…]) — 连接字串
charset(str) — 返回字串字符集
lcase(string) — 转换成小写
left(string, length) — 从string2饱受之左侧起获length单字符
load_file(file_name) — 从文本读取内容
locate(substring, string [,start_position]) —
同instr,但但指定开始位置
lpad(string, length, pad) —
重复用pad加在string开头,直到字串长度也length
ltrim(string) — 去除前端空格
repeat(string, count) — 重复count次
rpad(string, length, pad) –在str后因故pad补充,直到长度也length
rtrim(string) — 去除后端空格
strcmp(string1 ,string2) — 逐字符比较简单许串大小

— 流程函数
case when [condition] then result [when [condition] then result
…] [else result] end 多分支
if(expr1,expr2,expr3) 双分支。

— 聚合函数
count()
sum();
max();
min();
avg();
group_concat()

— 其他常用函数
md5();
default();

–// 存储函数,自定义函数 ———-
— 新建
create function function_name (参数列表) returns 返回值类型
函数体

– 函数称,应该合法的标识符,并且不应与已有些要字冲突。

一个函数应该属于有数据库,可以使用db_name.funciton_name的花样实行时函数所属数据库,否则也当下数据库。

  • 参数有,由”参数名为”和”参数类型”组成。多只参数用逗号隔开。
  • 函数体由多长长的可用的mysql语句,流程控制,变量声明等报告句构成。
  • 多漫长语句应该用 begin…end 语句块包含。
  • 定要是生 return 返回值语句。

— 删除
drop function [if exists] function_name;

— 查看
show function status like ‘partten’
show create function function_name;

— 修改
alter function function_name 函数选项

–// 存储过程,自定义功能 ———-
— 定义
积存存储过程 是千篇一律截代码(过程),存储在数据库中之sql组成。
一个存储过程一般用于完成同样段子工作逻辑,例如报名,交班费,订单入库等。
倘若一个函数通常专注以及有意义,视为其他程序服务的,需要在其它语句中调用函数才得以,而存储过程不可知叫另外调用,是友好履
通过call执行。

— 创建
create procedure sp_name (参数列表)
过程体

参数列表:不同于函数的参数列表,需要指明参数类型
in,表示输入型
out,表示输出型
inout,表示混合型

瞩目,没有回到值。

/* 存储过程 */ ——————
储存过程是同一段子可执行性代码的聚集。相比函数,更偏于吃业务逻辑。
调用:call 过程名
— 注意

  • 从来不回值。
  • 唯其如此单独调用,不可夹杂在任何语句中

— 参数
in|out|inout 参数名 数据类型
in 输入:在调用过程遭到,将数据输入到过程体内部的参数
out 输出:在调用过程遭到,将过程体处理终结的结果回到到客户端
inout 输入输出:既而输入,也只是输出

— 语法
create procedure 过程名 (参数列表)
begin
过程体
end

/* 用户与权杖管理 */ ——————
用户信息表:mysql.user
— 刷新权限
flush privileges
— 增加用户
create user 用户名 identified by [password] 密码(字符串)

  • 得备mysql数据库的大局create user权限,或有insert权限。
  • 仅能够缔造用户,不克给权力。
  • 用户称,注意引号:如 ‘user_name’@’192.168.1.1’
  • 密码吗欲引号,纯数字密码为只要加引号

    要在纯文本中指定密码,需忽略password关键词。要将密码指定为由password()函数返回的混编值,需蕴涵关键字password
    — 重命名用户
    rename user old_user to new_user
    — 设置密码
    set password = password(‘密码’) — 为眼前用户安装密码
    set password for 用户名 = password(‘密码’) — 为指定用户安装密码
    — 删除用户
    drop user 用户名
    — 分配权限/添加用户
    grant 权限列表 on 表名 to 用户名 [identified by [password]
    ‘password’]

  • all privileges 代表所有权限
  • *.* 表示所有库的装有表
  • 库名.表名 表示某库下面的某表
    — 查看权限
    show grants for 用户名
    — 查看时用户权限
    show grants; 或 show grants for current_user; 或 show grants for
    current_user();
    — 撤消权限
    revoke 权限列表 on 表名 from 用户名
    revoke all privileges, grant option from 用户名 — 撤销所有权限
    — 权限层级
    — 要以grant或revoke,您得有grant
    option权限,并且您必须用于您正与或注销的权柄。
    大局层级:全局权限适用于一个加以服务器遭受的有所数据库,mysql.user
    grant all on *.*和 revoke all on *.*不过给及取消全局权限。
    数据库层级:数据库权限适用于一个加以数据库被的有目标,mysql.db,
    mysql.host
    grant all on db_name.*和revoke all on
    db_name.*唯有给及取消数据库权限。
    表明层级:表权限适用于一个让定表中的具有列,mysql.talbes_priv
    grant all on db_name.tbl_name和revoke all on
    db_name.tbl_name只与及撤销表权限。
    列层级:列权限适用于一个给定表中之单一列,mysql.columns_priv
    当以revoke时,您必须指定同于授权列相同的排列。
    — 权限列表
    all [privileges] — 设置除grant option之外的有简单权限
    alter — 允许使用alter table
    alter routine — 更改或收回就囤积的子程序
    create — 允许用create table
    create routine — 创建已囤积的子程序
    create temporary tables — 允许以create temporary table
    create user — 允许下create user, drop user, rename user和revoke all
    privileges。
    create view — 允许采取create view
    delete — 允许使用delete
    drop — 允许利用drop table
    execute — 允许用户运行已囤积的子程序
    file — 允许用select…into outfile和load data infile
    index — 允许以create index和drop index
    insert — 允许下insert
    lock tables — 允许对君抱有select权限的表动lock tables
    process — 允许使用show full processlist
    references — 未吃执行
    reload — 允许行使flush
    replication client — 允许用户了解起属于服务器或预示服务器的地点
    replication slave —
    用于复制型从属服务器(从主服务器中读取二上前制日志事件)
    select — 允许使用select
    show databases — 显示有数据库
    show view — 允许行使show create view
    shutdown — 允许行使mysqladmin shutdown
    super — 允许以change master, kill, purge master logs和set
    global语句,mysqladmin
    debug命令;允许你连接(一浅),即使已经达成max_connections。
    update — 允许使用update
    usage — “无权力”的同义词
    grant option — 允许给权限

/* 表维护 */
— 分析和存储表的重点字分布
analyze [local | no_write_to_binlog] table 表名 …
— 检查一个或者多独说明是否来左
check table tbl_name [, tbl_name] … [option] …
option = {quick | fast | medium | extended | changed}
— 整理数据文件的碎片
optimize [local | no_write_to_binlog] table tbl_name [,
tbl_name] …

/* 杂项 */ ——————
1.
可用反引号(`)为标识符(库名、表名、字段名、索引、别名)包裹,以避免与主要字重名!中文也足以看做标识符!

  1. 每个库目录存在一个封存时数据库的挑三拣四项文件db.opt。
  2. 注释:
    单行注释 # 注释内容
    大多实行注释 /* 注释内容 */
    单行注释 — 注释内容
    (标准sql注释风格,要求对解除折号后加一空格符(空格、tab、换行等))
  3. 模式通配符:
    _ 任意单独字符
    % 任意多个字符,甚至席卷零字符
    单引号需要展开转义 \’
  4. cmd命令行内的言语结束符可以为 “;”, “\g”,
    “\g”,仅影响著结果。其他地方或者用分号结束。delimiter
    可改时对话之话语结束符。
  5. sql对大小写不灵动
  6. 散已发生报告句:\c

发表评论

电子邮件地址不会被公开。 必填项已用*标注