MysQL基础
基本知识:
1、数据库:是对数据的管理;
2、数据库中的表:是对发生业务的分类管理;
3、MysQl:是数据管理系统;
一些常用的mysql命令
1、登录mysql;
运行cmd —>d:—> cd D:servermysql-5.7.17-winx64in —>mysql -u root -p —>输入密码:root。
2、显示服务器上所有已有的数据库;
show databases;
3、在服务器中创建自己的数据库;
create database 数据名字 character set utf8;
4、切换到指定的数据库中;
use 数据库的名字;
5、删除已有的数据库;
Drop database 数据库名字:db_name;
在数据库中建立数据表格;
数据表示一个二维的表格(行、列)
一行代表一条数据;
每一列代表是当前一条数据的字段;
1、先指定一个数据库的名字;
Use 数据库名字;
1、建立数据库中的表格;
Create table 表格的名字:tb_name(
—>字段1,
—>字段2,
—>字段3
—> );
2、显示表格;
Show tables;
3、删除表格;
Drop table 表格的名字;
知识点:
(1)、主键:唯一识别一条记录的字段;
(2)、自增:某个字段不需要手动填写数据;而是通过系统分配的整数,每一条数据分配的值都是前一条数据的增量。
(3)、非空:字段设置为非空时,填写数据时要求该字段为必填项;
(4)、默认值:向表中填写数据时,字段不写入数据时,会默认填充值。
代码单词:
默认值:default (value)值;
自增:auto_increment;
主键:primary key; 注意:字段指定了主键之后,unique将不再使用;
唯一:unique;
说明:comment ‘填写说明的内容’;
引用:reference_definition;
非空:not null;
数据类型:
Double:小数;(length:数的总长度,docimals:小数占据几位)
Float:
Numeric:(length;数的总长度,decimals:小数占据几位)
Datetime:日期,时分秒;
Int:默认长度整数数字;
Varchar():不固定字符,需要手动填写字符长度;
Char():字符固定,定长字符;
Text():存在无限多个字符;
插入数据insert
Insert 表的名字 values();
适用于全记录插入;按照字段的顺序插入数据;
语法:insert 表的名字(字段1,字段2,......) values(‘字段1的值’,’字段2的值’,’字段3的值’);
对于指定的字段进行数据的插入操作,如果是字符类型的数据要用单引号’’,包含要插入的数据;
提示:主键、自增、默认可以不进行定义;
修改、删除
1、修改表中的数据;
语法:update 表的名字 set 字段1=值,字段2=值,where 条件;
语句中如果不加where,则会将所有个性字段对应的记录修改掉;
Update 表的名字 set nickname=’tom’
数据筛选:where id=1;
2、删除表中的指定记录。
Delete from tb_name where 删除条件;
查询
显示所有信息:
例:SELECT * FROM ming.adress_list;
投影字段:
例;SELECT name,position FROM ming.adress_list;
将字段别名:
例:SELECT name '名字', tel '电话' FROM ming.adress_list;
筛选条件查询:
例:SELECT * FROM ming.adress_list where name='梁朝伟';
%通配符的模糊查询:
例:SELECT * FROM ming.adress_list where tel like '136%';
SELECT * FROM ming.adress_list where tel like '%234';
And的用法:
例:SELECT * FROM ming.adress_list where tel like '136%' and name like '梁%';
Or的用法:
例:SELECT * FROM ming.adress_list where tel like '136%' or name like '张%';
Not的用法:
例:SELECT * FROM ming.adress_list where tel not like '136%';
聚合函数:
统计个数总数:
例:SELECT count(*) FROM ming.adress_list;
求和函数:
例:SELECT sum(age) FROM ming.adress_list;
求平均值函数;
例:SELECT avg(age) FROM ming.adress_list;
求最大值:
例:SELECT max(age) FROM ming.adress_list;
求最小值:
例:SELECT min(age) FROM ming.adress_list;
注:聚合函数不能与投影一起使用;
排序order by;
例:SELECT * FROM ming.adress_list order by id asc;
SELECT * FROM ming.adress_list order by id desc;
SELECT * FROM ming.adress_list order by age id desc;
Asc:升序;desc:降序;
分组: group by;distinct(去掉重复)
例:SELECT position from tb_name group by position;
注:(1)、分组将相同的字段分为一组;
(2)、投影的字段就是分组的字段;
(3)、分组可以与聚合函数一起使用;
例如:select position, count(*)’总数’,avg(age)‘平均数’ from tb_name group by position having avg(age)>?;
Where是在未分组时候使用;Having是在分组后使用;
主从表的查询;
在主表当中建立关联所用的字段;两表关联,一定有主从表之分,从主表建立一个新字段以便关联到从表,主表中新建的这个用于关联的字段成为外键;
如何建立外键:
(1)、在主表中新建一个字段;
(2)、新建的这个字段应于从表的主键类型相同并关联到从表主键;
1、检验用户输入的用户名与密码是否在系统中存在;
例:select * from users where username = ‘?’and password = ‘?’;
2、用户登录系统后,查看用户真实的信息;一次查询涉及到的数据来自多个表。
3、使用join on 的多表联合查询方法;
Join on 的语法:select * from 主表 inner join 从表 on 主表.外键=从表.主键;
例句:select users.*,adress_list.* from users inner join adress_list on users.waijian=adress_list.id;
注意:where 所带有的条件一定要放在查询的最后;
子查询:一个查询中出现两次查询;
例:select * from adress_list where 主键 = 或者in(select waijian from users where 条件);
子查询:一个查询中出现两次查询;
例M:select * from adress_list where 主键 = 或者in(select waijian from users where 条件);
Limit限制查询数;
语法:Select * from tb_name limit 数值;
例如:select * from tb_name limit 5,2;表示从第5行开始显示2条数据;
注意:如果子查询中使用limit时,不能使用not in,in可以用<>不等于;
例题:查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。
select sno,count(*) from score where sno <>(select sno from score order by degree desc limit 1) group by sno having count(*)>1;
注意:mysql语句中两个日期的相减等于年数,也就是整个生日-另外一个生日=年数;
例:2017-12-27 —— 2016-1-23 = 1;
例题:查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
Select sno,sname,sbirthday from student where sbirthday-(select sbirthday from student where sno='108')=0;
用子查询作为投影使用;
例题:现查询所有同学的Sno、Cno和rank列。Between …. And … 在某个范围区间内。
select sno,cno,(select rank from grade where score.DEGREE between low and upp) '等级' from score;
Union使用:将两个结构相同的查询结果进行合并;
例题:查询所有教师和同学的name、sex和birthday.
select sname,ssex,sbirthday from student union select tname,tsex,tbirthday from teacher;
注意:inner join on的链接方式的运行高与子查询的运行。