ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql必知必会_小结

2022-01-27 10:34:33  阅读:170  来源: 互联网

标签:ci 必知 -- tb1 mysql c1 小结 Yes select


使用mysql

--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;

image-20220127101740846

--显示用户安全权限

show grants;

image-20220127101957718

检索数据

--查询
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行)

image-20220127102024402

排序检索数据

-- 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() 		返回一个日期的年份部分

image-20220127102355467

聚合函数

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;

having过滤分组

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)

标签:ci,必知,--,tb1,mysql,c1,小结,Yes,select
来源: https://www.cnblogs.com/ShyPeanut/p/15848942.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有