MySQLDay02:DQL,存储引擎,int(n),char(n),varchar(n),mysql反引号,mysql管理工具

目录

0x01 DQL 数据查询语言

1.select 列名1,列名2... from 表名 [where 条件]

2.修改查询结果中的字段名(原来表中的字段名没变,只是查询结果中显示了一个别名)

3.select concat(列名1,列名2) from 表名;

4.select concat_ws("分隔符",列名1,列名2) from 表名;

5.select distinct 列名 from 表名 不显示重复的数据

6.limit查询 限制查询条数

7.排序

8.聚合函数

9.分组查询(聚合查询)

0x03 mysql 存储引擎

0x04 关于int(n)

0x05 关于char(n)和varchar(n)

0x06 mysql反引号

0x07 MySQL的管理工具


0x01 DQL 数据查询语言

1.select 列名1,列名2... from 表名 [where 条件]

查询所有字段用* 不带where条件 把表的所有记录查出来

例如:

select * from user where age between 30 and 37;

select * from user where age in (36,33); 和or作用差不多,将年龄是36或者年龄是33的查出来。

select * from user where age not in (36,33);查找既不是36也不是33的

select * from user where user_name like '%n%'; 模糊查询

查询user_name中含有n的数据,其中%是通配符(可有可无,看需求),表示一个或者多个字符。

2.修改查询结果中的字段名(原来表中的字段名没变,只是查询结果中显示了一个别名)

select 原字段名 as 别名 from 表名;

select user_name as username,user_email from user;

通常,在联合查询时,如果两张表中有字段重名,那么在显示查询结果的时候,就应该起一个别名。

3.select concat(列名1,列名2) from 表名;

select concat(username,user_email) from user;

将两列并成一列显示。

concat是MySQL的一个函数。

例如还可以这样:

select concat(username,user_email) as name_email from user;

例如做收件地址的时候,一般是省一个字段,市一个字段,县一个字段,街道门牌号一个字段,但是当我们展示的时候,一定是这些字段连接在一块的。

4.select concat_ws("分隔符",列名1,列名2) from 表名;

例如:select concat_ws("==",username,user_email) from user;

5.select distinct 列名 from 表名 不显示重复的数据

6.limit查询 限制查询条数

select*from 表名 limit 条数;

select*from 表名 limit 开始,条数; 从第多少条开始(不包括)查多少条

在分页的时候就是应用limit查询的

7.排序

select*from 表名 order by 字段名 asc ;(升序 默认的 可以不加)

select* from 表名 order by 字段名 desc;(降序显示)

8.聚合函数

(1).select count(*) from 表名; 查询表的记录数。例如:在统计博客文章数的时候就可以用这个函数。

(2)select sum(列名) from 表名; 查询此列的和,如果列中没有数字,则为0,如果有数字,则是所有数字之和。

(3)select  avg(列名) from 表名; 求列的平均值

(4)select max(列名) from 表名;求此列的最大值

(5)select min(列名) from 表名;求此列的最小值

9.分组查询(聚合查询)

select count(*) ,分组中的列 from 表名 group by sex

例如:select sex from user group by sex; 按照sex分组,按照谁分组,select后面必须跟上谁。

select count(id),sex from user group by sex;加上count可以显示每组的数量

select count(id),sex from user group by sex having count(id)>2;只显示count(id)>2的

10.连表查询(至少有两个表)

(1)连接查询:

内连接:

如果直接select*from 表1,表2;得到将是两个表的笛卡尔积;

所以必须在后面加上where条件;

例如:

因为两个表中都有id字段,所以最好在字段名前加上表名:

select student.id,student.name,mark.mark from student,mark where student.id = mark.stu_id;

但是这样语句就太长了,所以可以在from部分给每张表起个别名

select s.id,s.name,m.mark from student as s,mark as m where s.id = m.stu_id;

以上是隐式的内连接查询。只要将 ,替换成 inner join (或者join)便是显式的内连接查询了

select s.id,s.name,m.mark from student as s inner join mark as m where s.id = m.stu_id;

也可以将where替换成on。

外连接:

左连接:以左边的表中的数据为主,即左边的表有多少条数据,最后合成的表就有多少条数据。如果右边的表数据条数少于左边的表,那么缺少的地方补NULL。

select s.id,s.name,m.mark from student as s left join mark as m on s.id = m.stu_id;

必须用on,不能用where!

右连接:和左连接相反

select s.id,s.name,m.mark from student as s right join mark as m on s.id = m.stu_id;

全连接:

(2)联合查询

union操作符用于联合两个或多个select查询的结果集,联合查询是将查询结果竖着拼起来,连接查询则是将查询结果横着拼起来。

例如:

select id,name from php union select id,name from java; union两边的查询语句必须具有相同数量的列。这样才能竖着拼起来。

(3)子查询

例如:

select * from student where id in (select id from student where id>1);

相当于:

select * from student where id in (2,3,4);

因为 select id from student where id>1的结果就是2,3,4

如果错位了,就会导致下面这样的后果

如果两个表,对应字段的内容全部相同,union会自动去掉重复的内容,只显示一次。如果想全部显示,可以使用union all来代替union

0x02 字符集/字符集校对

如果数据库字段插入中文有问题,说明默认字符集设置的有问题。

show create table 表名;可以查看创建表的语句。其中便有表的字符集

show create database 数据库名;可以查看创建数据库的语句,其中便有数据库的字符集

修改表的默认字符集为utf8:

alter table 表名 default charset=utf8;但是这样只能修改表的默认字符集,不能修改字段的默认字符集,所以不建议这样用。建议直接:

alter table 表名 convert to character set utf8;将表和字段的默认字符集都修改为utf-8;

只要表的默认字符整对了,其实这张表就可以存中文了。不用管数据库的默认字符集也可以。

修改数据库的默认字符集为utf8

alter database 数据库名 default character set utf8;

只要将数据库的字符集整对,那么以后建新表的时候,新表的默认字符集就会跟着数据库的默认字符集走。

也可在创建新表时指定表的字符集,例如:

create table user3(

id int unsigned not null primary key auto_increment,

name varchar(30) not null

)default charset=utf8;

其实,最好的解决方案是直接修改配置文件my.ini

在mysqld下添加:

charset_set_server=utf8;

然后重启MySQL

0x03 mysql 存储引擎

存储引擎负责MySQL中数据向磁盘中的存取,是数据库中非常重要的部分。

数据库的存储引擎有:

Blackhole CSV MEMORY ARCHIVE

MylSAM  innoDB

0.两者的区别:

MyISAM 不支持事务,支持表级锁,即当多人向同一张表插入时,只有一个人能插入,这个人插入的时候,整张表就锁了,只有这个人插入完后,其他人才能够插入。崩溃恢复支持不好。在存储短数据的时候性能好,但是很少用。

innoDB 支持事务,行级锁,崩溃恢复支持

5.6开始默认的数据库引擎就是innoDB

1.查看数据库支持的引擎

show engines\G;当表中字段很多时,加一个\G显示效果会更清晰一些

2.查看表的引擎

show table status;

3.查看某一个表的引擎

show create table 表名

4.修改引擎

alter table 表名 engine = 引擎名

5.建表时不指定的话默认用配置文件中的

mysqld 添加default-storage-engine=MyISAMs

0x04 关于int(n)

int(n) n表示显示长度,且只有当在创建表时添加了zerofill 属性,才能看出来区别。

例如:int(6)如果你存了一个111且添加了zerofill的话,select的时候就会显示000111

0x05 关于char(n)和varchar(n)

n:表示字符长度,即有多少个字符,不是字节,例如3个汉字,也是长度为3

char 存的是定长,如果没有达到长度,仍然占用空间,但是因为定长,所以存取速度快,适合存密码

varchar存的是变长,存取速度稍微慢一点,根据字符串的长度来占用空间。适合存用户名。

如果在存取时超过最大长度n,则插入失败。

0x06 mysql反引号

当表名,字段名等需要用到mysql的保留字时,需要用反引号将保留字引起来。

0x07 MySQL的管理工具

navicate 客户端管理工具

phpMyadmin管理工具

发布了156 篇原创文章 · 获赞 19 · 访问量 8946

猜你喜欢

转载自blog.csdn.net/weixin_43415644/article/details/103922968