· 9 years ago · Dec 08, 2016, 11:43 AM
1/* å¯åЍMySQL */
2net start mysql
3
4/* 连接与æ–å¼€æœåС噍 */
5mysql -h åœ°å€ -P ç«¯å£ -u 用户å -p 密ç
6
7/* 跳过æƒé™éªŒè¯ç™»å½•MySQL */
8mysqld --skip-grant-tables
9-- 修改root密ç
10密ç åŠ å¯†å‡½æ•°password()
11update mysql.user set password=password('root');
12
13SHOW PROCESSLIST -- 显示哪些线程æ£åœ¨è¿è¡Œ
14SHOW VARIABLES --
15
16/* æ•°æ®åº“æ“作 */ ------------------
17-- æŸ¥çœ‹å½“å‰æ•°æ®åº“
18 select database();
19-- æ˜¾ç¤ºå½“å‰æ—¶é—´ã€ç”¨æˆ·åã€æ•°æ®åº“版本
20 select now(), user(), version();
21-- 创建库
22 create database[ if not exists] æ•°æ®åº“å æ•°æ®åº“选项
23 æ•°æ®åº“选项:
24 CHARACTER SET charset_name
25 COLLATE collation_name
26-- 查看已有库
27 show databases[ like 'pattern']
28-- 查看当å‰åº“ä¿¡æ¯
29 show create database æ•°æ®åº“å
30-- 修改库的选项信æ¯
31 alter database 库å 选项信æ¯
32-- åˆ é™¤åº“
33 drop database[ if exists] æ•°æ®åº“å
34 åŒæ—¶åˆ 除该数æ®åº“相关的目录åŠå…¶ç›®å½•内容
35
36/* 表的æ“作 */ ------------------
37-- 创建表
38 create [temporary] table[ if not exists] [库å.]表å ( 表的结构定义 )[ 表选项]
39 æ¯ä¸ªå—段必须有数æ®ç±»åž‹
40 最åŽä¸€ä¸ªå—段åŽä¸èƒ½æœ‰é€—å·
41 temporary 临时表,会è¯ç»“æŸæ—¶è¡¨è‡ªåŠ¨æ¶ˆå¤±
42 å¯¹äºŽå—æ®µçš„定义:
43 å—æ®µå æ•°æ®ç±»åž‹ [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']
44-- 表选项
45 -- å—符集
46 CHARSET = charset_name
47 如果表没有设定,则使用数æ®åº“å—符集
48 -- å˜å‚¨å¼•擎
49 ENGINE = engine_name
50 è¡¨åœ¨ç®¡ç†æ•°æ®æ—¶é‡‡ç”¨çš„ä¸åŒçš„æ•°æ®ç»“构,结构ä¸åŒä¼šå¯¼è‡´å¤„ç†æ–¹å¼ã€æä¾›çš„特性æ“作ç‰ä¸åŒ
51 常è§çš„引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive
52 ä¸åŒçš„引擎在ä¿å˜è¡¨çš„ç»“æž„å’Œæ•°æ®æ—¶é‡‡ç”¨ä¸åŒçš„æ–¹å¼
53 MyISAM表文件å«ä¹‰ï¼š.frm表定义,.MYD表数æ®ï¼Œ.MYI表索引
54 InnoDB表文件å«ä¹‰ï¼š.frm表定义,表空间数æ®å’Œæ—¥å¿—文件
55 SHOW ENGINES -- 显示å˜å‚¨å¼•擎的状æ€ä¿¡æ¯
56 SHOW ENGINE 引擎å {LOGS|STATUS} -- 显示å˜å‚¨å¼•擎的日志或状æ€ä¿¡æ¯
57 -- æ•°æ®æ–‡ä»¶ç›®å½•
58 DATA DIRECTORY = '目录'
59 -- 索引文件目录
60 INDEX DIRECTORY = '目录'
61 -- 表注释
62 COMMENT = 'string'
63 -- 分区选项
64 PARTITION BY ... (è¯¦ç»†è§æ‰‹å†Œ)
65-- 查看所有表
66 SHOW TABLES[ LIKE 'pattern']
67 SHOW TABLES FROM 表å
68-- 查看表机构
69 SHOW CREATE TABLE 表å ï¼ˆä¿¡æ¯æ›´è¯¦ç»†ï¼‰
70 DESC 表å / DESCRIBE 表å / EXPLAIN 表å / SHOW COLUMNS FROM 表å [LIKE 'PATTERN']
71 SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
72-- 修改表
73 -- 修改表本身的选项
74 ALTER TABLE 表å 表的选项
75 EG: ALTER TABLE 表å ENGINE=MYISAM;
76 -- 对表进行é‡å‘½å
77 RENAME TABLE 原表å TO 新表å
78 RENAME TABLE 原表å TO 库å.表å (å¯å°†è¡¨ç§»åŠ¨åˆ°å¦ä¸€ä¸ªæ•°æ®åº“)
79 -- RENAMEå¯ä»¥äº¤æ¢ä¸¤ä¸ªè¡¨å
80 -- ä¿®æ”¹è¡¨çš„å—æ®µæœºæž„
81 ALTER TABLE è¡¨å æ“作å
82 -- æ“作å
83 ADD[ COLUMN] å—æ®µå -- å¢žåŠ å—æ®µ
84 AFTER å—æ®µå -- è¡¨ç¤ºå¢žåŠ åœ¨è¯¥å—æ®µååŽé¢
85 FIRST -- è¡¨ç¤ºå¢žåŠ åœ¨ç¬¬ä¸€ä¸ª
86 ADD PRIMARY KEY(å—æ®µå) -- 创建主键
87 ADD UNIQUE [索引å] (å—æ®µå)-- 创建唯一索引
88 ADD INDEX [索引å] (å—æ®µå) -- 创建普通索引
89 ADD
90 DROP[ COLUMN] å—æ®µå -- åˆ é™¤å—æ®µ
91 MODIFY[ COLUMN] å—æ®µå å—æ®µå±žæ€§ -- 支æŒå¯¹å—段属性进行修改,ä¸èƒ½ä¿®æ”¹å—段å(所有原有属性也需写上)
92 CHANGE[ COLUMN] åŽŸå—æ®µå æ–°å—æ®µå å—æ®µå±žæ€§ -- 支æŒå¯¹å—段å修改
93 DROP PRIMARY KEY -- åˆ é™¤ä¸»é”®(åˆ é™¤ä¸»é”®å‰éœ€åˆ 除其AUTO_INCREMENT属性)
94 DROP INDEX 索引å -- åˆ é™¤ç´¢å¼•
95 DROP FOREIGN KEY 外键 -- åˆ é™¤å¤–é”®
96
97-- åˆ é™¤è¡¨
98 DROP TABLE[ IF EXISTS] 表å ...
99-- 清空表数æ®
100 TRUNCATE [TABLE] 表å
101-- å¤åˆ¶è¡¨ç»“æž„
102 CREATE TABLE 表å LIKE è¦å¤åˆ¶çš„表å
103-- å¤åˆ¶è¡¨ç»“构和数æ®
104 CREATE TABLE 表å [AS] SELECT * FROM è¦å¤åˆ¶çš„表å
105-- æ£€æŸ¥è¡¨æ˜¯å¦æœ‰é”™è¯¯
106 CHECK TABLE tbl_name [, tbl_name] ... [option] ...
107-- 优化表
108 OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
109-- ä¿®å¤è¡¨
110 REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
111-- 分æžè¡¨
112 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
113
114
115
116/* æ•°æ®æ“作 */ ------------------
117-- 增
118 INSERT [INTO] 表å [(å—æ®µåˆ—表)] VALUES (值列表)[, (值列表), ...]
119 -- å¦‚æžœè¦æ’å…¥çš„å€¼åˆ—è¡¨åŒ…å«æ‰€æœ‰å—段并且顺åºä¸€è‡´ï¼Œåˆ™å¯ä»¥çœç•¥å—段列表。
120 -- å¯åŒæ—¶æ’å…¥å¤šæ¡æ•°æ®è®°å½•ï¼
121 REPLACE 与 INSERT å®Œå…¨ä¸€æ ·ï¼Œå¯äº’æ¢ã€‚
122 INSERT [INTO] 表å SET å—æ®µå=值[, å—æ®µå=值, ...]
123-- 查
124 SELECT å—æ®µåˆ—表 FROM 表å[ å…¶ä»–åå¥]
125 -- 坿¥è‡ªå¤šä¸ªè¡¨çš„å¤šä¸ªå—æ®µ
126 -- å…¶ä»–åå¥å¯ä»¥ä¸ä½¿ç”¨
127 -- å—æ®µåˆ—表å¯ä»¥ç”¨*ä»£æ›¿ï¼Œè¡¨ç¤ºæ‰€æœ‰å—æ®µ
128-- åˆ
129 DELETE FROM 表å[ åˆ é™¤æ¡ä»¶åå¥]
130 没有æ¡ä»¶åå¥ï¼Œåˆ™ä¼šåˆ 除全部
131-- 改
132 UPDATE 表å SET å—æ®µå=新值[, å—æ®µå=新值] [æ›´æ–°æ¡ä»¶]
133
134/* å—符集编ç */ ------------------
135-- MySQLã€æ•°æ®åº“ã€è¡¨ã€å—段å‡å¯è®¾ç½®ç¼–ç
136-- æ•°æ®ç¼–ç 与客户端编ç ä¸éœ€ä¸€è‡´
137SHOW VARIABLES LIKE 'character_set_%' -- 查看所有å—符集编ç 项
138 character_set_client å®¢æˆ·ç«¯å‘æœåС噍å‘逿•°æ®æ—¶ä½¿ç”¨çš„ç¼–ç
139 character_set_results æœåŠ¡å™¨ç«¯å°†ç»“æžœè¿”å›žç»™å®¢æˆ·ç«¯æ‰€ä½¿ç”¨çš„ç¼–ç
140 character_set_connection 连接层编ç
141SET å˜é‡å = å˜é‡å€¼
142 set character_set_client = gbk;
143 set character_set_results = gbk;
144 set character_set_connection = gbk;
145SET NAMES GBK; -- 相当于完æˆä»¥ä¸Šä¸‰ä¸ªè®¾ç½®
146-- æ ¡å¯¹é›†
147 æ ¡å¯¹é›†ç”¨ä»¥æŽ’åº
148 SHOW CHARACTER SET [LIKE 'pattern']/SHOW CHARSET [LIKE 'pattern'] 查看所有å—符集
149 SHOW COLLATION [LIKE 'pattern'] æŸ¥çœ‹æ‰€æœ‰æ ¡å¯¹é›†
150 charset å—符集编ç 设置å—符集编ç
151 collate æ ¡å¯¹é›†ç¼–ç è®¾ç½®æ ¡å¯¹é›†ç¼–ç
152
153/* æ•°æ®ç±»åž‹ï¼ˆåˆ—类型) */ ------------------
1541. 数值类型
155-- a. æ•´åž‹ ----------
156 类型 å—节 范围(有符å·ä½ï¼‰
157 tinyint 1å—节 -128 ~ 127 æ— ç¬¦å·ä½ï¼š0 ~ 255
158 smallint 2å—节 -32768 ~ 32767
159 mediumint 3å—节 -8388608 ~ 8388607
160 int 4å—节
161 bigint 8å—节
162
163 int(M) Mè¡¨ç¤ºæ€»ä½æ•°
164 - 默认å˜åœ¨ç¬¦å·ä½ï¼Œunsigned 属性修改
165 - 显示宽度,如果æŸä¸ªæ•°ä¸å¤Ÿå®šä¹‰å—æ®µæ—¶è®¾ç½®çš„ä½æ•°ï¼Œåˆ™å‰é¢ä»¥0补填,zerofill 属性修改
166 例:int(5) æ’入一个数'123',补填åŽä¸º'00123'
167 - åœ¨æ»¡è¶³è¦æ±‚的情况下,越å°è¶Šå¥½ã€‚
168 - 1表示bool值真,0表示bool值å‡ã€‚MySQL没有布尔类型,通过整型0å’Œ1表示。常用tinyint(1)表示布尔型。
169
170-- b. 浮点型 ----------
171 类型 å—节 范围
172 float(å•精度) 4å—节
173 double(åŒç²¾åº¦) 8å—节
174 浮点型既支æŒç¬¦å·ä½ unsigned å±žæ€§ï¼Œä¹Ÿæ”¯æŒæ˜¾ç¤ºå®½åº¦ zerofill 属性。
175 ä¸åŒäºŽæ•´åž‹ï¼Œå‰åŽå‡ä¼šè¡¥å¡«0.
176 å®šä¹‰æµ®ç‚¹åž‹æ—¶ï¼Œéœ€æŒ‡å®šæ€»ä½æ•°å’Œå°æ•°ä½æ•°ã€‚
177 float(M, D) double(M, D)
178 Mè¡¨ç¤ºæ€»ä½æ•°ï¼ŒDè¡¨ç¤ºå°æ•°ä½æ•°ã€‚
179 Må’ŒD的大å°ä¼šå†³å®šæµ®ç‚¹æ•°çš„范围。ä¸åŒäºŽæ•´åž‹çš„固定范围。
180 Mæ—¢è¡¨ç¤ºæ€»ä½æ•°ï¼ˆä¸åŒ…æ‹¬å°æ•°ç‚¹å’Œæ£è´Ÿå·ï¼‰ï¼Œä¹Ÿè¡¨ç¤ºæ˜¾ç¤ºå®½åº¦ï¼ˆæ‰€æœ‰æ˜¾ç¤ºç¬¦å·å‡åŒ…括)。
181 支æŒç§‘å¦è®¡æ•°æ³•表示。
182 浮点数表示近似值。
183
184-- c. 定点数 ----------
185 decimal -- å¯å˜é•¿åº¦
186 decimal(M, D) Mä¹Ÿè¡¨ç¤ºæ€»ä½æ•°ï¼ŒDè¡¨ç¤ºå°æ•°ä½æ•°ã€‚
187 ä¿å˜ä¸€ä¸ªç²¾ç¡®çš„æ•°å€¼ï¼Œä¸ä¼šå‘生数æ®çš„æ”¹å˜ï¼Œä¸åŒäºŽæµ®ç‚¹æ•°çš„å››èˆäº”入。
188 将浮点数转æ¢ä¸ºå—符串æ¥ä¿å˜ï¼Œæ¯9使•°å—ä¿å˜ä¸º4个å—节。
189
1902. å—符串类型
191-- a. char, varchar ----------
192 char 定长å—符串,速度快,但浪费空间
193 varchar å˜é•¿å—符串,速度慢,但节çœç©ºé—´
194 M表示能å˜å‚¨çš„æœ€å¤§é•¿åº¦ï¼Œæ¤é•¿åº¦æ˜¯å—符数,éžå—节数。
195 ä¸åŒçš„ç¼–ç ,所å 用的空间ä¸åŒã€‚
196 char,最多255个å—ç¬¦ï¼Œä¸Žç¼–ç æ— 关。
197 varchar,最多65535å—ç¬¦ï¼Œä¸Žç¼–ç æœ‰å…³ã€‚
198 ä¸€æ¡æœ‰æ•ˆè®°å½•最大ä¸èƒ½è¶…过65535个å—节。
199 utf8 最大为21844个å—符,gbk 最大为32766个å—符,latin1 最大为65532个å—符
200 varchar 是å˜é•¿çš„,需è¦åˆ©ç”¨å˜å‚¨ç©ºé—´ä¿å˜ varchar 的长度,如果数æ®å°äºŽ255个å—节,则采用一个å—节æ¥ä¿å˜é•¿åº¦ï¼Œå之需è¦ä¸¤ä¸ªå—节æ¥ä¿å˜ã€‚
201 varchar 的最大有效长度由最大行大å°å’Œä½¿ç”¨çš„å—符集确定。
202 最大有效长度是65532å—èŠ‚ï¼Œå› ä¸ºåœ¨varcharå˜å—符串时,第一个å—节是空的,ä¸å˜åœ¨ä»»ä½•æ•°æ®ï¼Œç„¶åŽè¿˜éœ€ä¸¤ä¸ªå—节æ¥å˜æ”¾å—符串的长度,所以有效长度是64432-1-2=65532å—节。
203 例:若一个表定义为 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; é—®N的最大值是多少? ç”:(65535-1-2-4-30*3)/3
204
205-- b. blob, text ----------
206 blob 二进制å—符串(å—节å—符串)
207 tinyblob, blob, mediumblob, longblob
208 text éžäºŒè¿›åˆ¶å—符串(å—符å—符串)
209 tinytext, text, mediumtext, longtext
210 text 在定义时,ä¸éœ€è¦å®šä¹‰é•¿åº¦ï¼Œä¹Ÿä¸ä¼šè®¡ç®—总长度。
211 text 类型在定义时,ä¸å¯ç»™default值
212
213-- c. binary, varbinary ----------
214 类似于charå’Œvarchar,用于ä¿å˜äºŒè¿›åˆ¶å—符串,也就是ä¿å˜å—节å—符串而éžå—符å—符串。
215 char, varchar, text 对应 binary, varbinary, blob.
216
2173. 日期时间类型
218 一般用整型ä¿å˜æ—¶é—´æˆ³ï¼Œå› 为PHPå¯ä»¥å¾ˆæ–¹ä¾¿çš„å°†æ—¶é—´æˆ³è¿›è¡Œæ ¼å¼åŒ–。
219 datetime 8å—节 æ—¥æœŸåŠæ—¶é—´ 1000-01-01 00:00:00 到 9999-12-31 23:59:59
220 date 3å—节 日期 1000-01-01 到 9999-12-31
221 timestamp 4å—节 时间戳 19700101000000 到 2038-01-19 03:14:07
222 time 3å—节 æ—¶é—´ -838:59:59 到 838:59:59
223 year 1å—节 年份 1901 - 2155
224
225datetime “YYYY-MM-DD hh:mm:ssâ€
226timestamp “YY-MM-DD hh:mm:ssâ€
227 “YYYYMMDDhhmmssâ€
228 “YYMMDDhhmmssâ€
229 YYYYMMDDhhmmss
230 YYMMDDhhmmss
231date “YYYY-MM-DDâ€
232 “YY-MM-DDâ€
233 “YYYYMMDDâ€
234 “YYMMDDâ€
235 YYYYMMDD
236 YYMMDD
237time “hh:mm:ssâ€
238 “hhmmssâ€
239 hhmmss
240year “YYYYâ€
241 “YYâ€
242 YYYY
243 YY
244
2454. 枚举和集åˆ
246-- 枚举(enum) ----------
247enum(val1, val2, val3...)
248 在已知的值ä¸è¿›è¡Œå•选。最大数é‡ä¸º65535.
249 枚举值在ä¿å˜æ—¶ï¼Œä»¥2个å—节的整型(smallint)ä¿å˜ã€‚æ¯ä¸ªæžšä¸¾å€¼ï¼ŒæŒ‰ä¿å˜çš„ä½ç½®é¡ºåºï¼Œä»Ž1开始é€ä¸€é€’增。
250 表现为å—符串类型,å˜å‚¨å´æ˜¯æ•´åž‹ã€‚
251 NULL值的索引是NULL。
252 空å—符串错误值的索引值是0。
253
254-- 集åˆï¼ˆset) ----------
255set(val1, val2, val3...)
256 create table tab ( gender set('ç”·', '女', 'æ— ') );
257 insert into tab values ('男, 女');
258 最多å¯ä»¥æœ‰64个ä¸åŒçš„æˆå‘˜ã€‚ä»¥bigintå˜å‚¨ï¼Œå…±8个å—节。采å–ä½è¿ç®—的形å¼ã€‚
259 当创建表时,SETæˆå‘˜å€¼çš„å°¾éƒ¨ç©ºæ ¼å°†è‡ªåŠ¨è¢«åˆ é™¤ã€‚
260
261/* 选择类型 */
262-- PHP角度
2631. 功能满足
2642. å˜å‚¨ç©ºé—´å°½é‡å°ï¼Œå¤„ç†æ•ˆçŽ‡æ›´é«˜
2653. 考虑兼容问题
266
267-- IPå˜å‚¨ ----------
2681. åªéœ€å˜å‚¨ï¼Œå¯ç”¨å—符串
2692. 如果需计算,查找ç‰ï¼Œå¯å˜å‚¨ä¸º4个å—èŠ‚çš„æ— ç¬¦å·int,å³unsigned
270 1) PHP函数转æ¢
271 ip2longå¯è½¬æ¢ä¸ºæ•´åž‹ï¼Œä½†ä¼šå‡ºçްæºå¸¦ç¬¦å·é—®é¢˜ã€‚éœ€æ ¼å¼åŒ–ä¸ºæ— ç¬¦å·çš„æ•´åž‹ã€‚
272 利用sprintfå‡½æ•°æ ¼å¼åŒ–å—符串
273 sprintf("%u", ip2long('192.168.3.134'));
274 ç„¶åŽç”¨long2ip将整型转回IPå—符串
275 2) MySQL函数转æ¢(æ— ç¬¦å·æ•´åž‹ï¼ŒUNSIGNED)
276 INET_ATON('127.0.0.1') 将IP转为整型
277 INET_NTOA(2130706433) 将整型转为IP
278
279
280
281
282/* 列属性(列约æŸï¼‰ */ ------------------
2831. 主键
284 - èƒ½å”¯ä¸€æ ‡è¯†è®°å½•çš„å—æ®µï¼Œå¯ä»¥ä½œä¸ºä¸»é”®ã€‚
285 - 一个表åªèƒ½æœ‰ä¸€ä¸ªä¸»é”®ã€‚
286 - 主键具有唯一性。
287 - å£°æ˜Žå—æ®µæ—¶ï¼Œç”¨ primary key æ ‡è¯†ã€‚
288 也å¯ä»¥åœ¨å—段列表之åŽå£°æ˜Ž
289 例:create table tab ( id int, stu varchar(10), primary key (id));
290 - 䏻键嗿®µçš„值ä¸èƒ½ä¸ºnull。
291 - 主键å¯ä»¥ç”±å¤šä¸ªå—段共åŒç»„æˆã€‚æ¤æ—¶éœ€è¦åœ¨å—段列表åŽå£°æ˜Žçš„æ–¹æ³•。
292 例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));
293
2942. unique 唯一索引(唯一约æŸï¼‰
295 使得æŸå—段的值也ä¸èƒ½é‡å¤ã€‚
296
2973. null 约æŸ
298 null䏿˜¯æ•°æ®ç±»åž‹ï¼Œæ˜¯åˆ—的一个属性。
299 表示当å‰åˆ—是å¦å¯ä»¥ä¸ºnull,表示什么都没有。
300 null, å…许为空。默认。
301 not null, ä¸å…许为空。
302 insert into tab values (null, 'val');
303 -- æ¤æ—¶è¡¨ç¤ºå°†ç¬¬ä¸€ä¸ªå—段的值设为null, å–å†³äºŽè¯¥å—æ®µæ˜¯å¦å…许为null
304
3054. default 默认值属性
306 当å‰å—段的默认值。
307 insert into tab values (default, 'val'); -- æ¤æ—¶è¡¨ç¤ºå¼ºåˆ¶ä½¿ç”¨é»˜è®¤å€¼ã€‚
308 create table tab ( add_time timestamp default current_timestamp );
309 -- è¡¨ç¤ºå°†å½“å‰æ—¶é—´çš„æ—¶é—´æˆ³è®¾ä¸ºé»˜è®¤å€¼ã€‚
310 current_date, current_time
311
3125. auto_increment 自动增长约æŸ
313 自动增长必须为索引(主键或unique)
314 åªèƒ½å˜åœ¨ä¸€ä¸ªå—段为自动增长。
315 默认为1开始自动增长。å¯ä»¥é€šè¿‡è¡¨å±žæ€§ auto_increment = x进行设置,或 alter table tbl auto_increment = x;
316
3176. comment 注释
318 例:create table tab ( id int ) comment '注释内容';
319
3207. foreign key 外键约æŸ
321 用于é™åˆ¶ä¸»è¡¨ä¸Žä»Žè¡¨æ•°æ®å®Œæ•´æ€§ã€‚
322 alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);
323 -- 将表t1çš„t1_id外键关è”到表t2çš„idå—æ®µã€‚
324 -- æ¯ä¸ªå¤–键都有一个åå—,å¯ä»¥é€šè¿‡ constraint 指定
325
326 å˜åœ¨å¤–键的表,称之为从表(å表),外键指å‘的表,称之为主表(父表)。
327
328 ä½œç”¨ï¼šä¿æŒæ•°æ®ä¸€è‡´æ€§ï¼Œå®Œæ•´æ€§ï¼Œä¸»è¦ç›®çš„æ˜¯æŽ§åˆ¶å˜å‚¨åœ¨å¤–键表(从表)ä¸çš„æ•°æ®ã€‚
329
330 MySQLä¸ï¼Œå¯ä»¥å¯¹InnoDB引擎使用外键约æŸï¼š
331 è¯æ³•:
332 foreign key (外键嗿®µï¼‰ references 主表å (å…³è”å—æ®µ) [ä¸»è¡¨è®°å½•åˆ é™¤æ—¶çš„åŠ¨ä½œ] [主表记录更新时的动作]
333 æ¤æ—¶éœ€è¦æ£€æµ‹ä¸€ä¸ªä»Žè¡¨çš„外键需è¦çº¦æŸä¸ºä¸»è¡¨çš„å·²å˜åœ¨çš„值。外键在没有关è”的情况下,å¯ä»¥è®¾ç½®ä¸ºnull.å‰ææ˜¯è¯¥å¤–é”®åˆ—ï¼Œæ²¡æœ‰not null。
334
335 å¯ä»¥ä¸æŒ‡å®šä¸»è¡¨è®°å½•æ›´æ”¹æˆ–æ›´æ–°æ—¶çš„åŠ¨ä½œï¼Œé‚£ä¹ˆæ¤æ—¶ä¸»è¡¨çš„æ“ä½œè¢«æ‹’ç»ã€‚
336 如果指定了 on update 或 on deleteï¼šåœ¨åˆ é™¤æˆ–æ›´æ–°æ—¶ï¼Œæœ‰å¦‚ä¸‹å‡ ä¸ªæ“作å¯ä»¥é€‰æ‹©ï¼š
337 1. cascadeï¼Œçº§è”æ“作。主表数æ®è¢«æ›´æ–°ï¼ˆä¸»é”®å€¼æ›´æ–°ï¼‰ï¼Œä»Žè¡¨ä¹Ÿè¢«æ›´æ–°ï¼ˆå¤–é”®å€¼æ›´æ–°ï¼‰ã€‚ä¸»è¡¨è®°å½•è¢«åˆ é™¤ï¼Œä»Žè¡¨ç›¸å…³è®°å½•ä¹Ÿè¢«åˆ é™¤ã€‚
338 2. set null,设置为null。主表数æ®è¢«æ›´æ–°ï¼ˆä¸»é”®å€¼æ›´æ–°ï¼‰ï¼Œä»Žè¡¨çš„外键被设置为nullã€‚ä¸»è¡¨è®°å½•è¢«åˆ é™¤ï¼Œä»Žè¡¨ç›¸å…³è®°å½•å¤–é”®è¢«è®¾ç½®æˆnull。但注æ„ï¼Œè¦æ±‚该外键列,没有not null属性约æŸã€‚
339 3. restrict,拒ç»çˆ¶è¡¨åˆ 除和更新。
340
341 注æ„,外键åªè¢«InnoDBå˜å‚¨å¼•擎所支æŒã€‚å…¶ä»–å¼•æ“Žæ˜¯ä¸æ”¯æŒçš„。
342
343
344/* 建表规范 */ ------------------
345 -- Normal Format, NF
346 - æ¯ä¸ªè¡¨ä¿å˜ä¸€ä¸ªå®žä½“ä¿¡æ¯
347 - æ¯ä¸ªå…·æœ‰ä¸€ä¸ªIDå—æ®µä½œä¸ºä¸»é”®
348 - ID主键 + 原å表
349 -- 1NF, 第一范å¼
350 å—æ®µä¸èƒ½å†åˆ†ï¼Œå°±æ»¡è¶³ç¬¬ä¸€èŒƒå¼ã€‚
351 -- 2NF, 第二范å¼
352 满足第一范å¼çš„å‰æä¸‹ï¼Œä¸èƒ½å‡ºçŽ°éƒ¨åˆ†ä¾èµ–。
353 消除符åˆä¸»é”®å°±å¯ä»¥é¿å…部分ä¾èµ–ã€‚å¢žåŠ å•列关键å—。
354 -- 3NF, 第三范å¼
355 满足第二范å¼çš„å‰æä¸‹ï¼Œä¸èƒ½å‡ºçŽ°ä¼ é€’ä¾èµ–。
356 æŸä¸ªå—段ä¾èµ–äºŽä¸»é”®ï¼Œè€Œæœ‰å…¶ä»–å—æ®µä¾èµ–äºŽè¯¥å—æ®µã€‚è¿™å°±æ˜¯ä¼ é€’ä¾èµ–。
357 将一个实体信æ¯çš„æ•°æ®æ”¾åœ¨ä¸€ä¸ªè¡¨å†…实现。
358
359
360/* select */ ------------------
361
362select [all|distinct] select_expr from -> where -> group by [åˆè®¡å‡½æ•°] -> having -> order by -> limit
363
364a. select_expr
365 -- å¯ä»¥ç”¨ * è¡¨ç¤ºæ‰€æœ‰å—æ®µã€‚
366 select * from tb;
367 -- å¯ä»¥ä½¿ç”¨è¡¨è¾¾å¼ï¼ˆè®¡ç®—å…¬å¼ã€å‡½æ•°è°ƒç”¨ã€å—段也是个表达å¼ï¼‰
368 select stu, 29+25, now() from tb;
369 -- å¯ä»¥ä¸ºæ¯ä¸ªåˆ—使用别åã€‚é€‚ç”¨äºŽç®€åŒ–åˆ—æ ‡è¯†ï¼Œé¿å…å¤šä¸ªåˆ—æ ‡è¯†ç¬¦é‡å¤ã€‚
370 - 使用 as 关键å—,也å¯çœç•¥ as.
371 select stu+10 as add10 from tb;
372
373b. from åå¥
374 ç”¨äºŽæ ‡è¯†æŸ¥è¯¢æ¥æºã€‚
375 -- å¯ä»¥ä¸ºè¡¨èµ·åˆ«å。使用as关键å—。
376 select * from tb1 as tt, tb2 as bb;
377 -- fromåå¥åŽï¼Œå¯ä»¥åŒæ—¶å‡ºçŽ°å¤šä¸ªè¡¨ã€‚
378 -- 多个表会横å‘å åŠ åˆ°ä¸€èµ·ï¼Œè€Œæ•°æ®ä¼šå½¢æˆä¸€ä¸ªç¬›å¡å°”积。
379 select * from tb1, tb2;
380
381c. where åå¥
382 -- 从fromèŽ·å¾—çš„æ•°æ®æºä¸è¿›è¡Œç›é€‰ã€‚
383 -- æ•´åž‹1表示真,0表示å‡ã€‚
384 -- 表达å¼ç”±è¿ç®—符和è¿ç®—数组æˆã€‚
385 -- è¿ç®—数:å˜é‡ï¼ˆå—段)ã€å€¼ã€å‡½æ•°è¿”回值
386 -- è¿ç®—符:
387 =, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
388 in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
389 is/is not åŠ ä¸Šture/false/unknown,检验æŸä¸ªå€¼çš„真å‡
390 <=>与<>功能相åŒï¼Œ<=>å¯ç”¨äºŽnull比较
391
392d. group by åå¥, 分组åå¥
393 group by å—æ®µ/别å [æŽ’åºæ–¹å¼]
394 分组åŽä¼šè¿›è¡ŒæŽ’åºã€‚å‡åºï¼šASC,é™åºï¼šDESC
395
396 以下[åˆè®¡å‡½æ•°]需é…åˆ group by 使用:
397 count 返回ä¸åŒçš„éžNULL值数目 count(*)ã€count(å—æ®µ)
398 sum 求和
399 max 求最大值
400 min 求最å°å€¼
401 avg 求平å‡å€¼
402 group_concat 返回带有æ¥è‡ªä¸€ä¸ªç»„的连接的éžNULL值的å—符串结果。组内å—符串连接。
403
404e. having åå¥ï¼Œæ¡ä»¶åå¥
405 与 where 功能ã€ç”¨æ³•相åŒï¼Œæ‰§è¡Œæ—¶æœºä¸åŒã€‚
406 where 在开始时执行检测数æ®ï¼Œå¯¹åŽŸæ•°æ®è¿›è¡Œè¿‡æ»¤ã€‚
407 having 对ç›é€‰å‡ºçš„ç»“æžœå†æ¬¡è¿›è¡Œè¿‡æ»¤ã€‚
408 having å—æ®µå¿…须是查询出æ¥çš„,where å—æ®µå¿…须是数æ®è¡¨å˜åœ¨çš„。
409 where ä¸å¯ä»¥ä½¿ç”¨å—段的别å,having å¯ä»¥ã€‚å› ä¸ºæ‰§è¡ŒWHEREä»£ç æ—¶ï¼Œå¯èƒ½å°šæœªç¡®å®šåˆ—值。
410 where ä¸å¯ä»¥ä½¿ç”¨åˆè®¡å‡½æ•°ã€‚一般需用åˆè®¡å‡½æ•°æ‰ä¼šç”¨ having
411 SQLæ ‡å‡†è¦æ±‚HAVING必须引用GROUP BYåå¥ä¸çš„列或用于åˆè®¡å‡½æ•°ä¸çš„列。
412
413f. order by åå¥ï¼ŒæŽ’åºåå¥
414 order by 排åºå—段/åˆ«å æŽ’åºæ–¹å¼ [,排åºå—段/åˆ«å æŽ’åºæ–¹å¼]...
415 å‡åºï¼šASC,é™åºï¼šDESC
416 支æŒå¤šä¸ªå—段的排åºã€‚
417
418g. limit åå¥ï¼Œé™åˆ¶ç»“果数é‡åå¥
419 仅对处ç†å¥½çš„结果进行数é‡é™åˆ¶ã€‚将处ç†å¥½çš„结果的看作是一个集åˆï¼ŒæŒ‰ç…§è®°å½•出现的顺åºï¼Œç´¢å¼•从0开始。
420 limit èµ·å§‹ä½ç½®, èŽ·å–æ¡æ•°
421 çœç•¥ç¬¬ä¸€ä¸ªå‚数,表示从索引0开始。limit èŽ·å–æ¡æ•°
422
423h. distinct, all 选项
424 distinct 去除é‡å¤è®°å½•
425 默认为 all, 全部记录
426
427
428/* UNION */ ------------------
429 将多个selectæŸ¥è¯¢çš„ç»“æžœç»„åˆæˆä¸€ä¸ªç»“果集åˆã€‚
430 SELECT ... UNION [ALL|DISTINCT] SELECT ...
431 默认 DISTINCT æ–¹å¼ï¼Œå³æ‰€æœ‰è¿”回的行都是唯一的
432 建议,对æ¯ä¸ªSELECTæŸ¥è¯¢åŠ ä¸Šå°æ‹¬å·åŒ…裹。
433 ORDER BY æŽ’åºæ—¶ï¼Œéœ€åŠ ä¸Š LIMIT 进行结åˆã€‚
434 需è¦å„selectæŸ¥è¯¢çš„å—æ®µæ•°é‡ä¸€æ ·ã€‚
435 æ¯ä¸ªselectæŸ¥è¯¢çš„å—æ®µåˆ—表(æ•°é‡ã€ç±»åž‹)åº”ä¸€è‡´ï¼Œå› ä¸ºç»“æžœä¸çš„å—æ®µå以第一æ¡selectè¯å¥ä¸ºå‡†ã€‚
436
437
438/* åæŸ¥è¯¢ */ ------------------
439 - åæŸ¥è¯¢éœ€ç”¨æ‹¬å·åŒ…裹。
440-- fromåž‹
441 fromåŽè¦æ±‚æ˜¯ä¸€ä¸ªè¡¨ï¼Œå¿…é¡»ç»™åæŸ¥è¯¢ç»“æžœå–个别å。
442 - 简化æ¯ä¸ªæŸ¥è¯¢å†…çš„æ¡ä»¶ã€‚
443 - from型需将结果生æˆä¸€ä¸ªä¸´æ—¶è¡¨æ ¼ï¼Œå¯ç”¨ä»¥åŽŸè¡¨çš„é”定的释放。
444 - åæŸ¥è¯¢è¿”å›žä¸€ä¸ªè¡¨ï¼Œè¡¨åž‹åæŸ¥è¯¢ã€‚
445 select * from (select * from tb where id>0) as subfrom where id>1;
446-- whereåž‹
447 - åæŸ¥è¯¢è¿”å›žä¸€ä¸ªå€¼ï¼Œæ ‡é‡å查询。
448 - ä¸éœ€è¦ç»™å查询å–别å。
449 - whereåæŸ¥è¯¢å†…的表,ä¸èƒ½ç›´æŽ¥ç”¨ä»¥æ›´æ–°ã€‚
450 select * from tb where money = (select max(money) from tb);
451 -- åˆ—åæŸ¥è¯¢
452 å¦‚æžœåæŸ¥è¯¢ç»“果返回的是一列。
453 使用 in 或 not in å®ŒæˆæŸ¥è¯¢
454 exists å’Œ not exists æ¡ä»¶
455 å¦‚æžœåæŸ¥è¯¢è¿”回数æ®ï¼Œåˆ™è¿”回1或0ã€‚å¸¸ç”¨äºŽåˆ¤æ–æ¡ä»¶ã€‚
456 select column1 from t1 where exists (select * from t2);
457 -- è¡ŒåæŸ¥è¯¢
458 查询æ¡ä»¶æ˜¯ä¸€ä¸ªè¡Œã€‚
459 select * from t1 where (id, gender) in (select id, gender from t2);
460 è¡Œæž„é€ ç¬¦ï¼š(col1, col2, ...) 或 ROW(col1, col2, ...)
461 è¡Œæž„é€ ç¬¦é€šå¸¸ç”¨äºŽä¸Žå¯¹èƒ½è¿”å›žä¸¤ä¸ªæˆ–ä¸¤ä¸ªä»¥ä¸Šåˆ—çš„åæŸ¥è¯¢è¿›è¡Œæ¯”较。
462
463 -- 特殊è¿ç®—符
464 != all() 相当于 not in
465 = some() 相当于 in。any 是 some 的别å
466 != some() ä¸ç‰åŒäºŽ not in,ä¸ç‰äºŽå…¶ä¸æŸä¸€ä¸ªã€‚
467 all, some å¯ä»¥é…åˆå…¶ä»–è¿ç®—符一起使用。
468
469
470/* 连接查询(join) */ ------------------
471 å°†å¤šä¸ªè¡¨çš„å—æ®µè¿›è¡Œè¿žæŽ¥ï¼Œå¯ä»¥æŒ‡å®šè¿žæŽ¥æ¡ä»¶ã€‚
472-- 内连接(inner join)
473 - 默认就是内连接,å¯çœç•¥inner。
474 - åªæœ‰æ•°æ®å˜åœ¨æ—¶æ‰èƒ½å‘é€è¿žæŽ¥ã€‚å³è¿žæŽ¥ç»“æžœä¸èƒ½å‡ºçŽ°ç©ºè¡Œã€‚
475 on 表示连接æ¡ä»¶ã€‚å…¶æ¡ä»¶è¡¨è¾¾å¼ä¸Žwhere类似。也å¯ä»¥çœç•¥æ¡ä»¶ï¼ˆè¡¨ç¤ºæ¡ä»¶æ°¸è¿œä¸ºçœŸï¼‰
476 也å¯ç”¨where表示连接æ¡ä»¶ã€‚
477 还有 using, ä½†éœ€å—æ®µå相åŒã€‚ using(å—æ®µå)
478
479 -- 交å‰è¿žæŽ¥ cross join
480 å³ï¼Œæ²¡æœ‰æ¡ä»¶çš„内连接。
481 select * from tb1 cross join tb2;
482-- 外连接(outer join)
483 - 如果数æ®ä¸å˜åœ¨ï¼Œä¹Ÿä¼šå‡ºçŽ°åœ¨è¿žæŽ¥ç»“æžœä¸ã€‚
484 -- 左外连接 left join
485 如果数æ®ä¸å˜åœ¨ï¼Œå·¦è¡¨è®°å½•会出现,而å³è¡¨ä¸ºnullå¡«å……
486 -- å³å¤–连接 right join
487 如果数æ®ä¸å˜åœ¨ï¼Œå³è¡¨è®°å½•会出现,而左表为nullå¡«å……
488-- 自然连接(natural join)
489 自动判æ–连接æ¡ä»¶å®Œæˆè¿žæŽ¥ã€‚
490 相当于çœç•¥äº†using,会自动查找相åŒå—段å。
491 natural join
492 natural left join
493 natural right join
494
495select 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;
496
497/* 导入导出 */ ------------------
498select * into outfile æ–‡ä»¶åœ°å€ [æŽ§åˆ¶æ ¼å¼] from 表å; -- 导出表数æ®
499load data [local] infile æ–‡ä»¶åœ°å€ [replace|ignore] into table 表å [æŽ§åˆ¶æ ¼å¼]; -- 导入数æ®
500 生æˆçš„æ•°æ®é»˜è®¤çš„分隔符是制表符
501 localæœªæŒ‡å®šï¼Œåˆ™æ•°æ®æ–‡ä»¶å¿…须在æœåŠ¡å™¨ä¸Š
502 replace å’Œ ignore å…³é”®è¯æŽ§åˆ¶å¯¹çŽ°æœ‰çš„å”¯ä¸€é”®è®°å½•çš„é‡å¤çš„处ç†
503-- æŽ§åˆ¶æ ¼å¼
504fields æŽ§åˆ¶å—æ®µæ ¼å¼
505默认:fields terminated by '\t' enclosed by '' escaped by '\\'
506 terminated by 'string' -- 终æ¢
507 enclosed by 'char' -- 包裹
508 escaped by 'char' -- 转义
509 -- 示例:
510 SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
511 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
512 LINES TERMINATED BY '\n'
513 FROM test_table;
514lines æŽ§åˆ¶è¡Œæ ¼å¼
515默认:lines terminated by '\n'
516 terminated by 'string' -- 终æ¢
517
518/* insert */ ------------------
519selectè¯å¥èŽ·å¾—çš„æ•°æ®å¯ä»¥ç”¨insertæ’入。
520
521å¯ä»¥çœç•¥å¯¹åˆ—çš„æŒ‡å®šï¼Œè¦æ±‚ values () 括å·å†…,æä¾›ç»™äº†æŒ‰ç…§åˆ—顺åºå‡ºçŽ°çš„æ‰€æœ‰å—æ®µçš„值。
522 或者使用setè¯æ³•。
523 insert into tbl_name set field=value,...ï¼›
524
525å¯ä»¥ä¸€æ¬¡æ€§ä½¿ç”¨å¤šä¸ªå€¼ï¼Œé‡‡ç”¨(), (), ();的形å¼ã€‚
526 insert into tbl_name values (), (), ();
527
528å¯ä»¥åœ¨åˆ—值指定时,使用表达å¼ã€‚
529 insert into tbl_name values (field_value, 10+10, now());
530å¯ä»¥ä½¿ç”¨ä¸€ä¸ªç‰¹æ®Šå€¼ default,表示该列使用默认值。
531 insert into tbl_name values (field_value, default);
532
533å¯ä»¥é€šè¿‡ä¸€ä¸ªæŸ¥è¯¢çš„ç»“æžœï¼Œä½œä¸ºéœ€è¦æ’入的值。
534 insert into tbl_name select ...;
535
536å¯ä»¥æŒ‡å®šåœ¨æ’å…¥çš„å€¼å‡ºçŽ°ä¸»é”®ï¼ˆæˆ–å”¯ä¸€ç´¢å¼•ï¼‰å†²çªæ—¶ï¼Œæ›´æ–°å…¶ä»–éžä¸»é”®åˆ—的信æ¯ã€‚
537 insert into tbl_name values/set/select on duplicate key update å—æ®µ=值, …;
538
539/* delete */ ------------------
540DELETE FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]
541
542按照æ¡ä»¶åˆ 除
543
544æŒ‡å®šåˆ é™¤çš„æœ€å¤šè®°å½•æ•°ã€‚Limit
545
546å¯ä»¥é€šè¿‡æŽ’åºæ¡ä»¶åˆ 除。order by + limit
547
548支æŒå¤šè¡¨åˆ é™¤ï¼Œä½¿ç”¨ç±»ä¼¼è¿žæŽ¥è¯æ³•。
549delete from 需è¦åˆ 除数æ®å¤šè¡¨1,表2 using 表连接æ“作 æ¡ä»¶ã€‚
550
551/* truncate */ ------------------
552TRUNCATE [TABLE] tbl_name
553清空数æ®
554åˆ é™¤é‡å»ºè¡¨
555
556区别:
5571,truncate æ˜¯åˆ é™¤è¡¨å†åˆ›å»ºï¼Œdelete æ˜¯é€æ¡åˆ 除
5582,truncate é‡ç½®auto_increment的值。而deleteä¸ä¼š
5593,truncate ä¸çŸ¥é“åˆ é™¤äº†å‡ æ¡ï¼Œè€Œdelete知é“。
5604,当被用于带分区的表时,truncate 会ä¿ç•™åˆ†åŒº
561
562
563/* 备份与还原 */ ------------------
564备份,将数æ®çš„结构与表内数æ®ä¿å˜èµ·æ¥ã€‚
565利用 mysqldump 指令完æˆã€‚
566
567-- 导出
5681. å¯¼å‡ºä¸€å¼ è¡¨
569  mysqldump -u用户å -p密ç 库å 表å > 文件å(D:/a.sql)
5702. å¯¼å‡ºå¤šå¼ è¡¨
571  mysqldump -u用户å -p密ç 库å 表1 表2 表3 > 文件å(D:/a.sql)
5723. 导出所有表
573  mysqldump -u用户å -p密ç 库å > 文件å(D:/a.sql)
5744. 导出一个库
575  mysqldump -u用户å -p密ç -B 库å > 文件å(D:/a.sql)
576
577å¯ä»¥-wæºå¸¦å¤‡ä»½æ¡ä»¶
578
579-- 导入
5801. 在登录mysql的情况下:
581  source 备份文件
5822. 在ä¸ç™»å½•的情况下
583  mysql -u用户å -p密ç 库å < 备份文件
584
585
586/* 视图 */ ------------------
587什么是视图:
588 视图是一个虚拟表,其内容由查询定义。åŒçœŸå®žçš„è¡¨ä¸€æ ·ï¼Œè§†å›¾åŒ…å«ä¸€ç³»åˆ—带有å称的列和行数æ®ã€‚但是,视图并ä¸åœ¨æ•°æ®åº“ä¸ä»¥å˜å‚¨çš„æ•°æ®å€¼é›†å½¢å¼å˜åœ¨ã€‚è¡Œå’Œåˆ—æ•°æ®æ¥è‡ªç”±å®šä¹‰è§†å›¾çš„æŸ¥è¯¢æ‰€å¼•用的表,并且在引用视图时动æ€ç”Ÿæˆã€‚
589 视图具有表结构文件,但ä¸å˜åœ¨æ•°æ®æ–‡ä»¶ã€‚
590 坹其䏿‰€å¼•用的基础表æ¥è¯´ï¼Œè§†å›¾çš„作用类似于ç›é€‰ã€‚定义视图的ç›é€‰å¯ä»¥æ¥è‡ªå½“剿ˆ–其它数æ®åº“的一个或多个表,或者其它视图。通过视图进行查询没有任何é™åˆ¶ï¼Œé€šè¿‡å®ƒä»¬è¿›è¡Œæ•°æ®ä¿®æ”¹æ—¶çš„é™åˆ¶ä¹Ÿå¾ˆå°‘。
591 视图是å˜å‚¨åœ¨æ•°æ®åº“ä¸çš„æŸ¥è¯¢çš„sqlè¯å¥ï¼Œå®ƒä¸»è¦å‡ºäºŽä¸¤ç§åŽŸå› ï¼šå®‰å…¨åŽŸå› ï¼Œè§†å›¾å¯ä»¥éšè—一些数æ®ï¼Œå¦‚:社会ä¿é™©åŸºé‡‘表,å¯ä»¥ç”¨è§†å›¾åªæ˜¾ç¤ºå§“å,地å€ï¼Œè€Œä¸æ˜¾ç¤ºç¤¾ä¼šä¿é™©å·å’Œå·¥èµ„æ•°ç‰ï¼Œå¦ä¸€åŽŸå› æ˜¯å¯ä½¿å¤æ‚的查询易于ç†è§£å’Œä½¿ç”¨ã€‚
592
593-- 创建视图
594CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement
595 - 视图åå¿…é¡»å”¯ä¸€ï¼ŒåŒæ—¶ä¸èƒ½ä¸Žè¡¨é‡å。
596 - 视图å¯ä»¥ä½¿ç”¨selectè¯å¥æŸ¥è¯¢åˆ°çš„列å,也å¯ä»¥è‡ªå·±æŒ‡å®šç›¸åº”的列å。
597 - å¯ä»¥æŒ‡å®šè§†å›¾æ‰§è¡Œçš„算法,通过ALGORITHM指定。
598 - column_list如果å˜åœ¨ï¼Œåˆ™æ•°ç›®å¿…é¡»ç‰äºŽSELECTè¯å¥æ£€ç´¢çš„列数
599
600-- 查看结构
601 SHOW CREATE VIEW view_name
602
603-- åˆ é™¤è§†å›¾
604 - åˆ é™¤è§†å›¾åŽï¼Œæ•°æ®ä¾ç„¶å˜åœ¨ã€‚
605 - å¯åŒæ—¶åˆ 除多个视图。
606 DROP VIEW [IF EXISTS] view_name ...
607
608-- 修改视图结构
609 - 一般ä¸ä¿®æ”¹è§†å›¾ï¼Œå› ä¸ºä¸æ˜¯æ‰€æœ‰çš„æ›´æ–°è§†å›¾éƒ½ä¼šæ˜ 射到表上。
610 ALTER VIEW view_name [(column_list)] AS select_statement
611
612-- 视图作用
613 1. 简化业务逻辑
614 2. 对客户端éšè—真实的表结构
615
616-- 视图算法(ALGORITHM)
617 MERGE åˆå¹¶
618 将视图的查询è¯å¥ï¼Œä¸Žå¤–部查询需è¦å…ˆåˆå¹¶å†æ‰§è¡Œï¼
619 TEMPTABLE 临时表
620 将视图执行完毕åŽï¼Œå½¢æˆä¸´æ—¶è¡¨ï¼Œå†åšå¤–层查询ï¼
621 UNDEFINED 未定义(默认),指的是MySQL自主去选择相应的算法。
622
623
624
625/* 事务(transaction) */ ------------------
626事务是指逻辑上的一组æ“作,组æˆè¿™ç»„æ“作的å„个å•元,è¦ä¸å…¨æˆåŠŸè¦ä¸å…¨å¤±è´¥ã€‚
627 - 支æŒè¿žç»SQL的集体æˆåŠŸæˆ–é›†ä½“æ’¤é”€ã€‚
628 - 事务是数æ®åº“åœ¨æ•°æ®æ™šè‡ªä¹ æ–¹é¢çš„一个功能。
629 - 需è¦åˆ©ç”¨ InnoDB 或 BDB å˜å‚¨å¼•擎,对自动æäº¤çš„特性支æŒå®Œæˆã€‚
630 - InnoDB被称为事务安全型引擎。
631
632-- 事务开å¯
633 START TRANSACTION; 或者 BEGIN;
634 å¼€å¯äº‹åŠ¡åŽï¼Œæ‰€æœ‰è¢«æ‰§è¡Œçš„SQLè¯å¥å‡è¢«è®¤ä½œå½“å‰äº‹åŠ¡å†…çš„SQLè¯å¥ã€‚
635-- 事务æäº¤
636 COMMIT;
637-- 事务回滚
638 ROLLBACK;
639 如果部分æ“作å‘ç”Ÿé—®é¢˜ï¼Œæ˜ å°„åˆ°äº‹åŠ¡å¼€å¯å‰ã€‚
640
641-- 事务的特性
642 1. åŽŸåæ€§ï¼ˆAtomicity)
643 事务是一个ä¸å¯åˆ†å‰²çš„工作å•ä½ï¼Œäº‹åŠ¡ä¸çš„æ“ä½œè¦ä¹ˆéƒ½å‘生,è¦ä¹ˆéƒ½ä¸å‘生。
644 2. 一致性(Consistency)
645 事务å‰åŽæ•°æ®çš„å®Œæ•´æ€§å¿…é¡»ä¿æŒä¸€è‡´ã€‚
646 - äº‹åŠ¡å¼€å§‹å’Œç»“æŸæ—¶ï¼Œå¤–部数æ®ä¸€è‡´
647 - 在整个事务过程ä¸ï¼Œæ“作是连ç»çš„
648 3. 隔离性(Isolation)
649 多个用户并å‘访问数æ®åº“时,一个用户的事务ä¸èƒ½è¢«å…¶å®ƒç”¨æˆ·çš„事物所干扰,多个并å‘事务之间的数æ®è¦ç›¸äº’隔离。
650 4. æŒä¹…性(Durability)
651 一个事务一旦被æäº¤ï¼Œå®ƒå¯¹æ•°æ®åº“ä¸çš„æ•°æ®æ”¹å˜å°±æ˜¯æ°¸ä¹…性的。
652
653-- 事务的实现
654 1. è¦æ±‚是事务支æŒçš„表类型
655 2. 执行一组相关的æ“作å‰å¼€å¯äº‹åŠ¡
656 3. 整组æ“作完æˆåŽï¼Œéƒ½æˆåŠŸï¼Œåˆ™æäº¤ï¼›å¦‚æžœå˜åœ¨å¤±è´¥ï¼Œé€‰æ‹©å›žæ»šï¼Œåˆ™ä¼šå›žåˆ°äº‹åŠ¡å¼€å§‹çš„å¤‡ä»½ç‚¹ã€‚
657
658-- 事务的原ç†
659 利用InnoDB的自动æäº¤(autocommit)特性完æˆã€‚
660 普通的MySQL执行è¯å¥åŽï¼Œå½“å‰çš„æ•°æ®æäº¤æ“作å‡å¯è¢«å…¶ä»–客户端å¯è§ã€‚
661 而事务是暂时关é—“自动æäº¤â€æœºåˆ¶ï¼Œéœ€è¦commitæäº¤æŒä¹…åŒ–æ•°æ®æ“作。
662
663-- 注æ„
664 1. æ•°æ®å®šä¹‰è¯è¨€ï¼ˆDDL)è¯å¥ä¸èƒ½è¢«å›žæ»šï¼Œæ¯”å¦‚åˆ›å»ºæˆ–å–æ¶ˆæ•°æ®åº“çš„è¯å¥ï¼Œå’Œåˆ›å»ºã€å–消或更改表或å˜å‚¨çš„å程åºçš„è¯å¥ã€‚
665 2. 事务ä¸èƒ½è¢«åµŒå¥—
666
667-- ä¿å˜ç‚¹
668 SAVEPOINT ä¿å˜ç‚¹åç§° -- 设置一个事务ä¿å˜ç‚¹
669 ROLLBACK TO SAVEPOINT ä¿å˜ç‚¹åç§° -- 回滚到ä¿å˜ç‚¹
670 RELEASE SAVEPOINT ä¿å˜ç‚¹åç§° -- åˆ é™¤ä¿å˜ç‚¹
671
672-- InnoDB自动æäº¤ç‰¹æ€§è®¾ç½®
673 SET autocommit = 0|1; 0表示关é—自动æäº¤ï¼Œ1表示开å¯è‡ªåЍæäº¤ã€‚
674 - 如果关é—了,那普通æ“作的结果对其他客户端也ä¸å¯è§ï¼Œéœ€è¦commitæäº¤åŽæ‰èƒ½æŒä¹…åŒ–æ•°æ®æ“作。
675 - 也å¯ä»¥å…³é—自动æäº¤æ¥å¼€å¯äº‹åŠ¡ã€‚ä½†ä¸ŽSTART TRANSACTIONä¸åŒçš„æ˜¯ï¼Œ
676 SET autocommitæ˜¯æ°¸ä¹…æ”¹å˜æœåŠ¡å™¨çš„è®¾ç½®ï¼Œç›´åˆ°ä¸‹æ¬¡å†æ¬¡ä¿®æ”¹è¯¥è®¾ç½®ã€‚(针对当å‰è¿žæŽ¥)
677 而START TRANSACTION记录开å¯å‰çš„状æ€ï¼Œè€Œä¸€æ—¦äº‹åŠ¡æäº¤æˆ–回滚åŽå°±éœ€è¦å†æ¬¡å¼€å¯äº‹åŠ¡ã€‚(针对当å‰äº‹åŠ¡)
678
679
680/* é”表 */
681表é”定åªç”¨äºŽé˜²æ¢å…¶å®ƒå®¢æˆ·ç«¯è¿›è¡Œä¸æ£å½“地读å–和写入
682MyISAM 支æŒè¡¨é”,InnoDB 支æŒè¡Œé”
683-- é”定
684 LOCK TABLES tbl_name [AS alias]
685-- è§£é”
686 UNLOCK TABLES
687
688
689/* 触å‘器 */ ------------------
690 触å‘ç¨‹åºæ˜¯ä¸Žè¡¨æœ‰å…³çš„命忕°æ®åº“对象,当该表出现特定事件时,将激活该对象
691 监å¬ï¼šè®°å½•çš„å¢žåŠ ã€ä¿®æ”¹ã€åˆ 除。
692
693-- 创建触å‘器
694CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
695 傿•°ï¼š
696 trigger_time是触å‘程åºçš„动作时间。它å¯ä»¥æ˜¯ before 或 after,以指明触å‘ç¨‹åºæ˜¯åœ¨æ¿€æ´»å®ƒçš„è¯å¥ä¹‹å‰æˆ–之åŽè§¦å‘。
697 trigger_event指明了激活触å‘程åºçš„è¯å¥çš„类型
698 INSERT:将新行æ’入表时激活触å‘程åº
699 UPDATE:更改æŸä¸€è¡Œæ—¶æ¿€æ´»è§¦å‘程åº
700 DELETE:从表ä¸åˆ 除æŸä¸€è¡Œæ—¶æ¿€æ´»è§¦å‘程åº
701 tbl_name:监å¬çš„表,必须是永久性的表,ä¸èƒ½å°†è§¦å‘程åºä¸ŽTEMPORARY表或视图关è”èµ·æ¥ã€‚
702 trigger_stmt:当触å‘ç¨‹åºæ¿€æ´»æ—¶æ‰§è¡Œçš„è¯å¥ã€‚执行多个è¯å¥ï¼Œå¯ä½¿ç”¨BEGIN...ENDå¤åˆè¯å¥ç»“æž„
703
704-- åˆ é™¤
705DROP TRIGGER [schema_name.]trigger_name
706
707å¯ä»¥ä½¿ç”¨oldå’Œnew代替旧的和新的数æ®
708 æ›´æ–°æ“ä½œï¼Œæ›´æ–°å‰æ˜¯oldï¼Œæ›´æ–°åŽæ˜¯new.
709 åˆ é™¤æ“ä½œï¼Œåªæœ‰old.
710 å¢žåŠ æ“ä½œï¼Œåªæœ‰new.
711
712-- 注æ„
713 1. 对于具有相åŒè§¦å‘程åºåŠ¨ä½œæ—¶é—´å’Œäº‹ä»¶çš„ç»™å®šè¡¨ï¼Œä¸èƒ½æœ‰ä¸¤ä¸ªè§¦å‘程åºã€‚
714
715
716-- å—符连接函数
717concat(str1[, str2,...])
718
719-- 分支è¯å¥
720if æ¡ä»¶ then
721 执行è¯å¥
722elseif æ¡ä»¶ then
723 执行è¯å¥
724else
725 执行è¯å¥
726end if;
727
728-- 修改最外层è¯å¥ç»“æŸç¬¦
729delimiter 自定义结æŸç¬¦å·
730 SQLè¯å¥
731自定义结æŸç¬¦å·
732
733delimiter ; -- 修改回原æ¥çš„分å·
734
735-- è¯å¥å—包裹
736begin
737 è¯å¥å—
738end
739
740-- 特殊的执行
7411. åªè¦æ·»åŠ è®°å½•ï¼Œå°±ä¼šè§¦å‘程åºã€‚
7422. Insert into on duplicate key update è¯æ³•会触å‘:
743 如果没有é‡å¤è®°å½•ï¼Œä¼šè§¦å‘ before insert, after insert;
744 如果有é‡å¤è®°å½•å¹¶æ›´æ–°ï¼Œä¼šè§¦å‘ before insert, before update, after update;
745 如果有é‡å¤è®°å½•但是没有å‘ç”Ÿæ›´æ–°ï¼Œåˆ™è§¦å‘ before insert, before update
7463. Replace è¯æ³• 如果有记录,则执行 before insert, before delete, after delete, after insert
747
748
749/* SQL编程 */ ------------------
750
751--// 局部å˜é‡ ----------
752-- å˜é‡å£°æ˜Ž
753 declare var_name[,...] type [default value]
754 这个è¯å¥è¢«ç”¨æ¥å£°æ˜Žå±€éƒ¨å˜é‡ã€‚è¦ç»™å˜é‡æä¾›ä¸€ä¸ªé»˜è®¤å€¼ï¼Œè¯·åŒ…å«ä¸€ä¸ªdefaultåå¥ã€‚值å¯ä»¥è¢«æŒ‡å®šä¸ºä¸€ä¸ªè¡¨è¾¾å¼ï¼Œä¸éœ€è¦ä¸ºä¸€ä¸ªå¸¸æ•°ã€‚如果没有defaultåå¥ï¼Œåˆå§‹å€¼ä¸ºnull。
755
756-- 赋值
757 使用 set å’Œ select into è¯å¥ä¸ºå˜é‡èµ‹å€¼ã€‚
758
759 - 注æ„:在函数内是å¯ä»¥ä½¿ç”¨å…¨å±€å˜é‡ï¼ˆç”¨æˆ·è‡ªå®šä¹‰çš„å˜é‡ï¼‰
760
761
762--// 全局å˜é‡ ----------
763-- 定义ã€èµ‹å€¼
764set è¯å¥å¯ä»¥å®šä¹‰å¹¶ä¸ºå˜é‡èµ‹å€¼ã€‚
765set @var = value;
766也å¯ä»¥ä½¿ç”¨select intoè¯å¥ä¸ºå˜é‡åˆå§‹åŒ–å¹¶èµ‹å€¼ã€‚è¿™æ ·è¦æ±‚selectè¯å¥åªèƒ½è¿”回一行,但是å¯ä»¥æ˜¯å¤šä¸ªå—段,就æ„味ç€åŒæ—¶ä¸ºå¤šä¸ªå˜é‡è¿›è¡Œèµ‹å€¼ï¼Œå˜é‡çš„æ•°é‡éœ€è¦ä¸ŽæŸ¥è¯¢çš„列数一致。
767还å¯ä»¥æŠŠèµ‹å€¼è¯å¥çœ‹ä½œä¸€ä¸ªè¡¨è¾¾å¼ï¼Œé€šè¿‡select执行完æˆã€‚æ¤æ—¶ä¸ºäº†é¿å…=被当作关系è¿ç®—符看待,使用:=代替。(setè¯å¥å¯ä»¥ä½¿ç”¨= å’Œ :=)。
768select @var:=20;
769select @v1:=id, @v2=name from t1 limit 1;
770select * from tbl_name where @var:=30;
771
772select into å¯ä»¥å°†è¡¨ä¸æŸ¥è¯¢èŽ·å¾—çš„æ•°æ®èµ‹ç»™å˜é‡ã€‚
773 -| select max(height) into @max_height from tb;
774
775-- 自定义å˜é‡å
776为了é¿å…selectè¯å¥ä¸ï¼Œç”¨æˆ·è‡ªå®šä¹‰çš„å˜é‡ä¸Žç³»ç»Ÿæ ‡è¯†ç¬¦ï¼ˆé€šå¸¸æ˜¯å—段å)冲çªï¼Œç”¨æˆ·è‡ªå®šä¹‰å˜é‡åœ¨å˜é‡åå‰ä½¿ç”¨@作为开始符å·ã€‚
777@var=10;
778
779 - å˜é‡è¢«å®šä¹‰åŽï¼Œåœ¨æ•´ä¸ªä¼šè¯å‘¨æœŸéƒ½æœ‰æ•ˆï¼ˆç™»å½•到退出)
780
781
782--// 控制结构 ----------
783-- ifè¯å¥
784if search_condition then
785 statement_list
786[elseif search_condition then
787 statement_list]
788...
789[else
790 statement_list]
791end if;
792
793-- caseè¯å¥
794CASE value WHEN [compare-value] THEN result
795[WHEN [compare-value] THEN result ...]
796[ELSE result]
797END
798
799
800-- while循环
801[begin_label:] while search_condition do
802 statement_list
803end while [end_label];
804
805- 如果需è¦åœ¨å¾ªçޝ内æå‰ç»ˆæ¢ while循环,则需è¦ä½¿ç”¨æ ‡ç¾ï¼›æ ‡ç¾éœ€è¦æˆå¯¹å‡ºçŽ°ã€‚
806
807 -- 退出循环
808 退出整个循环 leave
809 退出当å‰å¾ªçޝ iterate
810 é€šè¿‡é€€å‡ºçš„æ ‡ç¾å†³å®šé€€å‡ºå“ªä¸ªå¾ªçޝ
811
812
813--// 内置函数 ----------
814-- 数值函数
815abs(x) -- ç»å¯¹å€¼ abs(-10.9) = 10
816format(x, d) -- æ ¼å¼åŒ–åƒåˆ†ä½æ•°å€¼ format(1234567.456, 2) = 1,234,567.46
817ceil(x) -- å‘ä¸Šå–æ•´ ceil(10.1) = 11
818floor(x) -- å‘䏋喿•´ floor (10.1) = 10
819round(x) -- å››èˆäº”入去整
820mod(m, n) -- m%n m mod n 求余 10%3=1
821pi() -- 获得圆周率
822pow(m, n) -- m^n
823sqrt(x) -- ç®—æœ¯å¹³æ–¹æ ¹
824rand() -- éšæœºæ•°
825truncate(x, d) -- 截å–dä½å°æ•°
826
827-- 时间日期函数
828now(), current_timestamp(); -- 当剿—¥æœŸæ—¶é—´
829current_date(); -- 当剿—¥æœŸ
830current_time(); -- 当剿—¶é—´
831date('yyyy-mm-dd hh:ii:ss'); -- èŽ·å–æ—¥æœŸéƒ¨åˆ†
832time('yyyy-mm-dd hh:ii:ss'); -- èŽ·å–æ—¶é—´éƒ¨åˆ†
833date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- æ ¼å¼åŒ–æ—¶é—´
834unix_timestamp(); -- 获得unix时间戳
835from_unixtime(); -- 从时间戳获得时间
836
837-- å—符串函数
838length(string) -- string长度,å—节
839char_length(string) -- stringçš„å—符个数
840substring(str, position [,length]) -- 从strçš„position开始,å–length个å—符
841replace(str ,search_str ,replace_str) -- 在strä¸ç”¨replace_str替æ¢search_str
842instr(string ,substring) -- 返回substring首次在stringä¸å‡ºçŽ°çš„ä½ç½®
843concat(string [,...]) -- 连接å—串
844charset(str) -- 返回å—串å—符集
845lcase(string) -- è½¬æ¢æˆå°å†™
846left(string, length) -- 从string2ä¸çš„左边起å–length个å—符
847load_file(file_name) -- 从文件读å–内容
848locate(substring, string [,start_position]) -- åŒinstr,但坿Œ‡å®šå¼€å§‹ä½ç½®
849lpad(string, length, pad) -- é‡å¤ç”¨padåŠ åœ¨string开头,直到å—串长度为length
850ltrim(string) -- 去除å‰ç«¯ç©ºæ ¼
851repeat(string, count) -- é‡å¤count次
852rpad(string, length, pad) --在stråŽç”¨pad补充,直到长度为length
853rtrim(string) -- 去除åŽç«¯ç©ºæ ¼
854strcmp(string1 ,string2) -- é€å—符比较两å—串大å°
855
856-- æµç¨‹å‡½æ•°
857case when [condition] then result [when [condition] then result ...] [else result] end 多分支
858if(expr1,expr2,expr3) åŒåˆ†æ”¯ã€‚
859
860-- èšåˆå‡½æ•°
861count()
862sum();
863max();
864min();
865avg();
866group_concat()
867
868-- 其他常用函数
869md5();
870default();
871
872
873--// å˜å‚¨å‡½æ•°ï¼Œè‡ªå®šä¹‰å‡½æ•° ----------
874-- 新建
875 CREATE FUNCTION function_name (傿•°åˆ—表) RETURNS 返回值类型
876 函数体
877
878 - 函数åï¼Œåº”è¯¥åˆæ³•çš„æ ‡è¯†ç¬¦ï¼Œå¹¶ä¸”ä¸åº”该与已有的关键å—冲çªã€‚
879 - 一个函数应该属于æŸä¸ªæ•°æ®åº“,å¯ä»¥ä½¿ç”¨db_name.funciton_nameçš„å½¢å¼æ‰§è¡Œå½“å‰å‡½æ•°æ‰€å±žæ•°æ®åº“,å¦åˆ™ä¸ºå½“剿•°æ®åº“。
880 - 傿•°éƒ¨åˆ†ï¼Œç”±"傿•°å"å’Œ"傿•°ç±»åž‹"组æˆã€‚å¤šä¸ªå‚æ•°ç”¨é€—å·éš”开。
881 - 函数体由多æ¡å¯ç”¨çš„mysqlè¯å¥ï¼Œæµç¨‹æŽ§åˆ¶ï¼Œå˜é‡å£°æ˜Žç‰è¯å¥æž„æˆã€‚
882 - 多æ¡è¯å¥åº”该使用 begin...end è¯å¥å—包å«ã€‚
883 - ä¸€å®šè¦æœ‰ return 返回值è¯å¥ã€‚
884
885-- åˆ é™¤
886 DROP FUNCTION [IF EXISTS] function_name;
887
888-- 查看
889 SHOW FUNCTION STATUS LIKE 'partten'
890 SHOW CREATE FUNCTION function_name;
891
892-- 修改
893 ALTER FUNCTION function_name 函数选项
894
895
896--// å˜å‚¨è¿‡ç¨‹ï¼Œè‡ªå®šä¹‰åŠŸèƒ½ ----------
897-- 定义
898å˜å‚¨å˜å‚¨è¿‡ç¨‹ 是一段代ç (过程),å˜å‚¨åœ¨æ•°æ®åº“ä¸çš„sql组æˆã€‚
899一个å˜å‚¨è¿‡ç¨‹é€šå¸¸ç”¨äºŽå®Œæˆä¸€æ®µä¸šåŠ¡é€»è¾‘ï¼Œä¾‹å¦‚æŠ¥å,交ç费,订å•入库ç‰ã€‚
900而一个函数通常专注与æŸä¸ªåŠŸèƒ½ï¼Œè§†ä¸ºå…¶ä»–ç¨‹åºæœåŠ¡çš„ï¼Œéœ€è¦åœ¨å…¶ä»–è¯å¥ä¸è°ƒç”¨å‡½æ•°æ‰å¯ä»¥ï¼Œè€Œå˜å‚¨è¿‡ç¨‹ä¸èƒ½è¢«å…¶ä»–调用,是自己执行 通过call执行。
901
902-- 创建
903CREATE PROCEDURE sp_name (傿•°åˆ—表)
904 过程体
905
906傿•°åˆ—表:ä¸åŒäºŽå‡½æ•°çš„傿•°åˆ—è¡¨ï¼Œéœ€è¦æŒ‡æ˜Žå‚数类型
907IN,表示输入型
908OUT,表示输出型
909INOUT,表示混åˆåž‹
910
911注æ„,没有返回值。
912
913
914/* å˜å‚¨è¿‡ç¨‹ */ ------------------
915å˜å‚¨è¿‡ç¨‹æ˜¯ä¸€æ®µå¯æ‰§è¡Œæ€§ä»£ç 的集åˆã€‚相比函数,更åå‘于业务逻辑。
916调用:CALL 过程å
917-- 注æ„
918- 没有返回值。
919- åªèƒ½å•独调用,ä¸å¯å¤¹æ‚在其他è¯å¥ä¸
920
921-- 傿•°
922IN|OUT|INOUT 傿•°å æ•°æ®ç±»åž‹
923IN 输入:在调用过程ä¸ï¼Œå°†æ•°æ®è¾“å…¥åˆ°è¿‡ç¨‹ä½“å†…éƒ¨çš„å‚æ•°
924OUT 输出:在调用过程ä¸ï¼Œå°†è¿‡ç¨‹ä½“处ç†å®Œçš„结果返回到客户端
925INOUT 输入输出:既å¯è¾“入,也å¯è¾“出
926
927-- è¯æ³•
928CREATE PROCEDURE 过程å (傿•°åˆ—表)
929BEGIN
930 过程体
931END
932
933
934/* 用户和æƒé™ç®¡ç† */ ------------------
935用户信æ¯è¡¨ï¼šmysql.user
936-- 刷新æƒé™
937FLUSH PRIVILEGES
938-- å¢žåŠ ç”¨æˆ·
939CREATE USER 用户å IDENTIFIED BY [PASSWORD] 密ç (å—符串)
940 - 必须拥有mysqlæ•°æ®åº“的全局CREATE USERæƒé™ï¼Œæˆ–拥有INSERTæƒé™ã€‚
941 - åªèƒ½åˆ›å»ºç”¨æˆ·ï¼Œä¸èƒ½èµ‹äºˆæƒé™ã€‚
942 - 用户å,注æ„引å·ï¼šå¦‚ 'user_name'@'192.168.1.1'
943 - 密ç 也需引å·ï¼Œçº¯æ•°å—密ç 也è¦åР引å·
944 - è¦åœ¨çº¯æ–‡æœ¬ä¸æŒ‡å®šå¯†ç ,需忽略PASSWORD关键è¯ã€‚è¦æŠŠå¯†ç æŒ‡å®šä¸ºç”±PASSWORD()函数返回的混编值,需包å«å…³é”®å—PASSWORD
945-- é‡å‘½å用户
946RENAME USER old_user TO new_user
947-- 设置密ç
948SET PASSWORD = PASSWORD('密ç ') -- 为当å‰ç”¨æˆ·è®¾ç½®å¯†ç
949SET PASSWORD FOR 用户å = PASSWORD('密ç ') -- 为指定用户设置密ç
950-- åˆ é™¤ç”¨æˆ·
951DROP USER 用户å
952-- åˆ†é…æƒé™/æ·»åŠ ç”¨æˆ·
953GRANT æƒé™åˆ—表 ON 表å TO 用户å [IDENTIFIED BY [PASSWORD] 'password']
954 - all privileges 表示所有æƒé™
955 - *.* 表示所有库的所有表
956 - 库å.表å 表示æŸåº“下é¢çš„æŸè¡¨
957-- 查看æƒé™
958SHOW GRANTS FOR 用户å
959 -- 查看当å‰ç”¨æˆ·æƒé™
960 SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();
961-- 撤消æƒé™
962REVOKE æƒé™åˆ—表 ON 表å FROM 用户å
963REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户å -- 撤销所有æƒé™
964-- æƒé™å±‚级
965-- è¦ä½¿ç”¨GRANT或REVOKE,您必须拥有GRANT OPTIONæƒé™ï¼Œå¹¶ä¸”您必须用于您æ£åœ¨æŽˆäºˆæˆ–撤销的æƒé™ã€‚
966全局层级:全局æƒé™é€‚用于一个给定æœåС噍ä¸çš„æ‰€æœ‰æ•°æ®åº“,mysql.user
967 GRANT ALL ON *.*å’Œ REVOKE ALL ON *.*åªæŽˆäºˆå’Œæ’¤é”€å…¨å±€æƒé™ã€‚
968æ•°æ®åº“层级:数æ®åº“æƒé™é€‚用于一个给定数æ®åº“ä¸çš„æ‰€æœ‰ç›®æ ‡ï¼Œmysql.db, mysql.host
969 GRANT ALL ON db_name.*å’ŒREVOKE ALL ON db_name.*åªæŽˆäºˆå’Œæ’¤é”€æ•°æ®åº“æƒé™ã€‚
970表层级:表æƒé™é€‚用于一个给定表ä¸çš„æ‰€æœ‰åˆ—,mysql.talbes_priv
971 GRANT ALL ON db_name.tbl_nameå’ŒREVOKE ALL ON db_name.tbl_nameåªæŽˆäºˆå’Œæ’¤é”€è¡¨æƒé™ã€‚
972列层级:列æƒé™é€‚用于一个给定表ä¸çš„å•一列,mysql.columns_priv
973 当使用REVOKE时,您必须指定与被授æƒåˆ—相åŒçš„列。
974-- æƒé™åˆ—表
975ALL [PRIVILEGES] -- 设置除GRANT OPTIONä¹‹å¤–çš„æ‰€æœ‰ç®€å•æƒé™
976ALTER -- å…许使用ALTER TABLE
977ALTER ROUTINE -- æ›´æ”¹æˆ–å–æ¶ˆå·²å˜å‚¨çš„å程åº
978CREATE -- å…许使用CREATE TABLE
979CREATE ROUTINE -- 创建已å˜å‚¨çš„å程åº
980CREATE TEMPORARY TABLES -- å…许使用CREATE TEMPORARY TABLE
981CREATE USER -- å…许使用CREATE USER, DROP USER, RENAME USERå’ŒREVOKE ALL PRIVILEGES。
982CREATE VIEW -- å…许使用CREATE VIEW
983DELETE -- å…许使用DELETE
984DROP -- å…许使用DROP TABLE
985EXECUTE -- å…许用户è¿è¡Œå·²å˜å‚¨çš„å程åº
986FILE -- å…许使用SELECT...INTO OUTFILEå’ŒLOAD DATA INFILE
987INDEX -- å…许使用CREATE INDEXå’ŒDROP INDEX
988INSERT -- å…许使用INSERT
989LOCK TABLES -- å…许对您拥有SELECTæƒé™çš„表使用LOCK TABLES
990PROCESS -- å…许使用SHOW FULL PROCESSLIST
991REFERENCES -- 未被实施
992RELOAD -- å…许使用FLUSH
993REPLICATION CLIENT -- å…许用户询问从属æœåŠ¡å™¨æˆ–ä¸»æœåŠ¡å™¨çš„åœ°å€
994REPLICATION SLAVE -- 用于å¤åˆ¶åž‹ä»Žå±žæœåŠ¡å™¨ï¼ˆä»Žä¸»æœåС噍ä¸è¯»å–二进制日志事件)
995SELECT -- å…许使用SELECT
996SHOW DATABASES -- 显示所有数æ®åº“
997SHOW VIEW -- å…许使用SHOW CREATE VIEW
998SHUTDOWN -- å…许使用mysqladmin shutdown
999SUPER -- å…许使用CHANGE MASTER, KILL, PURGE MASTER LOGSå’ŒSET GLOBALè¯å¥ï¼Œmysqladmin debug命令;å…许您连接(一次),å³ä½¿å·²è¾¾åˆ°max_connections。
1000UPDATE -- å…许使用UPDATE
1001USAGE -- â€œæ— æƒé™â€çš„åŒä¹‰è¯
1002GRANT OPTION -- å…许授予æƒé™
1003
1004
1005/* 表维护 */
1006-- 分æžå’Œå˜å‚¨è¡¨çš„关键å—分布
1007ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表å ...
1008-- æ£€æŸ¥ä¸€ä¸ªæˆ–å¤šä¸ªè¡¨æ˜¯å¦æœ‰é”™è¯¯
1009CHECK TABLE tbl_name [, tbl_name] ... [option] ...
1010option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
1011-- æ•´ç†æ•°æ®æ–‡ä»¶çš„碎片
1012OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
1013
1014
1015/* æ‚项 */ ------------------
10161. å¯ç”¨å引å·ï¼ˆ`ï¼‰ä¸ºæ ‡è¯†ç¬¦ï¼ˆåº“åã€è¡¨åã€å—段åã€ç´¢å¼•ã€åˆ«å)包裹,以é¿å…与关键å—é‡åï¼ä¸æ–‡ä¹Ÿå¯ä»¥ä½œä¸ºæ ‡è¯†ç¬¦ï¼
10172. æ¯ä¸ªåº“目录å˜åœ¨ä¸€ä¸ªä¿å˜å½“剿•°æ®åº“的选项文件db.opt。
10183. 注释:
1019 å•行注释 # 注释内容
1020 多行注释 /* 注释内容 */
1021 å•行注释 -- 注释内容 (æ ‡å‡†SQLæ³¨é‡Šé£Žæ ¼ï¼Œè¦æ±‚åŒç ´æŠ˜å·åŽåŠ ä¸€ç©ºæ ¼ç¬¦ï¼ˆç©ºæ ¼ã€TABã€æ¢è¡Œç‰ï¼‰)
10224. 模å¼é€šé…符:
1023 _ ä»»æ„å•个å—符
1024 % ä»»æ„多个å—符,甚至包括零å—符
1025 å•引å·éœ€è¦è¿›è¡Œè½¬ä¹‰ \'
10265. CMD命令行内的è¯å¥ç»“æŸç¬¦å¯ä»¥ä¸º ";", "\G", "\g"ï¼Œä»…å½±å“æ˜¾ç¤ºç»“果。其他地方还是用分å·ç»“æŸã€‚delimiter å¯ä¿®æ”¹å½“å‰å¯¹è¯çš„è¯å¥ç»“æŸç¬¦ã€‚
10276. SQL对大å°å†™ä¸æ•感
10287. 清除已有è¯å¥ï¼š\c