- MySQL命令
1.mysql -uroot -p 回车,再输入密码,密码是加密的
2.mysql -uroot -proot 直接输入密码进入,不安全
3.mysql -utoot -h localhost -P 3306 -proot 远程访问数据库
4.mysql -utoot -h127.0.0.1 -P 3306 -proot
5.mysql> 有了这个标识 就说明已经连接上mysql的服务了
6.exit;是与服务器断开连接
7.host主机ip地址
8.任何客户端连接服务器都需要ip、端口号、协议TCP/IP
9.show databases ;显示当前数据库管理系统中所有的数据库,数据库是用来存储table(表)的,table是用来管理record(记录)的.。record是用来管理column(字段)。
information_schema
mysql
performance_schema
以上三个数据库不要碰
10.create database 数据库名;创建指定名字的数据库
11use 数据库名;使用当前数据库.
12.show tables;显示当前数据库下的所有表
13.drop database 数据库名;删除该数据库
学习数据库语言
SQL(Structure Query Language)结构化查询语言
-
mysql的划分
-
DDL(Database Defintion Language)数据库定义语言
1.表的创建
create table 表的名字(
字段名 数据类型(长度),
字段名 数据类型(长度);
)
数据类型 int varchar字符串 char 字符串
2.查看表
show tables;
3.查看表结构
desc 表名字;
4.删除表
drop 表名字;
5.修改表结构
1)alter table 表名字 [column] drop 字段名;删除该表中的该字段
2)alter table 表名字 [column] modify 字段名新的数据类型(长度);修改数据类型,也可以修改长度。
3)alter table 表名字 [column] add 字段名 数据类型(长度);添加一个新的字段
4)alter table 表名字 [column] change 老名字 新名字数据类型(长度);就名字变,其他的都不可以变,这是修改名字 -
DML(Database Manipulation Language)数据库管理语言
1.DML必须建立在DDL语句上
2.DML向表中添加记录、删除记录、修改记录、查询记录
3.添加记录
1)insert into 表名 (字段列表) values (值列表); 值对应着字段列表顺序添加
2)insert into 表名 values (值列表);字段列表顺序为默认的添加表的顺序
注意:字段可以乱序,但是必须保证个数一致
3)insert into 表名 (字段列表) values (值列表1),(值列表2);
4.删除记录
delete from 表名 ;删除所有数据
delete from 表名 where 字段名 = 值;删除与这个值相等的所有字段
detele from 表明 where 字段名 = 值 and 字段名 = 值;删除与这两个值想的所有字段。
注意:在我们正常项目中,一般使用逻辑删除,逻辑删除就是修改其状态,不会使用物理删除,因为物理删除,是真删除,delete谨慎使用。
5.修改记录
update 表名 set 字段名1= 想要改的值 , 字段名2 = 想要改的值 where 字段名 = (最好是唯一的)值。
一般在where后面的字段一般都是主键,所有表都会添加一个id字段,保证数据的唯一性
6.查询记录
select *from 表明;查询当前表的所有数据结构 -
数据库约束
作用:使所有品牌的数据库统一约束,有一定限制、规矩。目的就是在创建数据库表时不能随便创建,必须遵循一定规矩。
1.非空约束:字段名 数据类型(长度) not null; 在创建表的时候,设置当前字段必须有值。
2.检查约束:字段名 数据类型(长度) check(范围) ;设置一定的范围。例如,玩家年龄不能低于18岁。mysql不支持
3.唯一约束:字段名 数据类型(长度) unique;用这个单词修饰的字段的值必须是唯一的,为了解决误填数据的操作
4.主键约束:字段名 数据类型(长度) primary key 当前表的特点就是非空唯一的,用于id 时候后边还添加 auto_increment;自增操作
复合主键:使用两个字段同时唯一才是唯一的,例如:名字和年龄都是主键,两个都想同时才不可以创建,一个相同时可以
5.外键约束:建立在两个表的关系
格式:foreign key(自己表的字段名字随便) references 主表(主键字段名); 例如:froeign key(haha) references brand(bid);
1)一对一 人和身份证号
2)一对多 品牌和商品
3)多对多
6.默认约束:字段名 数据类型(长度) default ‘123’设置默认值为什么。 -
DQL(Database Query Language)数据库查询语言
1.select * from 表名; 查询所有 *代表所有字段,性能慢
2.select 字段名 from 表名;where :过滤条件
1.比较运算符:>, <, =, <=, >=, !=, <>
2.and,并列关系,条件必须满足
3.between…and… 在什么区间相当于 >= and<=
4.or 或,满足一个条件即可
group by:分组,一般跟count(1)连用
select job ,count(1)from emp group by job;
having:过滤条件,一般跟group by 连用
select deptno,count(1) as 总数 from emp group by deptno having 总数 >= 5
order by:asc升序,desc降序排序
select * from emp where sal > 2000 order by sal desc;
like:模糊搜索
select * from emp where ename like ‘_A_E%’;
%通配符代表0个或多个
_占位符
limit 开始行,页大小:分页
问:一页10条记录?
答:select * from emp limit 0,10;
例:百度查询页数
startRow = (pageNo -1)*pageSize;
satartRow:开始行,默认是从0开始
pageNo:用户输入页码
pageSize:页面大小指的是一页多少条记录 -
DCL(Database Control Language)数据库控制语言
添加权限: grant 权限 on 数据库表 to user1,user2;
删除权限: revoke 权限 on 数据库表 to user1,user2; -
表的关联查询
特点:查询表的个数两个或两个以上,因为某些需求是根据多个表的结果完成,通过外键来确定两个表之间的关系,从表具有主表的主键作为从表的外键
sql92版本:对于表关联的查询支持的不完整
内连接:inner 查询的是两个表的交集部分
1.等值连接
select * from beauty g,boys b where g.boyfriend_id = b.id;过滤条件有等号的
2.不等值连接
grade_level 级别号、lowest_sal最低工资、highest_sal 最高工资
select ename , j.grade_level from emp e , job_drades j where e.sal beetwen j.lowest_sal and j.highst_sal;过滤条件没有等号
3.自连接
例:查询员工的领导编号
select 领导.empno, 领导.ename, 员工.empno,员工.ename from emp 员工, emp 领导 where 员工.mgr = 领导.empno
sql99版本:
内连接:inner
1.等值连接:select * from 表A inner join 表B on 共有条件
例:select * from beauty g inner join boys b on g.boyfriend_id = b.id;过滤条件有等号的
2.不等值连接:select * from 表A inner join 表B on 不等值条件
例:grade_level 级别号、lowest_sal最低工资、highest_sal 最高工资
select ename , j.grade_level from emp e , job_drades j where e.sal beetwen j.lowest_sal and j.highst_sal ;过滤条件没有等号
3.自连接:elect * from 表A inner join 表A on 条件
例:查询员工的领导编号
select 领导.empno, 领导.ename, 员工.empno,员工.ename from emp 员工 inner join emp 领导 on 员工.mgr = 领导.empno
外连接:outer
应用场景:用于查询一个表中有,另一个表没有的记录
特点: 外连接的查询结果中主表是所有记录,如果从表中没有和他匹配的,则显示null,如果从表中有和他相匹配的,就显示匹配的值,外连接的查询结果也可以认识是,内连接+ 主表中有从表中没有的记录
1.左外连接: left join on
左边表为主表,右边表为从表
例1: 查询男朋友 和 女朋友对象的信息
select * from beauty t left join boys b
on t.boyfriend_id = b.id
例2:查询出 有男朋友的女明星
select * from beauty t left join boys b
on t.boyfriend_id = b.id
where b.id is not null;
例3:查询出 没有男朋友的女明星
select * from beauty t left join boys b
on t.boyfriend_id = b.id
where b.id is null;
2.右外连接:right join on
左边表为从表,右边表为主表
例:查询有女朋友的男明星
select * from beauty t right join boys b
on t.boyfriend_id = b.id
3.全外连接:full join on (mysql不支持)
全外连接 = 内连接 + 表1中有但是表2中没有的数据+表2中有单表1中没有的
4.交叉连接:cross join 作用就是为了得到笛卡尔积现象,cross join on 过滤就和内连接结果一样
例:select * from beauty t CROSS join boys b -
子查询
特点:在一个sql语句中嵌套一个sql语句
例1:查询管理者是King的 员工姓名和工资
select ename,sal,job from emp where mgr = (select empno from emp where ename = ‘KING’);
例2:查询出king所在部门的部门号\部门名称\部门人数
elect e.deptno,dname,count(e.deptno) from emp e inner join dept d
on e.deptno = d.deptno group by e.deptno
having e.deptno = (select deptno from emp where ENAME = ‘KING’); -
联合查询
特点:查询两个表的数据,将两个表的数据整合到一个结果集中,不适用关联查询,表格字段格式,顺序和数据类型要一致,这样查询才有意义。
关键字: union 和 union all
union:使用union时候会去重
union all :不会去重
格式:select 8 from 表名 union select * from 表名 -
单行函数
1.min(字段名); 取当前字段的最小值
2.max(字段名); 取当前字段的最大值
3.avg(字段名); 取当前字段的平均值
4.sum(字段名); 求和
5.count(); 计数器
1)count(1);查询所有字段,只要有一个字段不是null就记录一个1,最后查询1的个数
2)count(“string”);查询所有字段,只要有一个字段不是null就记录一个string,最后查询string的个数
3)count(sal);查询当亲字段,如果字段不是null就+1,如果是null就不动,最后返回结果
4)count( * );性能慢,将 *变成表结构的字段,再去查询,+1 -
拓展
表的复制
1.复制表结构和数据
create table 新建的表名 as select * from 想要复制的表名;
2.复制表结构
create table 新建的表名 as select * from 想要复制的表名 where 1=2;
distinct:去重,最好修饰一个字段,修饰多了就没意义了
数据库中的运算:
1.select 1+1;=2
2.select 2*3;=6
3.select 2+’~’+3;=5
4.select 2 + null;=null
5.select ‘A’ + null;=null
6.select ‘A’ + ‘B’;=0
7.select ‘A’ + ’ '; =0
8.字段is null,不能= null ,字段is not null ,ifnull(字段名, 0)才可以相加