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. 主键

    – 能唯一标识记录的字段,可以视作主键。

    – 一个表明只能发出一个主键。

    – 主键具有唯一性。

    – 声明字段经常,用 primary key 标识。

        也得以在字段列表之后声明

            例:create table tab ( id int, stu varchar(10), primary key
(id));

    – 主键字段的价值不克为null。

    – 主键可以由多单字段共同构成。此时用以字段列表后宣称的方式。

        例:create table tab ( id int, stu varchar(10), age int, primary
key (stu, age));

  1. unique 唯一索引(唯一约束)

    使得某字段的值吗无能够还。

    

  1. null 约束

    null不是数据类型,是排的一个性质。

    表示目前排是否好吧null,表示什么都没有。

    null, 允许吗空。默认。

    not null, 不容许吗空。

    insert into tab values (null, ‘val’);

        — 此时表示用率先单字段的值设为null, 取决于该字段是否同意为null

    

  1. default 默认值属性

    当前字段的默认值。

    insert into tab values (default, ‘val’);    —
此时表示强制行使默认值。

    create table tab ( add_time timestamp default current_timestamp );

        — 表示将手上时光之光阴戳设为默认值。

        current_date, current_time

  1. auto_increment 自动增长约

    自动增长得为索引(主键或unique)

    只能是一个字段为自行增长。

    默看1起自行增长。可以经表属性 auto_increment = x进行安装,或
alter table tbl auto_increment = x;

  1. comment 注释

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

  1. 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,级联操作。主表数据被更新(主键值更新),从表也给更新(外键值更新)。主表记录受删,从表相关记录也深受删去。

    2. set
null,设置为null。主表数据给更新(主键值更新),从表的外键被安装也null。主表记录受删去,从表相关记录外键被设置成null。但注意,要求该外键列,没有not
null属性约束。

    3. 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)

  1. 导出多张表

  mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)

  1. 导出所有表

  mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)

  1. 导出一个库 

  mysqldump -u用户名 -p密码 -B 库名 > 文件名(D:/a.sql)

足-w携带备份条件

— 导入

  1. 在签到mysql的状态下:

  source  备份文件

  1. 当匪记名的景况下

  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. 隔离性(Isolation)

       
多个用户并发访问数据库时,一个用户的工作不能够叫别用户之物所干扰,多独冒出事务间的数码如果互相隔离。

    4. 持久性(Durability)

        一个政工一旦让交付,它对数据库被的多寡变动就是永久性的。

— 事务的实现

    1. 要求是工作支持之表类型

    2. 履同一组有关的操作前开事务

    3.
整组操作完后,都事业有成,则付;如果是黄,选择回滚,则会回去工作开始的备份点。

— 事务之原理

    利用InnoDB的电动提交(autocommit)特性成就。

    普通的MySQL执行语句后,当前的多少交到操作都只是叫另外客户端可见。

    而工作是暂时关闭“自动提交”机制,需要commit提交持久化数据操作。

— 注意

    1.
数据定义语言(DDL)语句不克被回滚,比如创建或者撤销数据库的话语,和创建、取消或者重新改表或存储的子程序的口舌。

    2. 业务不可知吃嵌套

— 保存点

    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

  1. 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、换行等))

  1. 模式通配符:

    _    任意单个字符

    %    任意多个字符,甚至席卷零字符

    单引号需要展开转义 \’

  1. CMD命令行内的话语结束符可以为 “;”, “\G”,
    “\g”,仅影响著结果。其他地方或者用分号结束。delimiter
    可改时对话的言辞结束符。

  2. SQL对大小写不灵敏

  3. 消已起报告句:\c

发源为掌握笔记(Wiz)

发表评论

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