MySQL学习 --来自官方文档的翻译
2015-04-16 17:35
645 查看
通用知识:
1.mysql>sourcepath;
path:要执行的sql路径
学会使用helpcontent;里面会有详细的说明和例子
第一篇字符集
1.基础知识
级别:服务器、数据库、表、属性
characterset和collations的区别
字符集:一组符号和其编码的集合
排序规则:符合编码的比较规则,最简单的比较规则是二进制排序规则。
MySQL可以做的事情:
使用大量的字符集和排序规则组合来表示字符串,其应用水平可以在数据库、表、属性等级别。
然而要想知道如何高效利用MySQL这个优势,首先需要了解MySQL支持哪些字符集和相应的排序规则:
mysql>showcharacterset;--显示的是默认的排序规则
mysql>showcollationlike‘gb2312%’;--显示各种排序规则
collation命名规则:
以其相关联的字符集名开头结尾
常见字符集:
Charset|Description|Defaultcollation
ascii|USASCII|ascii_general_ci
gb2312|GB2312SimplifiedChinese|gb2312_chinese_ci
utf8|UTF-8Unicode|utf8_general_ci
latin1|cp1252WestEuropean|latin1_swedish_ci
gbk|GBKSimplifiedChinese|gbk_chinese_ci
2.指定字符集和排序规则(下面从四个级别说明)
Server:
way:
shell>mysqld--character-set-server=gb2312--collation-server=gb2312_chinese_ci
way:重编译
shell>
Syn:
1>创建数据库
CREATEDATABASEdb_name
[[DEFAULT]CHARACTERSETcharset_name]
[[DEFAULT]COLLATEcollation_name]
2>改变数据库
ALTERDATABASE
[[DEFAULT]CHARACTERSETcharset_name]
[[DEFAULT]COLLATEcollation_name]
Table:
CREATETABLEtb_name(column_list)
[[DEFAULT]CHARACTERSETcharset_name]
[[DEFAULT]COLLATEcollation_name]
Column:
每一个字符属性(比如char,varchar,text)都有相应的字符集和排序规则,这个可以在createtable和altertable
的从句中指定如下:
col_name{char|varchar|text}(col_length)
[CHARACTERSETcharset_name]
[COLLATEcollation_name]
或
col_name{set|enum}(val_list)
[CHARACTERSETcharset_name]
[COLLATEcollation_name]
第二篇SQL语句语法
1.数据定义语句
1.1数据库级别语句
1.1.1CREATEDATABASE
For:创建数据库
Syn:
CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]db_name--注意绿色标记的位置和通用性
[create_specification]…
create_specification:
[DEFAULT]CHARACTERSET[=]charset_name|
[DEFAULT]COLLATE[=]collation_name
1.1.2ALTERDATABASE
For:改变数据库的默认排序规则和字符集--for表示语句的目的,后从之
Syn:--表示语法格式,后从之
ALTER{DATABASE|SCHEMA}
UPGRADEDATADIRECTORYNAME
[DEFAULT]CHARACTERSET[=]
|[DEFAULT]COLLATE[=]
1.2事件相关语句
注意:在使用事件要先开启,要查看是否开启事件:‘
mysql>SHOWVARIABLESLIKE'event_scheduler';
开启前事件:
1.动态开启,临时有效,数据库重启后恢复默认
SETGLOBALevent_scheduler=ON;
2.修改配置文件
1.2.1CREATEEVENT
For:创建事件(计划执行)
CREATE[DEFINER=username|CURRENT_USER]EVENT--username的格式:
[IFNOTEXISTS][shema_name.]event_name--事件是和数据库相关联的,如果没有指定模式名,那么其数据库是当前使用的数据库
ONSCHEDULEshedule
[ONCOMPLETION[NOT]PRESERVE]
[ENABLE|DIABLE|DISABLEONSLAVE]
[COMMENT‘comment’]
Doevent_body;
注意1:schedule:
ATtimestamp[+INTERVALinterval]|--常用的时间戳CURRENT_TIMESTAMP/
EVERYinterval
[STARTS]timestamp[+interval]…
[ENDS]timestamp[+interval]…
注意2:interval:
1.2.2ALTEREVENT
For:修改事件
Syn:
ALTER[DEFINER={user|CURRENT_USER}]--事件的定义者
EVENTevent_name
[ONSHEDULEshedule]
[RENAMETOnew_event_name]
[ENABLE|DISABLE|DIABLEONSLAVE]
[COMMENT‘comment’]
[DOevent_body]
1>onshedule可以使用mysql内建的函数和用户自己使用的变量但是不能够使用存储过程和用户自定义的函数。
2>renameto可以使用此语句将一个数据库的事件转移到另一个数据库
1.3索引相关
基础知识:mysql如何使用索引
索引的作用:简单的说就是为了加快定位数据的速度。
索引的种类:
PRIMARYKEY,UNIQUE,INDEX,andFULLTEXT:B-tree
某些特殊数据上使用R-tree,内存表支持hash索引
1.3.1CREATEINDEX
CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEXindex_name
[index_type]
ONtbl_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
|WITHPARSERparser_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:
如果没有被显示指明,则默认第一个。
1.4创建创建存储过程和函数
1.4.1CREATEPROCEDURE过程
CREATE
[DEFINER={user|CURRENT_USER}]
PROCEDUREsp_name([proc_parameter[,…]])--可选的函数参数
[characteristic…]routine_body
1.4.2CREATEFUNCTION函数
CREATE
[DEFINER={user|CURRENT_USER}]
FUNCTIONsp_name([func_parameter[,…]])
RETURNStype
[characteristic…]routine_body
COMMENT'
|LANGUAGESQL
|[NOT]DETERMINISTIC
|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}
|SQLSECURITY{DEFINER|INVOKER}
参数说明:
1.func_parameter:函数参数
过程的参数声明:IN,OUT,INOUT
函数:IN
IN:如无指定,每一个参数默认为IN,传递值给过程,过程可以修改其值但是对调用者不可见
OUT:从过程中传递一个值返回给调用者,初始值可以为空
INTOUT:参数可以被调用者初始化,并且可以被过程修改,返回可见。
param_nametype(任何有效的数据类型)
COMMENT'
|LANGUAGESQL
|[NOT]DETERMINISTIC当函数的结果总是不变的,应制定为DETERMINISTIC,
|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}
|SQLSECURITY{DEFINER|INVOKER}[/code]
mysql>
->
QueryOK,0rowsaffected(0.00sec)
mysql>
+----------------+
|hello('world')|
+----------------+
|Hello,world!|
+----------------+
1rowinset(0.00sec)[/code]
CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name
(create_definition,…)
[table_option]
[partition_option]
or:
CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name
[(create_definition,…)
]
[table_option]
[partition_option]
select_statement
or:
CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name
{LIKEold_tbl_name|(LIKEold_tbl_name)}
create_definition:
coL_namecolumn_definition
|[CONSTRAINT[symbol]]PRIMARYKEY
[index_type](index_coL_name,…)
[index_option]….
|{INDEX|KEY}[index_name]
[index_type](index_coL_name,…)
深蓝色部分为对列定义的其他约定。
reference_definition:
[
REFERENCES
[ONDELETE
[ONUPDATE
RESTRICT|CASCADE|SETNULL|NOACTION[/code]
CREATETABLE…SELECT
For:可以创建来自select选择的所有列(包括数据)
拷贝或者复制表
CREATETABLEnew_tblSELECT*FROMorig_tbl;
CREATETABLEnew_tblLIKEorig_tbl;
1.5.2ALTERTABLE
修改外键:
[/code]
1.CALL
For:调用存储过程
Syn:
2.DELETE
3.DO
For:执行不返回任何结果的表达式
4.HANDLER
5.INSERT
For:
6.LOADDATAINFILE==mysqlimport
For:以非常高的速度从文本文件中读入行到table。是SELECT…INTOOUTFIEL的补集
Syn:
LOADDATA[LOW_PRIORITY|CONCURRENT][LOCAL]INFILE‘file_name’
[REPLACE|IGNORE]
INTOTABLEtbl_name
[PARTITION(partition_name,…)]
[CHARACTERSETcharaset_name]---字符集设置
[{FIELDS|COLUMNS}---列级,属性级别
[TERMINATEDBY‘string’]---插入数据到表时
[[OPTIONALLY]ENCOLSEDBY‘char’]
[ESCAPEDBY‘char’]
]
[LINES---行级
[STARTINGBY‘string’]
[TERMINATEDBY‘string’]
]/mysql5/mysql_local_sql/loaddata.txt'intotablegoods;
QueryOK,0rowsaffected(0.00sec)
注意在windows上使用的是后斜杠
注意1:
如果你使用LOW_PRIORITY,其执行将被搁置直到所有的客户端都读完数据。当然这只有在支持表级别的锁的引擎上才可用。
如果你执行并发COCURRENT,那么当插入时可以执行读取操作
注意2:LOCAL
*local影响期望文件的位置和错误的处理。当local被指定的时候,文件应该被客户端的程序在客户端上读取
并且发送到服务器上。文件位置要指定全路径。如果指定相对路径那么位置,那么这里的位置将是相对于客户端程序的位置。
*local没有被指定的话,文件这一定是存放在服务器端的,定位规则:
《1.全路径不必说
《2.相对路径,如果给出了相对路径的主要部分,那么服务器将在相对于服务器数据目录的位置寻找;
如果没有给出,那么将在默认数据库的数据库文件位置寻找。
注意3:replace和ignore(处理冗余键值应该采取的行为)
如果都没有指定那么这要视有没有local被声明。
没有local:发生错误,其余部分被忽略。
有local:默认的行为跟ignore被指定一样
注意4:LINES和FIELDS在命令上和select…intooutfile是一样的
缺省设置:
xxx44,铅笔,1,36
xxfafa78,88
helloxxx45,香蕉,6,30
mysql>loaddatainfile'D:/b.txt'into
tablegoodsfieldsterminatedby','lines
startingby'xxx';
7.LAODXML
8.REPLACE
9.SELECT
SELECT语句
注意1:having
having可以使用聚集函数而where不可以
注意2:limit
Inotherwords,[code]LIMITrow_countisequivalentto[code]LIMIT0,row_count.
注意3:selectinto
(1)SELECTid,dataINTO@x,@yFROMtest.t1LIMIT1;
(2)TheSELECT...INTOOUTFILE
statementisintendedprimarilytoletyouveryquicklydumpatabletoatextfileontheservermachine
如果是远程主机可以使用:shell>mysql–e“select…”>file_name
10.UPDATE
暂时先到这,后续补充~
1.mysql>sourcepath;
path:要执行的sql路径
学会使用helpcontent;里面会有详细的说明和例子
第一篇字符集
1.基础知识
级别:服务器、数据库、表、属性
characterset和collations的区别
字符集:一组符号和其编码的集合
排序规则:符合编码的比较规则,最简单的比较规则是二进制排序规则。
MySQL可以做的事情:
使用大量的字符集和排序规则组合来表示字符串,其应用水平可以在数据库、表、属性等级别。
然而要想知道如何高效利用MySQL这个优势,首先需要了解MySQL支持哪些字符集和相应的排序规则:
mysql>showcharacterset;--显示的是默认的排序规则
mysql>showcollationlike‘gb2312%’;--显示各种排序规则
collation命名规则:
以其相关联的字符集名开头结尾
_ci(caseinsensitive),
_cs(casesensitive),or
_bin(binary).
常见字符集:
Charset|Description|Defaultcollation
ascii|USASCII|ascii_general_ci
gb2312|GB2312SimplifiedChinese|gb2312_chinese_ci
utf8|UTF-8Unicode|utf8_general_ci
latin1|cp1252WestEuropean|latin1_swedish_ci
gbk|GBKSimplifiedChinese|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>创建数据库
CREATEDATABASEdb_name
[[DEFAULT]CHARACTERSETcharset_name]
[[DEFAULT]COLLATEcollation_name]
2>改变数据库
ALTERDATABASE
[[DEFAULT]CHARACTERSETcharset_name]
[[DEFAULT]COLLATEcollation_name]
Table:
CREATETABLEtb_name(column_list)
[[DEFAULT]CHARACTERSETcharset_name]
[[DEFAULT]COLLATEcollation_name]
Column:
每一个字符属性(比如char,varchar,text)都有相应的字符集和排序规则,这个可以在createtable和altertable
的从句中指定如下:
col_name{char|varchar|text}(col_length)
[CHARACTERSETcharset_name]
[COLLATEcollation_name]
或
col_name{set|enum}(val_list)
[CHARACTERSETcharset_name]
[COLLATEcollation_name]
第二篇SQL语句语法
1.数据定义语句
1.1数据库级别语句
1.1.1CREATEDATABASE
For:创建数据库
Syn:
CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]db_name--注意绿色标记的位置和通用性
[create_specification]…
create_specification:
[DEFAULT]CHARACTERSET[=]charset_name|
[DEFAULT]COLLATE[=]collation_name
1.1.2ALTERDATABASE
For:改变数据库的默认排序规则和字符集--for表示语句的目的,后从之
Syn:--表示语法格式,后从之
ALTER{DATABASE|SCHEMA}[[code]db_name]--当数据库为默认时可以忽略数据库名
alter_specification...
ALTER{DATABASE|SCHEMA}
db_name
UPGRADEDATADIRECTORYNAME
alter_specification:
[DEFAULT]CHARACTERSET[=]
charset_name
|[DEFAULT]COLLATE[=]
collation_name
1.2事件相关语句
注意:在使用事件要先开启,要查看是否开启事件:‘
mysql>SHOWVARIABLESLIKE'event_scheduler';
开启前事件:
1.动态开启,临时有效,数据库重启后恢复默认
SETGLOBALevent_scheduler=ON;
2.修改配置文件
1.2.1CREATEEVENT
For:创建事件(计划执行)
CREATE[DEFINER=username|CURRENT_USER]EVENT--username的格式:
''@'[code]host_name'[/code]user_name
[IFNOTEXISTS][shema_name.]event_name--事件是和数据库相关联的,如果没有指定模式名,那么其数据库是当前使用的数据库
ONSCHEDULEshedule
[ONCOMPLETION[NOT]PRESERVE]
[ENABLE|DIABLE|DISABLEONSLAVE]
[COMMENT‘comment’]
Doevent_body;
注意1:schedule:
ATtimestamp[+INTERVALinterval]|--常用的时间戳CURRENT_TIMESTAMP/
EVERYinterval
[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语句,当事件被触发时执行事件。
其中可以使用beginend组合语句
示例:
delimiter|
CREATEEVENTe
ONSCHEDULE
EVERY5SECOND
DO
BEGIN
DECLAREvINTEGER;
DECLARECONTINUEHANDLERFORSQLEXCEPTIONBEGINEND;
SETv=0;
WHILEv<5DO
INSERTINTOt1VALUES(0);
UPDATEt2SETs1=s1+1;
SETv=v+1;
ENDWHILE;
END|
delimiter;
注意4:timestamp:
必须是日期+时间的格式:
[code](1)'2006-02-1023:59:00'[/code]
[code](2)内置函数:NOW,CURRENT_TIMESTAMP[/code]
[code]注意5:STARTSANDENDS[/code]
EVERY12HOURSTARTSCURRENT_TIMESTAMP+INTERVAL30MINUTEENDSCURRENT_TIMESTAMP+INTERVAL4WEEK
从当前时间的30分钟后开始,每隔12小时,直到四周之后
注意6:
通常情况下,一个事件一旦失效就会被遗弃,可以使用ONCOMPLETIONPRESERVE
1.2.2ALTEREVENT
For:修改事件
Syn:
ALTER[DEFINER={user|CURRENT_USER}]--事件的定义者
EVENTevent_name
[ONSHEDULEshedule]
[RENAMETOnew_event_name]
[ENABLE|DISABLE|DIABLEONSLAVE]
[COMMENT‘comment’]
[DOevent_body]
1>onshedule可以使用mysql内建的函数和用户自己使用的变量但是不能够使用存储过程和用户自定义的函数。
2>renameto可以使用此语句将一个数据库的事件转移到另一个数据库
1.3索引相关
基础知识:mysql如何使用索引
索引的作用:简单的说就是为了加快定位数据的速度。
索引的种类:
PRIMARYKEY,UNIQUE,INDEX,andFULLTEXT:B-tree
某些特殊数据上使用R-tree,内存表支持hash索引
1.3.1CREATEINDEX
CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEXindex_name
[index_type]
ONtbl_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
|WITHPARSERparser_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:
StorageEngine | PermissibleIndexTypes |
InnoDB | BTREE |
MyISAM | BTREE |
MEMORY/ HEAP | HASH, BTREE |
NDB | HASH, BTREE(seenoteintext) |
1.4创建创建存储过程和函数
1.4.1CREATEPROCEDURE过程
CREATE
[DEFINER={user|CURRENT_USER}]
PROCEDUREsp_name([proc_parameter[,…]])--可选的函数参数
[characteristic…]routine_body
1.4.2CREATEFUNCTION函数
CREATE
[DEFINER={user|CURRENT_USER}]
FUNCTIONsp_name([func_parameter[,…]])
RETURNStype
[characteristic…]routine_body
characteristic:
COMMENT'
string'
|LANGUAGESQL
|[NOT]DETERMINISTIC
|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}
|SQLSECURITY{DEFINER|INVOKER}
routine_body:
ValidSQLroutinestatement
参数说明:
1.func_parameter:函数参数
过程的参数声明:IN,OUT,INOUT
函数:IN
IN:如无指定,每一个参数默认为IN,传递值给过程,过程可以修改其值但是对调用者不可见
OUT:从过程中传递一个值返回给调用者,初始值可以为空
INTOUT:参数可以被调用者初始化,并且可以被过程修改,返回可见。
param_nametype(任何有效的数据类型)
2.characteristic:
COMMENT'
string'
|LANGUAGESQL
|[NOT]DETERMINISTIC当函数的结果总是不变的,应制定为DETERMINISTIC,
|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}
|SQLSECURITY{DEFINER|INVOKER}[/code]
注意1:
这些存储例程是和数据库相关联的,默认是当前数据库,若要创建某一数据库的例程,指定:[code]db_name.sp_name
注意2:
函数可以直接在表达式中使用,而存储过程需使用call来进行调用。
函数示例:
mysql>[code]CREATEFUNCTIONhello(sCHAR(20))
mysql>
RETURNSCHAR(50)DETERMINISTIC
->
RETURNCONCAT('Hello,',s,'!');
QueryOK,0rowsaffected(0.00sec)
mysql>
SELECThello('world');
+----------------+
|hello('world')|
+----------------+
|Hello,world!|
+----------------+
1rowinset(0.00sec)[/code]
注意3:rontine_body(functionandprocedure)
同:可以由有效的sql语句组成,可以是简单的sql语句也可以是多sql语句的组合
不同:
1.存储过程可以包含数据定义语言,也可以包含sql事务(commit、rollback),但是存储函数不行
2.存储过程可以包含带有返回结果集的语句,但函数不可以。如select,show,checktableandsoon
3.use皆不被允许
1.5表的语法***
1.5.1CREATETABLE
For:创建数据中的表
Syn:
CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name
(create_definition,…)
[table_option]
[partition_option]
or:
CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name
[(create_definition,…)
]
[table_option]
[partition_option]
select_statement
or:
CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name
{LIKEold_tbl_name|(LIKEold_tbl_name)}
create_definition:
coL_namecolumn_definition
|[CONSTRAINT[symbol]]PRIMARYKEY
[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]]FOREIGNKEY
[index_name](index_col_name,...)reference_definition
|CHECK(expr)
深蓝色部分为对列定义的其他约定。
reference_definition:
[CONSTRAINT[[code]symbol]]FOREIGNKEY
[
index_name](
index_col_name,...)--index_name外键ID,如果未明确指外定外键的索引,则使用这个
REFERENCES
tbl_name(
index_col_name,...)
[ONDELETE
reference_option]
[ONUPDATE
reference_option]
reference_option:
RESTRICT|CASCADE|SETNULL|NOACTION[/code]
CASCADE:当父表有更新或者删除操作时子表也发生相应的改变以保持一致。
SETNULL:当父表有更新或者删除操作时子表设置为空。
RESTRICT|NOACTION:阻止父表的更新或者删除操作。
SETDEFAULT:当父表有更新或者删除操作时子表设置defaultvalue
CREATETABLE…SELECT
For:可以创建来自select选择的所有列(包括数据)
拷贝或者复制表
CREATETABLEnew_tblSELECT*FROMorig_tbl;
CREATETABLEnew_tblLIKEorig_tbl;
1.5.2ALTERTABLE
修改外键:
ALTERTABLEtbl_name
ADD[CONSTRAINT[symbol]]FOREIGNKEY
[index_name](index_col_name,...)
REFERENCEStbl_name(index_col_name,...)
[ONDELETEreference_option]
[ONUPDATEreference_option]
注意:与create相比,这里的区别是多了一个add
启用外键:
ALTERTABLE[code]tbl_nameDROPFOREIGNKEY
fk_symbol;[/code]
关于[code]fk_symbol,如果在创建表的时候已经指定CONSTRAINT[symbol]那么就可以使用,
反之则可以通过:’'
mysql>showCREATETABLEtb_name;来显示创建语法寻找fk_symbol
[/code]
1.6视图相关
1.6.1CREATEVIEW
CREATE[ORREPLACE]
[ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
[DEFINER={user|CURRENT_USER}]
[SQLSECURITY{DEFINER|INVOKER}]
VIEWview_name[(column_list)]
ASselect_statement
[WITH[CASCADED|LOCAL]CHECKOPTION]
CREATEVIEW可以创建视图,或者如果使用ORREPLACE可以替代已经存在的一个视图。
select_statement是一个select语句,也可以包含其他view.
视图可以“冻结”视图创建的时间,比如说select*from若以后新的列以后被插入表中,那么视图
返回后的结果仍然是视图创建哪个时候的结果。
CHECKOPTION:限制被视图引用的表的数据被更新或者插入。
column_list:指定返回的列名,但是必须和返回的列的总数相等。
2.DML数据操作语言
1.CALL
For:调用存储过程
Syn:
CALLsp_name([parameter[,...]])
CALLsp_name[()]
2.DELETE
3.DO
For:执行不返回任何结果的表达式
DOexpr[,expr]...
4.HANDLER
5.INSERT
For:
6.LOADDATAINFILE==mysqlimport
For:以非常高的速度从文本文件中读入行到table。是SELECT…INTOOUTFIEL的补集
Syn:
LOADDATA[LOW_PRIORITY|CONCURRENT][LOCAL]INFILE‘file_name’
[REPLACE|IGNORE]
INTOTABLEtbl_name
[PARTITION(partition_name,…)]
[CHARACTERSETcharaset_name]---字符集设置
[{FIELDS|COLUMNS}---列级,属性级别
[TERMINATEDBY‘string’]---插入数据到表时
[[OPTIONALLY]ENCOLSEDBY‘char’]
[ESCAPEDBY‘char’]
]
[LINES---行级
[STARTINGBY‘string’]
[TERMINATEDBY‘string’]
]/mysql5/mysql_local_sql/loaddata.txt'intotablegoods;
QueryOK,0rowsaffected(0.00sec)
注意在windows上使用的是后斜杠
注意1:
如果你使用LOW_PRIORITY,其执行将被搁置直到所有的客户端都读完数据。当然这只有在支持表级别的锁的引擎上才可用。
如果你执行并发COCURRENT,那么当插入时可以执行读取操作
注意2:LOCAL
*local影响期望文件的位置和错误的处理。当local被指定的时候,文件应该被客户端的程序在客户端上读取
并且发送到服务器上。文件位置要指定全路径。如果指定相对路径那么位置,那么这里的位置将是相对于客户端程序的位置。
*local没有被指定的话,文件这一定是存放在服务器端的,定位规则:
《1.全路径不必说
《2.相对路径,如果给出了相对路径的主要部分,那么服务器将在相对于服务器数据目录的位置寻找;
如果没有给出,那么将在默认数据库的数据库文件位置寻找。
注意3:replace和ignore(处理冗余键值应该采取的行为)
如果都没有指定那么这要视有没有local被声明。
没有local:发生错误,其余部分被忽略。
有local:默认的行为跟ignore被指定一样
注意4:LINES和FIELDS在命令上和select…intooutfile是一样的
缺省设置:
FIELDSTERMINATEDBY'\t'ENCLOSEDBY''ESCAPEDBY'\\'
LINESTERMINATEDBY'\n'STARTINGBY''
注意5:
startingby用法:
e.
b.txt
xxx44,铅笔,1,36
xxfafa78,88
helloxxx45,香蕉,6,30
mysql>loaddatainfile'D:/b.txt'into
tablegoodsfieldsterminatedby','lines
startingby'xxx';
7.LAODXML
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...]
[FROMtable_references
[PARTITIONpartition_list]
[WHEREwhere_condition]
[GROUPBY{col_name|expr|position}
[ASC|DESC],...[WITHROLLUP]]--ASC|DESC跟在groupby或者orderby后
[HAVINGwhere_condition]--在groupby之后,在orderby之前
[ORDERBY{col_name|expr|position}
[ASC|DESC],...]
[LIMIT{[offset,]row_count|row_countOFFSEToffset}]
[PROCEDUREprocedure_name(argument_list)]
[INTOOUTFILE'file_name'
[CHARACTERSETcharset_name]
export_options---主要包括FIELDS和LINES
|INTODUMPFILE'file_name'
|INTOvar_name[,var_name]]
[FORUPDATE|LOCKINSHAREMODE]]
注意1:having
having可以使用聚集函数而where不可以
注意2:limit
Inotherwords,[code]LIMIT
注意3:selectinto
(1)SELECTid,dataINTO@x,@yFROMtest.t1LIMIT1;
(2)The
statementisintendedprimarilytoletyouveryquicklydumpatabletoatextfileontheservermachine
如果是远程主机可以使用:shell>mysql–e“select…”>file_name
10.UPDATE
暂时先到这,后续补充~
相关文章推荐
- Log4j2官方文档翻译、学习笔记之二——Appender的分类及常用类型示例
- cockroach官方文档翻译---1.3 学习cockroachSQL
- Android Geofence的学习(二)继续翻译官方文档
- 学习Oracle7的OCI(Oracle Call Interface)时,翻译了一部分Oracle7的OCI官方文档
- MySQL 事务隔离级别相关官方文档翻译
- db4o_8.0对象数据库官方文档翻译_学习笔记二
- Mysql官方文档翻译 -- 10.1.3.1 Server字符集和字符列排序规则
- iOS 英语学习 翻译官方文档--不定时更新。
- MySQL5.7官方文档翻译: 全文索引,自然语言搜索模式
- SpringFramework学习-(1)SpringFramework官方文档翻译3
- Jinja2学习笔记暨官方文档的翻译 -- 转载
- 安卓学习-谷歌官方文档翻译01-Training-GettingStarted
- db4o_8.0对象数据库官方文档翻译_学习笔记四
- Jinja2学习笔记暨官方文档的翻译
- Mysql官方文档翻译 -- 10.1.3.2 Database字符集和字符列排序规则
- Android Geofence的学习(一)翻译官方文档
- spark mlib官方文档学习和翻译笔记(2)
- Sencha Touch 2 官方文档翻译之 Controllers(控制器学习指南)
- SpringFramework学习-(1)SpringFramework官方文档翻译2
- 《ios人机交互指南翻译系列之一,来自苹果最新官方文档,2015.8》 设计策略:把概念变成产品