--linux远程连接mysql(注意端口号的P大写) mysql -h 132.252.34.47 -P 8922 -u summer -p hello123 --显示库rouproup show databases; --选择数据库 use db1; --显示表 show tables; --查看表结构 desc tb1; describe tb1; --等价desc show columns from tb1; --查看建表语句 show create table tb1; show create database db1;
--显示用户安全权限
show grants;
--查询 select * from tb1; --通配符*检索效率低 select c1,c2 from tb1; -- distinct去重 select distinct c1 from tb1; select distinct c1,c2,c3 from tb1; --三列都去重 --limit限制 select * from tb1 limit 5; --前5行 select * from tb1 limit 2,2; --从行号2开始,取2行(行号从0开始,所以实际为第3行)
-- order by 排序:默认升序(asc);不区分大小写 --单列排序 select * from tb1 order by c1; --多列排序 select * from tb1 order by c1,c2; --先按c1排序,c1相同则再按c2排序 --降序 select * from tb1 order by c1 desc,c2; --按c1降序,再按c2升序 --limit select * from tb1 order by c1 desc limit 1; --order要在from后,limit要在order后
--过滤单个值 --等于 select * from tb1 where c1='summer'; --单引号为字符串,没有为数值 --小于 select * from tb1 where c2< 10; --小于等于 select * from tb1 where c2<= 10; --不等于 select * from tb1 where c2<> 10; select * from tb1 where c2!= 10; --between介于中间 select * from tb1 where c1 between 5 and 10; --null空值 select * from tb1 where c1 is null; select * from tb1 where c1 is not null;
-- 多个条件and select * from tb1 where c1 = 'summer' and c2>= 10; -- or或 select * from tb1 where c1 = 'summer' or c1='winter' --and优先级大于or select *from tb1 where (c1='a' or c1='b') and c2>10; --默认优先级相当于:c1='a' or (c1='b' and c2>10) select *from tb1 where c1='a' or c1='b' and c2>10; --in范围条件;in的效率高于or select * from tb1 where c1 in('a','b','c'); select * from tb1 where c1 not in('a','b','c');
-- %任意字符出现任意次数 --匹配开头为: summer select * from tb1 where c1 like 'summer%'; --匹配含有summer select * from tb1 where c1 like '%summer%'; --匹配: A开头,E结尾 select * from tb1 where c1 like 'A%E'; -- 下划线_ 匹配单个字符 select * from tb1 where c1 like 'app_e';
-- regexp -- . 表示匹配任意一个字符 select * from tb1 where c1 regexp '.dog'; -- | 表示或 select * from tb1 where c1 regexp 'cat|dog|pig'; -- [] 表示括号中特定字符 select * from tb1 where c1 regexp 'dog[123]'; --匹配 dog1,dog2,dog3 select * from tb1 where c1 regexp '[Aa]pple'; --匹配Apple,apple -- 匹配范围: 数字[0-9],字幕[a-z] select * from tb1 where c1 regexp 'dog[1-5]'; select * from tb1 where c1 regexp '[a-f]less'; -- 转义字符: \\ --常用有 \\- \\. \\\ -- 一般正则表达式用单个反斜杠当转义字符;但是mysql用双反斜杠(mysql自己解释一个,正则表达式库解释另一个) -- 元字符: 换页\\f 换行\\n 回车\\r 制表\\t \\v纵向制表 -- 重复元字符: * 0个或多个 -- + 一个或多个 -- ? 0个或1个 -- 定位元字符: ^ 文本开始 -- $ 文本结尾
--把c1和c2拼接起来: c1(c2) -- trim函数可以去除左右两边空格,还有ltrim和rtrim select concat(trim(c1),'(',trim(c2),')') as c3 from tb1 ;
--select可以省略FROM子句以便简单地访问和处理表达式 select 3*2; select trim('abc'); select now();
--文本处理函数: -- left() right() length() locate() -- upper() lower() trim() ltrim() rtrim() -- substring() upper() select upper(c1) as c1_upper from tb1; --时间处理函数 --日期必须为格式yyyy-mm-dd --获取当前时间 select now(); -- 2021-06-23 14:19:55 --获取日期部分 select date('2021-06-23 14:19:55'); -- 2021-06-23 --获取时间部分 select time('2021-06-23 14:19:55'); -- 14:19:55 --where取某个月的数据 select * from tb1 where date(c3_date) between '2021-02-01' and '2021-02-28'; select * from tb1 where year(c3_date) = 2021 and month(c3_date)=
AddDate() 增加一个日期(天、周等) AddTime() 增加一个时间(时、分等) CurDate() 返回当前日期 CurTime() 返回当前时间 Date() 返回日期时间的日期部分 DateDiff() 计算两个日期之差 Date_Add() 高度灵活的日期运算函数 Date_Format() 返回一个格式化的日期或时间串 Day() 返回一个日期的天数部分 DayOfWeek() 对于一个日期,返回对应的星期几 Hour() 返回一个时间的小时部分 Minute() 返回一个时间的分钟部分 Month() 返回一个日期的月份部分 Now() 返回当前日期和时间 Second() 返回一个时间的秒部分 Time() 返回一个日期时间的时间部分 Year() 返回一个日期的年份部分
aggregate function,运行在行组上,计算和返回单个值的函数
-- AVG()函数忽略列值为NULL的行 select avg(c1) as avg_c1 from tb1; -- count(*)对表中行的数目进行计数,不管null与否 select count(*) from tb1; -- COUNT(column)对特定列中具有值的行进行计数,忽略NULL值 select count(c1) as count_c1 from tb1; --数值或日期或文本都可以取最大最小值 --max select max(c1) as max_c1 from tb1; --min select min(c2) as min_c2 from tb2; --sum select sum(c1) as sum_c1 from tb1; select sum(c1*c2) as sum_c1c2 from tb1; --distinct后面需要加具体的列 select count(distinct c1) count_c1 from tb1;
AVG() 返回某列的平均值 COUNT() 返回某列的行数;count(column)忽略null;count(*)不忽略null MAX() 返回某列的最大值;忽略null行 MIN() 返回某列的最小值;忽略null行 SUM() 返回某列值之和;忽略null行
select的列要么出现在group by中,要么有聚合函数;
group by 子句中的列必须是检索列或者有效表达式(不能是聚合函数),如果select中使用表达式,groupby中也要用相同表达式,不能用别名;
GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前;
-- GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前 --select的列要么出现在group by中,要么有聚合函数 select c1,count(*) as num_c1 from tb1 group by c1;
where和having的功能用法都类似,唯一的差别是: where过滤行,而having过滤分组
或者这么理解:WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤
--按c1分组并计数,并筛选出>=2 select c1,count(*) as num_c1 from tb1 group by c1 having count(*) >=2; --order by排序, 因为分组输出的结果可能不是分组的顺序 select c1,count(*) as num_c1 from tb1 group by c1 having count(*) >=2 order by num_c1;
select字句顺序: select→from→where→group by→having→order by→limit
相关子查询(correlated subquery): 涉及外部查询的子查询
--子查询 select * from tb1 where c1 in (select c1 from tb1 where c2='jack'); --相关子查询 select c1 ,c2 ,(select c3 from tb2 where tb1.c1=tb2.c1) as c3 from tb2
完全限定列名: 表名.列名
笛卡尔积(cartesian product): 由于没有联结条件的表关系返回的结果; 返回总行数=表1行数*表2行数
内连接: 只有关联的行才保留;
inner join简写为join
外连接: right join或left join 保留基表所有行,即使没有关联用null补全
left outer join和right outer join 简写为 left join和right join
union中每个查询必须包含相同的列,表达式或聚集函数(不过各个列不需要以相同的次序列出)
union自动去重;union all不去重;
union组合查询时,只能在最后一个select后加order by,是对整个所有结果排序;
全文本搜索
--全列插入可以省略类名values后必须含有所有列 insert into tb1 values('v1','v2',null,'v4','v5'); --指定列名插入 insert into tb1(c1,c3,c4,c5) values('v1',null,'v4','v5');--部分字段 insert into tb1(c1,c2,c3,c4,c5) values('v1','v2',null,'v4','v5'); --全部字段 --一次多条插入:每组数据一对括号,逗号分隔 insert into tb1(c1,c2,c3,c4,c5) values('v1','v2',null,'v4','v5'),('x1','x2','x3','x4','x5'); --插入检索数据 insert select insert into tb2 select c1,c2,c3 from tb1 where c1>0;
单条insert多个插入比多条insert语句块
--更新单列 update tb1 set c2='jack' where c1>0; --更新多列 update tb1 set c1='aa',c3='bb' where c2='jack'; --如果用UPDATE语句更新多行,并且在更新这些行中的一行或多行时出一个现错误, --则整个UPDATE操作被取消(错误发生前更新的所有行被恢复到它们原来的值) --如果想发生错误也继续更新,就用ignore update ignore
create table tb1 ( id int not null ,name char(10) ,age int not null default 0 ,address char(128) ,primary key(id,name) )engine=innodb --添加列 alter tb1 add c1 char(32); --删除列 alter tb1 drop cloumn c2; --删除表 drop table tb1; --重命名表 rename tb1 to tb2;
mysql数据库默认引擎是MyISAM;
InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;
MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表)
MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
引擎类型可以混用,但外键不能跨引擎
alter table 一定谨慎,要先完整的备份(模式和数据的备份)
重用sql语句;简化复杂的sql操作;
视图不包含数据
视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。
--创建视图 create view view_apple as select a.c1,b.c2,a.c3 from tb1 a,tb2 b where a.c1=b.c1 and b.c4>0; --查看创建语句 show create view view_name; --删除视图 drop view view_name; --创建视图(如果存在则替换) create or replace view
为以后的使用而保存的一条或多条MySQL语句的集合;可将其视为批文件
-- 创建存储过程 create procedure pro_avg_c1() begin select avg(c1) as avg_c1 from tb1; end; -- 执行存储过程 call pro_avg_c1(); --删除 drop procedure pro_avg_c1(); --含参: in表示传入参数;out表示返回结果参数 create procedure pro_total_c1( in v_c1 int, out v_total decimal(8,2) ) begin select Sum(c2*c3) from tb1 where c1=v_c1 into v_total; end; --调用时必须含两个参数:c1列值,返回结果变量名 call pro_total_c1(25,@total_result) --查看存储过程 show procedure status; show procedure status like 'pro_total_c1'; --查看存储过程 show create procedure pro_total_c1;
游标(cursor)是一个存储在MySQL服务器上的数据库查询
触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语
句):delete,insert,update
每个表最多支持6个触发器
--创建trigger create trigger trigger_apple after insert on tb1 for each row select 'trigger_apple add'; --这里可能会报错: ERROR 1415 (0A000): Not allowed to return a result set from a trigger --在MySQL5以后不支持触发器返回结果集,改写成下面: create trigger trigger_apple after insert on tb1 for each row select 'trigger_apple add' into @trig_result; --查看触发器结果 select @trig_result; --删除 drop trigger trigger_apple;
事务(transaction): 指一组sql
回退(rollback):撤销指定的sql语句的过程
提交(commit):将未存储的sql语句结果写入数据库表
保留点(savepoint):事务处理中设置临时占位符(place-holder),你可以对它发布回退(与回退整个事务不同)
事务管理用来管理insert,update,delete; 但不能回退create,drop
一般的sql语句都是隐含提交(implicit commit);
事务处理块必须明确加上commit
start transaction; delete from tb1 where c1='apple'; delete from tb2 where c2='apple'; commit;
字符集: 字母和符号的集合
编码: 某个字符集成员内部表示
校对: 为规定字符如何比较的指令
mysql> show character set; +----------+---------------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+---------------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | dec8 | DEC West European | dec8_swedish_ci | 1 | | cp850 | DOS West European | cp850_general_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | | ujis | EUC-JP Japanese | ujis_japanese_ci | 3 | | sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 | | hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 | | tis620 | TIS620 Thai | tis620_thai_ci | 1 | | euckr | EUC-KR Korean | euckr_korean_ci | 2 | | koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 | | gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 | | greek | ISO 8859-7 Greek | greek_general_ci | 1 | | cp1250 | Windows Central European | cp1250_general_ci | 1 | | gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 | | utf8 | UTF-8 Unicode | utf8_general_ci | 3 | | ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 | | cp866 | DOS Russian | cp866_general_ci | 1 | | keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 | | macce | Mac Central European | macce_general_ci | 1 | | macroman | Mac West European | macroman_general_ci | 1 | | cp852 | DOS Central European | cp852_general_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | | utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 | | cp1251 | Windows Cyrillic | cp1251_general_ci | 1 | | utf16 | UTF-16 Unicode | utf16_general_ci | 4 | | utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 | | cp1256 | Windows Arabic | cp1256_general_ci | 1 | | cp1257 | Windows Baltic | cp1257_general_ci | 1 | | utf32 | UTF-32 Unicode | utf32_general_ci | 4 | | binary | Binary pseudo charset | binary | 1 | | geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 | | cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 | | eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 | | gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 | +----------+---------------------------------+---------------------+--------+ 41 rows in set (0.00 sec) -- mysql> show collation; +--------------------------+----------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------------+----------+-----+---------+----------+---------+ | big5_chinese_ci | big5 | 1 | Yes | Yes | 1 | | big5_bin | big5 | 84 | | Yes | 1 | | dec8_swedish_ci | dec8 | 3 | Yes | Yes | 1 | | dec8_bin | dec8 | 69 | | Yes | 1 | | cp850_general_ci | cp850 | 4 | Yes | Yes | 1 | | cp850_bin | cp850 | 80 | | Yes | 1 | | hp8_english_ci | hp8 | 6 | Yes | Yes | 1 | | hp8_bin | hp8 | 72 | | Yes | 1 | | koi8r_general_ci | koi8r | 7 | Yes | Yes | 1 | | utf32_slovak_ci | utf32 | 173 | | Yes | 8 | | utf32_spanish2_ci | utf32 | 174 | | Yes | 8 | | utf32_roman_ci | utf32 | 175 | | Yes | 8 | | utf32_persian_ci | utf32 | 176 | | Yes | 8 | | utf32_esperanto_ci | utf32 | 177 | | Yes | 8 | | utf32_hungarian_ci | utf32 | 178 | | Yes | 8 | | utf32_sinhala_ci | utf32 | 179 | | Yes | 8 | | utf32_german2_ci | utf32 | 180 | | Yes | 8 | | utf32_croatian_ci | utf32 | 181 | | Yes | 8 | | utf32_unicode_520_ci | utf32 | 182 | | Yes | 8 | | utf32_vietnamese_ci | utf32 | 183 | | Yes | 8 | | binary | binary | 63 | Yes | Yes | 1 | | geostd8_general_ci | geostd8 | 92 | Yes | Yes | 1 | | geostd8_bin | geostd8 | 93 | | Yes | 1 | | cp932_japanese_ci | cp932 | 95 | Yes | Yes | 1 | | cp932_bin | cp932 | 96 | | Yes | 1 | | eucjpms_japanese_ci | eucjpms | 97 | Yes | Yes | 1 | | eucjpms_bin | eucjpms | 98 | | Yes | 1 | | gb18030_chinese_ci | gb18030 | 248 | Yes | Yes | 2 | | gb18030_bin | gb18030 | 249 | | Yes | 1 | | gb18030_unicode_520_ci | gb18030 | 250 | | Yes | 8 | +--------------------------+----------+-----+---------+----------+---------+ 222 rows in set (0.00 sec)
--不指定character set和collate则数据库默认 --创建表时指定字符集和校对 create table tb1( c1 int ,c2 varchar(10) )default character set hebrew collate hebrew_general_ci; -- orderby指定collate(校对) select * from tb1 order by c1,c2 collate latinl_general_cs;
--检查表键是否正确 analyze table tb1;
mysql> analyze table user_user_ext; +-----------------------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +-----------------------+---------+----------+----------+ | coc_sql.user_user_ext | analyze | status | OK | +-----------------------+---------+----------+----------+ 1 row in set (0.03 sec) mysql> check table user_user_ext,user_user_error,user_user_map; +-------------------------+-------+----------+----------+ | Table | Op | Msg_type | Msg_text | +-------------------------+-------+----------+----------+ | coc_sql.user_user_ext | check | status | OK | | coc_sql.user_user_error | check | status | OK | | coc_sql.user_user_map | check | status | OK | +-------------------------+-------+----------+----------+ 3 rows in set (0.00 sec)