MySQL学习 --来自官方文档的翻译

通用知识:

1.mysql>source path;

path:要执行的sql路径

学会使用help content;里面会有详细的说明和例子

第一篇 字符集

1.基础知识

级别:服务器、数据库、表、属性

character set和collations 的区别

字符集:一组符号和其编码的集合

排序规则:符合编码的比较规则,最简单的比较规则是二进制排序规则。

MySQL可以做的事情:

使用大量的字符集和排序规则组合来表示字符串,其应用水平可以在数据库、表、属性等级别。

然而要想知道如何高效利用MySQL这个优势,首先需要了解MySQL支持哪些字符集和相应的排序规则:

mysql>show character set;   --显示的是默认的排序规则

mysql>show collation like ‘gb2312%’;  --显示各种排序规则

collation命名规则:

以其相关联的字符集名开头结尾_ci (case insensitive), _cs (case sensitive), or _bin (binary).

常见字符集:

Charset  | Description                     | Default collation

ascii    | US ASCII                        | ascii_general_ci

gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci

utf8     | UTF-8 Unicode                   | utf8_general_ci

latin1   | cp1252 West European            | latin1_swedish_ci

gbk      | GBK Simplified Chinese          | gbk_chinese_ci

2.指定字符集和排序规则(下面从四个级别说明)

Server:

way:

shell>mysqld   --character-set-server=gb2312  --collation-server=gb2312_chinese_ci

way:重编译

shell>cmake . -DDEFAULT_CHARSET=gb2312

Database:

Syn:

1>创建数据库

CREATE DATABASE db_name

[[DEFAULT] CHARACTER SET charset_name]

[[DEFAULT] COLLATE collation_name]

2>改变数据库

ALTER DATABASE

[[DEFAULT] CHARACTER SET charset_name]

[[DEFAULT] COLLATE collation_name]

Table:

CREATE TABLE tb_name(column_list)

[[DEFAULT] CHARACTER SET charset_name]

[[DEFAULT] COLLATE collation_name]

Column:

每一个字符属性(比如char,varchar,text)都有相应的字符集和排序规则,这个可以在create table和alter table

的从句中指定如下:

col_name {char|varchar|text} (col_length)

[CHARACTER SET charset_name]

[COLLATE collation_name]

col_name {set|enum} (val_list)

[CHARACTER SET charset_name]

[COLLATE collation_name]

第二篇 SQL语句语法

1.数据定义语句

1.1数据库级别语句

1.1.1CREATE DATABASE

For:创建数据库

Syn:

CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name    --注意绿色标记的位置和通用性

[create_specification] …

create_specification:

[DEFAULT] CHARACTER SET [=] charset_name |

[DEFAULT] COLLATE [=] collation_name

1.1.2 ALTER DATABASE

For: 改变数据库的默认排序规则和字符集   --for表示语句的目的,后从之

Syn:                                             --表示语法格式,后从之

ALTER {DATABASE | SCHEMA} [db_name]  --当数据库为默认时可以忽略数据库名
     alter_specification ...
ALTER {DATABASE | SCHEMA} db_name
    UPGRADE DATA DIRECTORY NAME

alter_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

1.2 事件相关语句

注意:在使用事件要先开启,要查看是否开启事件:‘

mysql>SHOW VARIABLES LIKE ‘event_scheduler‘;

开启前事件:

1.动态开启,临时有效,数据库重启后恢复默认

SET GLOBAL event_scheduler = ON;

2.修改配置文件

1.2.1CREATE EVENT

For:创建事件(计划执行)

CREATE [DEFINER=username|CURRENT_USER] EVENT   -- username 的格式:user_name‘@‘host_name

[IF NOT EXISTS]  [shema_name.]event_name   --事件是和数据库相关联的,如果没有指定模式名,那么其数据库是当前使用的数据库

ON SCHEDULE shedule

[ON COMPLETION [NOT] PRESERVE]

[ENABLE|DIABLE|DISABLE ON SLAVE]

[COMMENT ‘comment’]

Do event_body;

注意1:schedule:

AT timestamp [+INTERVAL interval] |     --常用的时间戳CURRENT_TIMESTAMP/

EVERY interval

[STARTS] timestamp [+interval] …

[ENDS] timestamp [+interval] …

注意2:interval:

quantity {YEAR|QUARTER|MONTH|DAY|HOUR|MINUTE|WEEK|SECOND|

YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}   --时间单位组合
事件组合的用法示例:
INTERVAL ‘2:10‘ HOUR_MINUTE 间隔为2小时10分钟
 
注意3:event_body:
 
这里是包含的SQL语句,当事件被触发时执行事件。
其中可以使用begin end组合语句
示例:
delimiter |

CREATE EVENT e
    ON SCHEDULE
      EVERY 5 SECOND
    DO
      BEGIN
        DECLARE v INTEGER;
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
        SET v = 0;
        WHILE v < 5 DO
          INSERT INTO t1 VALUES (0);
          UPDATE t2 SET s1 = s1 + 1;
          SET v = v + 1;
        END WHILE;
    END |

delimiter ;
 
注意4:timestamp:
 
必须是日期+时间的格式:
 
(1)‘2006-02-10 23:59:00‘
(2)内置函数:NOW,CURRENT_TIMESTAMP
注意5:STARTS AND ENDS
 
EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK
从当前时间的30分钟后开始,每隔12小时,直到四周之后
注意6:
通常情况下,一个事件一旦失效就会被遗弃,可以使用ON COMPLETION PRESERVE
 
 

1.2.2ALTER EVENT

For:修改事件

Syn:

ALTER [DEFINER ={user|CURRENT_USER}]    --事件的定义者

EVENT  event_name

[ON SHEDULE shedule]

[RENAME TO new_event_name]

[ENABLE|DISABLE|DIABLE ON SLAVE]

[COMMENT ‘comment’]

[DO event_body]

1>on shedule 可以使用mysql内建的函数和用户自己使用的变量但是不能够使用存储过程和用户自定义的函数。

2>rename to 可以使用此语句将一个数据库的事件转移到另一个数据库

1.3索引相关

基础知识:mysql如何使用索引

索引的作用:简单的说就是为了加快定位数据的速度

索引的种类:

PRIMARY KEY,UNIQUE,INDEX, and FULLTEXT  : B-tree

某些特殊数据上使用R-tree,内存表支持hash索引

1.3.1CREATE INDEX

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name

[index_type]

ON  tbl_name  (index_col_name,…)      --。。。表示可以创建多列索引

[index_option]

[algorithm_option|lock_option] …

index_col_name:

col_name [(length)] [ASC|DESC]   --指定表的哪个列可以使用索引

index_type:

USING {BTREE|HASH}     --index的实现方法

index_option:

KEY_BLOCK_SIZE [=] value    ---仅在innoDB中受支持

|index_type

|WITH PARSER parser_name

|COMMENT ‘string’

algorithm_option:

ALGORITHM [=]  {DEFAULT|INPLACE|COPY}

--算法

lock_option:

LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}  --并行有关,是共享还是独占还是其他

注意1:index_col_name

索引可以仅用每一列列值的主要部分来创建,使用col_name (length)来指定每一列的前length个

字符(char,varchar,text)或者字节来组成。

前缀可以给CHAR,VARCHAR,BINARY,VARBINARY来指定,如果要指定BLOB和TEXT必须指定长度

前缀的长度和前缀支持是和存储引擎相关的。

注意2:几种索引形式

1.UNIQUE限定索引上的值必须是不同的,如果是前缀那么前缀必须是不同的。

2.FULLTEXT所以仅仅被InnoDB和MyISAM支持,并且仅支持CHAR,VARCHAR,TEXT列,不支持前缀

注意3:index_type:

Storage Engine Permissible Index Types
InnoDB BTREE
MyISAM BTREE
MEMORY/HEAP HASH,
BTREE
NDB HASH,
BTREE (see note in text)

如果没有被显示指明,则默认第一个。

1.4 创建创建存储过程和函数

1.4.1 CREATE PROCEDURE  过程

CREATE

[DEFINER={user|CURRENT_USER}]

PROCEDURE sp_name ([proc_parameter[,…]])   --可选的函数参数

[characteristic …]   routine_body

1.4.2CREATE FUNCTION  函数

CREATE

[DEFINER={user|CURRENT_USER}]

FUNCTION  sp_name ([func_parameter[,…]])

RETURNS type

[characteristic …]   routine_body

characteristic:
    COMMENT ‘string‘
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
    Valid SQL routine statement

参数说明:

1.func_parameter:函数参数

过程的参数声明:IN,OUT,INOUT

函数:IN

IN:如无指定,每一个参数默认为IN,传递值给过程,过程可以修改其值但是对调用者不可见

OUT:从过程中传递一个值返回给调用者,初始值可以为空

INTOUT:参数可以被调用者初始化,并且可以被过程修改,返回可见。

param_name type(任何有效的数据类型)

2.characteristic:
    COMMENT ‘string‘
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC     当函数的结果总是不变的,应制定为DETERMINISTIC,
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
 
注意1:
这些存储例程是和数据库相关联的,默认是当前数据库,若要创建某一数据库的例程,指定:db_name.sp_name
注意2:
函数可以直接在表达式中使用,而存储过程需使用call来进行调用。
函数示例:
mysql> CREATE FUNCTION hello (s CHAR(20))
mysql> RETURNS CHAR(50) DETERMINISTIC
    -> RETURN CONCAT(‘Hello, ‘,s,‘!‘);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT hello(‘world‘);
+----------------+
| hello(‘world‘) |
+----------------+
| Hello, world!  |
+----------------+
1 row in set (0.00 sec)
注意3:rontine_body (function and procedure)
同:可以由有效的sql语句组成,可以是简单的sql语句也可以是多sql语句的组合
不同:
1.存储过程可以包含数据定义语言,也可以包含sql事务(commit、rollback),但是存储函数不行
2.存储过程可以包含带有返回结果集的语句,但函数不可以。如select,show,check table and so on
3.use皆不被允许
 
1.5表的语法  ***
 
1.5.1CREATE TABLE
 
For:创建数据中的表
Syn:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
  (create_definition,…)

[table_option]

[partition_option]

or:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
  [ (create_definition,…)
]

[table_option]

[partition_option]

select_statement

or:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

{LIKE old_tbl_name | (LIKE old_tbl_name)}

create_definition:

coL_name column_definition

|[CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (index_coL_name,…)

[index_option]  ….

|{INDEX|KEY} [index_name]
[index_type]  (index_coL_name,…)

| [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
      [index_name] [index_type] (index_col_name,...)
      [index_option] ...
  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] FOREIGN KEY
      [index_name] (index_col_name,...) reference_definition
  | CHECK (expr)

深蓝色部分为对列定义的其他约定。

reference_definition :

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)        --index_name 外键ID,如果未明确指外定外键的索引,则使用这个
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION
CASCADE :当父表有更新或者删除操作时子表也发生相应的改变以保持一致。
SET NULL:当父表有更新或者删除操作时子表设置为空。
RESTRICT|NO ACTION:阻止父表的更新或者删除操作。
SET DEFAULT:当父表有更新或者删除操作时子表设置default value

CREATE TABLE …SELECT

For:可以创建来自select选择的所有列(包括数据)

拷贝或者复制表

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

CREATE TABLE new_tbl LIKE orig_tbl;

1.5.2ALTER TABLE

修改外键:

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]
注意:与create相比,这里的区别是多了一个add
启用外键:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
关于fk_symbol,如果在创建表的时候已经指定CONSTRAINT [symbol]那么就可以使用,
反之则可以通过:’‘
mysql>show CREATE TABLE tb_name ;来显示创建语法寻找fk_symbol
 
1.6视图相关
 
1.6.1CREATE VIEW
 
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED |MERGE|TEMPTABLE}]
[DEFINER = {user |CURRENT_USER}]
[SQL SECURITY {DEFINER|INVOKER}]
VIEW view_name [(column_list)]    
AS select_statement
[WITH [CASCADED |LOCAL] CHECK OPTION]     
 
CREATE VIEW 可以创建视图,或者如果使用 OR REPLACE可以替代已经存在的一个视图。
 
select_statement 是一个select 语句,也可以包含其他view.
视图可以“冻结”视图创建的时间,比如说select * from 若以后新的列以后被插入表中,那么视图
返回后的结果仍然是视图创建哪个时候的结果。
 
CHECK OPTION:限制被视图引用的表的数据被更新或者插入。
column_list:指定返回的列名,但是必须和返回的列的总数相等。
 
 
2.DML数据操作语言
 

1.CALL

For:调用存储过程

Syn:

CALL sp_name([parameter[,...]])
CALL sp_name[()]

2.DELETE

3.DO

For:执行不返回任何结果的表达式

DO expr [, expr] ...

4.HANDLER

5.INSERT

For:

6.LOAD DATA INFILE  == mysqlimport

For:以非常高的速度从文本文件中读入行到table。是SELECT … INTO OUTFIEL的补集

Syn:

LOAD DATA [LOW_PRIORITY|CONCURRENT]  [LOCAL]  INFILE ‘file_name’

[REPLACE |IGNORE]

INTO TABLE tbl_name  

[PARTITION (partition_name,…)]

[CHARACTER SET charaset_name]   ---字符集设置

[{FIELDS | COLUMNS}               ---列级,属性级别

[TERMINATED BY ‘string’]    ---插入数据到表时

[[OPTIONALLY]  ENCOLSED BY ‘char’]

[ESCAPED BY ‘char’]

]

[LINES                    ---行级

      [STARTING BY ‘string’]

[TERMINATED BY ‘string’]

]/mysql5/mysql_local_sql/loaddata.txt‘ into table goods;
Query OK, 0 rows affected (0.00 sec)

注意在windows上使用的是后斜杠

注意1:

如果你使用LOW_PRIORITY ,其执行将被搁置直到所有的客户端都读完数据。当然这只有在支持表级别的锁的引擎上才可用。

如果你执行并发COCURRENT,那么当插入时可以执行读取操作

注意2:LOCAL

*local影响期望文件的位置错误的处理。当local被指定的时候,文件应该被客户端的程序在客户端上读取

并且发送到服务器上。文件位置要指定全路径。如果指定相对路径那么位置,那么这里的位置将是相对于客户端程序的位置。

*local没有被指定的话,文件这一定是存放在服务器端的,定位规则:

《1.全路径不必说

《2.相对路径,如果给出了相对路径的主要部分,那么服务器将在相对于服务器数据目录的位置寻找;

如果没有给出,那么将在默认数据库的数据库文件位置寻找。

注意3:replace和ignore(处理冗余键值应该采取的行为)

如果都没有指定那么这要视有没有local被声明。

没有local:发生错误,其余部分被忽略。

有local:默认的行为跟ignore被指定一样

注意4:LINES和FIELDS在命令上和select … into outfile是一样的

缺省设置:

FIELDS TERMINATED BY ‘\t‘ ENCLOSED BY ‘‘ ESCAPED BY ‘\\‘
LINES TERMINATED BY ‘\n‘ STARTING BY ‘‘
注意5:
starting by 用法:
e.
b.txt

xxx44,铅笔,1,36
xxfafa78,88
hello xxx45,香蕉,6,30

mysql>load data infile ‘D:/b.txt‘ into
table goods fields terminated by ‘,‘ lines
starting
by ‘xxx‘;

7.LAOD XML

8.REPLACE

9.SELECT

SELECT 语句

SELECT
    [ALL | DISTINCT | DISTINCTROW ]            --distinct 是distinctrow的同名
    [HIGH_PRIORITY]
    [MAX_STATEMENT_TIME = N]
    [STRAIGHT_JOIN]
    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
    [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr [, select_expr ...]
    [FROM table_references
      [PARTITION partition_list]
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]         --ASC|DESC跟在group by 或者order by后
    [HAVING where_condition]         --在group by 之后,在order by 之前
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [PROCEDURE procedure_name(argument_list)]
    [INTO OUTFILE ‘file_name‘
        [CHARACTER SET charset_name]
        export_options                ---主要包括FIELDS 和 LINES
       | INTO DUMPFILE ‘file_name‘
      | INTO var_name [, var_name]]
    [FOR UPDATE | LOCK IN SHARE MODE]]

注意1:having

having可以使用聚集函数而where不可以

注意2:limit

In other words, LIMIT row_count is equivalent to LIMIT 0, row_count.

注意3:select into

(1)  SELECT id, data INTO @x, @y FROM test.t1 LIMIT 1;

(2)The SELECT ... INTO OUTFILE

statement is intended primarily to let you very quickly dump a table to a text file on the server machine

如果是远程主机可以使用:shell>mysql  –e “select …” >file_name

10.UPDATE

暂时先到这,后续补充~

时间: 2024-12-13 10:14:06

MySQL学习 --来自官方文档的翻译的相关文章

Jinja2学习笔记暨官方文档的翻译

http://blog.csdn.net/lgg201/article/details/4647471 呵呵, 刚刚看完Python模板引擎Jinja2的文档, 感觉很好, 觉得动态语言真是很好.  模板引擎竟然可以做的如此灵活....真是不错.... 下面直接把看文档过程的笔记发布出来, 呵呵, 基本上就是翻译, 加了不多的一点自己的解释......希望可以帮到大家 补充: 1. 在模板中设置自定义变量: {% set variable_name = value %} 比如设置{% set u

Erlang epmd官方文档中文翻译

本文含epmd简介及官方文档之翻译,文档地址 http://erlang.org/doc/man/epmd.html翻译时的版本 R19.1 中英文水平都不咋地,不通顺处海涵,就酱. 简介 Erlang分布式系统中节点是通过节点名字互相连接的,节点名字为[email protected]_ADDRESS格式. epmd是分布式erlang中比较重要的模块.集群中每台机器都有一个epmd进程,这些进程端口号都用同一个端口号(默认4396端口).所有节点启动的时候都会连接到本机对应的epmd进程,它

uFrame 1.6 官方文档随意翻译(一)

前言: 建议直接看官方英文文档,下面都是一些简单的翻译. The Kernel The Kernel是uFrame的本质,负责处理加载场景,系统和服务. Subsystems 作为一个容器,组成许多Nodes. Subsystems允许你分离项目中的逻辑部分和可复用部分. System Loaders System Loaders常用语初始化信息. Node Elements 主要负责ViewModel(Unity中uFrame框架附带了Controller)部分 For example, Pl

别开心太早,Python 官方文档的翻译差远了

近几天,很多公众号发布了 Python 官方文档的消息.然而,一个特别奇怪的现象就发生了,让人啼笑皆非. Python 文档的中文翻译工作一直是“默默无闻”,几个月前,我还吐槽过这件事<再聊聊Python中文社区的翻译>,当时我们的进度是 10.3%,远远落后于日本和法国,甚至落后于巴西! 这次所谓的中文版,当然是未完成翻译的残品.刚查了下,整体进度是 19.7%. 翻译进度不足20% 有的公众号在发布消息的时候,说明了这不是官宣.不是正式发布版,还指出了中文版的访问地址是隐藏入口.这都是忠于

学习使用Volley的多种基本功能-来自官方文档

官方文档地址:https://developer.android.com/training/volley/requestqueue.html 之前一直没看到这个,原来官方已经正式有关于Volley的文档了,而且这是被建议使用的Network库. 因为之前有写过简单的Volley请求怎么写,下面介绍的都是我之前不知道的用法: 1.先上代码: 1 Cache cache = new DiskBasedCache(getCacheDir(),1024*1024); 2 Network network

【Android官方文档】翻译Android官方文档-Activities(一)

Activity是可以给用户提供交互操作的程序组件,例如打电话,拍照,发送邮件,抑或者是显示地图.通常窗口会填满屏幕,但是也可以做到比屏幕小或者是悬浮在窗口顶部. App通常由多个Activities组成,它们之间支持相互跳转.一般情况下,每个Activity在应用中都是特别的,就好像 主Activity一样,主activity是应用第一个Activity,其他Activity可以通过其他操作启动.一个新的Activity的启动,那么旧Activity就会被停止,但是系统会保存这些activit

Matlab最新的官方文档中文翻译

文章翻译的是Matlab最新的官方文档R2016b,可能后续如果我还有时间会继续翻译,希望能够帮到大家,翻译的不好请大家不要吐槽. Matlab官方文档地址:http://cn.mathworks.com/help/pdf_doc/matlab/getstart.pdf Desktop Basics  当您启动MATLAB时,桌面以其默认布局显示如下: 说明:请大家对照着英文原版看,我没有截图,因为实在太麻烦 桌面包括以下面板: ?当前文件夹 - 访问您的文件. ?命令窗口 - 在命令行中输入命

学习android 官方文档

9.29 1. 今天,FQ,看到android studio中文网上有一个FQ工具openVPN,我就使用了. 之前用过一个FQ工具开眼,但由于网速慢,我就弃用了. 2. 现在,我就可以FQ去android 官方网页,认真研究android的开发 为什么要上android的官网.是因为我除了会用,也要了解开发者们对于android里面的api.组件等等,到底有什么定义和使用,这个可以让我之前的实践认识通过对比得以升华. 3. 我首先看了android delevop 的 training内容,重

看懂mysql执行计划--官方文档

原文地址:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html 9.8.2 EXPLAIN Output Format The EXPLAIN statement provides information about the execution plan for a SELECT statement. EXPLAIN returns a row of information for each table used in the S