[!NOTE] 在MySQL中,schema和database是同义词. CREATE SCHEMA和CREATE DATABASE是等效的. 但是其他的数据库产品(几乎所有数据库)有所不同.在oracle数据库产品中,schema是database的一部分. 表示the tables and other objects owned by a single user.
-- 修改用户密码 alteruser'username'@'ip_addr' identified by'new_password'; update mysql.user set password=password('新密码') whereUser="username" and Host="ip_addr"; set password for user_name = new_password; set password for user_name = password('new_password');
-- show-related show warnings/variablels/status/engines/collation; showcreateprocedure/function/table/database; showprocedure status; showcreateprocedure proc_name; show variables like'lower_case_table_names'; show tables like'regx';
showcreatetable tb_name; desc tb_name; describe tb_name; show COLUMNS FROM tb_name; showfull fields from tb_name; show INDEX FROM tb_name;
showTABLE STATUS FROM db_name; showTABLE STATUS FROM db_name LIKE'pattern%';
-- SELECT-related SELECT routine_schema, routine_name, sql_mode from information_schema.routines; SELECT event_object_schema, event_object_table, trigger_name, sql_mode from nformation_schema.triggers; selectuser()/version()/database()/CURRENT_DATE/CURRENT_DATE()/CURDATE()/CURRENT_TIME/CURRENT_TIME()/CURTIME()/unix_timestamp()/last_insert_id()/connection_id()/uuid(); select4+5,ifnull(3,2/0);
SELECT [ALL|DISTINCT] select_expr FROM->WHERE->GROUPBY [合计函数] ->HAVING->ORDERBY-> LIMIT a. select_expr -- 可以用 * 表示所有字段。 select*from tb; -- 可以使用表达式(计算公式、函数调用、字段也是个表达式) select stu, 29+25, now() from tb; -- 可以为每个列使用别名。适用于简化列标识,避免多个列标识符重复。 - 使用 as 关键字,也可省略 as. select stu+10as add10 from tb; b. FROM 子句 用于标识查询来源。 -- 可以为表起别名。使用as关键字。 SELECT*FROM tb1 AS tt, tb2 AS bb; -- from子句后,可以同时出现多个表。 -- 多个表会横向叠加到一起,而数据会形成一个笛卡尔积。 SELECT*FROM tb1, tb2; -- 向优化符提示如何选择索引 USE INDEX、IGNORE INDEX、FORCE INDEX SELECT*FROM table1 USE INDEX (key1,key2) WHERE key1=1AND key2=2AND key3=3; SELECT*FROM table1 IGNORE INDEX (key3) WHERE key1=1AND key2=2AND key3=3; c. WHERE 子句 -- 从from获得的数据源中进行筛选。 -- 整型1表示真,0表示假。 -- 表达式由运算符和运算数组成。 -- 运算数:变量(字段)、值、函数返回值 -- 运算符: =, <=>, <>, !=, <=, <, >=, >, !, &&, ||, in (not) null, (not) like, (not) in, (not) betweenand, is (not), and, or, not, xor is/isnot 加上ture/false/unknown,检验某个值的真假 <=>与<>功能相同,<=>可用于null比较 d. GROUPBY 子句, 分组子句 GROUPBY 字段/别名 [排序方式] 分组后会进行排序。升序:ASC,降序:DESC 以下[合计函数]需配合 GROUPBY 使用: 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必须引用GROUPBY子句中的列或用于合计函数中的列。 f. ORDERBY 子句,排序子句 orderby 排序字段/别名 排序方式 [,排序字段/别名 排序方式]... 升序:ASC,降序:DESC 支持多个字段的排序。 g. LIMIT 子句,限制结果数量子句 仅对处理好的结果进行数量限制。将处理好的结果的看作是一个集合,按照记录出现的顺序,索引从0开始。 limit 起始位置, 获取条数 省略第一个参数,表示从索引0开始。limit 获取条数 h. DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录
-- table-related createtable tb_1( id int , name varchar(5) ); show index from tb_1; altertable tb_1 addprimary key(id); create index ind_name on tb_1(id); showtable status like'tb_1'; SHOW TABLES [ LIKE'pattern']; drop index ind_name on tb_1; droptable tb_name; repair table tb_name quick; analyze table tb_name; SHOW TABLES FROM db_name; SHOWCREATETABLE 表名; SHOWTABLE STATUS [FROM db_name] [LIKE'pattern']
# trim() selecttrim(BOTH','FROM ",,haha,,"); select ... into outfile '/tmp/db_xx_tb_yy';
# COMMENT / change altertable didi change id id int comment 'column:id'; # modify altertable didi modify id int comment 'column:id'; select column_name, data_type, column_comment from information_schema.columns where table_name='didi'and table_schema='haha'and column_name like'name%'; createtable zeze (id int, name varchar(20)) COMMENT 'table zeze'; createtable zeze (id int, name varchar(20)) COMMENT='table zeze'; showtable status from haha like'didi'\G; showtable status where name='didi'\G;
# log-related showBINARY LOGS; show master logs; show MASTER STATUS; show BINLOG EVENTS IN'二进制日志文件' [FROM'position']; PURGE BINARY LOGS TO'日志文件'; FLUSH LOGS; purge binary logs before now()-interval7day; purge binary logs to'bin_log_name';
# perfromance # performance-related show status like'innodb_row_%'; show variables like'query%'; show variables like'innodb_doublewrite'; show variables like'innodb_data_file%'; show variables like'innodb_file%'; show variables like'innodb_temp%';
# 回收undo段的线程 show variables like'%purge%%'; show variables like'max_heap_table_size'; show variables like'tmp_table_size'; show variables like'%tmpdir%'; show status like'created_tmp%';
# 添加外键 altertable 从tb_name addconstraint 外键名称(形如 FK_从tb_name_主tb_name) foreign key 从tb_name(外键字段) references 主tb_name(主键字段); # 删除外键 altertable tb_name名 dropforeign key 外键名称 # 修改默认值 ALTERTABLE testalter_tbl ALTER i SETDEFAULT1000; # 删除默认值 ALTERTABLE testalter_tbl ALTER i DROPDEFAULT;
1、条件 select*from tb_name where id >1and name !='alex'and num =12; select*from tb_name where id between5and16; select*from tb_name where id in (11,22,33) select*from tb_name where id notin (11,22,33) select*from tb_name where id in (select nid from tb_name)
2、通配符 select*from tb_name where name like'ale%'- ale开头的所有(多个字符串) select*from tb_name where name like'ale_'- ale开头的所有(一个字符)
3、限制 select*from tb_name limit 5; - 前5行 select*from tb_name limit 4,5; - 从第4行开始的5行 select*from tb_name limit 5offset4- 从第4行开始的5行 4、排序 select*from tb_name orderby 列 asc- 根据 “列” 从小到大排列 select*from tb_name orderby 列 desc- 根据 “列” 从大到小排列 select*from tb_name orderby 列1desc,列2asc- 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序 5、分组 select num from tb_name groupby num select num,nid from tb_name groupby num,nid select num,nid from tb_name where nid >10groupby num,nid order nid desc select num,nid,count(*),sum(score),max(score),min(score) from tb_name groupby num,nid select num from tb_name groupby num havingmax(id) >10
# > 特别的 groupby 必须在where之后,orderby之前 6、连tb_name 无对应关系则不显示 select A.num, A.name, B.name from A,B Where A.nid = B.nid 无对应关系则不显示 select A.num, A.name, B.name from A innerjoin B on A.nid = B.nid Atb_name所有显示,如果B中无对应关系,则值为null select A.num, A.name, B.name from A leftjoin B on A.nid = B.nid Btb_name所有显示,如果B中无对应关系,则值为null select A.num, A.name, B.name from A rightjoin B on A.nid = B.nid 7、组合 组合,自动处理重合 select nickname from A union select name from B 组合,不处理重合 select nickname from A unionall select name from B
– 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.
JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):获取两个tb_name中字段匹配关系的记录。 LEFT JOIN(左连接):获取左tb_name所有记录,即使右tb_name没有对应匹配的记录。 RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右tb_name所有记录,即使左tb_name没有对应匹配的记录。
select tb1.field1, tb1.field2,…tb2.fieldX FROM tb1 tb1_alias JOIN tb2 tb2_alias on tb1.special_field=tb2.special_field
MySQL 同样也支持其他正则tb_name达式的匹配, MySQL中使用 REGEXP 操作符来进行正则tb_name达式匹配
select field FROM tb_name WHERE condition REGEXP ‘pattern’;
select DISTINCT field FROM tb_name;
UPDATE tb_name SET field=new_value WHERE field=old_Value
单tb_name查询
多tb_name查询
子查询
自然连接
内连接
外连接
自连接
左连接
右连接
多tb_name查询: 连接: 交叉连接:笛卡尔乘积 自然连接(内连接): 条件WHERE 外连接: 左外连接:… LEFT JOIN … ON … 右外连接: … RIGHT JOIN … ON … 自连接: 条件WHERE