一。
- 连接服务器的协议 TCP/IP 协议 Client/Server
HTTP协议 Broswer/Server
FTP/IP协议 ftp 21 - 套接字:ip:port
IP:服务所在电脑上的IP地址
port:电脑上用于区分不同服务的唯一标识
mysql:3306 oracle:1521
http:默认80
redis:8379
host: 主机 - IP 域名DNS - mysql workbench - 只能连接mysql
navicat - 12版 - 连接多种数据库
SQLog - 海豚 连接多种数据库
PLSQL - 连接多种数据库
SQL Developer - 只能连接Oracle,依赖JRE - – SQL:官方通用sql + 方言sql
– DDL: 和数据库以及数据表的 CRUD 操作
– DML: 和表中的记录相关的 CRUD 操作
– DQL: select 记录
– DCL: 数据库服务器的操作权限、用户等相关的
二。
1.DDL
-- 查看当前服务器中有哪些库
show databases;
-- 创建一个库 -> 等同于一个文件夹
CREATE DataBase if not exists db_day01;
-- 删除数据库
drop database if exists db_day01;
-- 修改数据库
alter database db_day01 character set utf8; -- 设置数据库字符集
-- 创建表,需要定义 字段(列名 数据类型)
create table user (
id int COMMENT '序号',
name varchar(20) COMMENT '姓名'
);
-- 删除表
drop table if exists user;
-- 修改表结构, 增加字段
alter table user add(age int(3));
alter table user add(birthday date);
-- 修改表结构, 修改字段类型 id - int(11)
alter table user modify name varchar(10);
-- 查询表结构
desc user;
2.DML
-- 新增表中的数据
-- 插入一整行,values() 中的值 必须和字段的顺序一致
insert into user values(1, 'lucy', 23, '2020-08-09');
-- 插入一行,有的字段为空
insert into user values(null, 'lucy', 23);
-- 插入一行的部分字段
insert into user(age, name) values(25, 'tom');
-- mysql支持批量插入数据
insert into user values(3, '张三', 18),
(4, '张三', 19),
(5, '张三', 18),
(6, '张三', 19),
(7, '张三', 18);
-- 修改表中的数据
-- 更新表中所有的记录
update user set name = '李四';
-- 有条件的更新 where
update user set name = '李四' where name = '张三';
-- 修改数据库的安全模式
update user set name = '李四' where id=7;
-- 删除表中的数据
-- 删除全部记录
-- null 无穷大 或者 无穷小
delete from user; -- 删除所有-挨个记录删除
-- 条件删除
delete from user where id = 1 or id is null;
-- 删除表中所有记录 - DDL - 删除表,重新创建
truncate table user;
3.DQL
-- 1.查询所有记录 * 会自动解析为所有字段名,解析效率较低
select * from emp;
-- 2.单独查询部分字段, 例如全部员工的姓名
select
empno,ename,sal,job,hiredate
from
emp;
-- 3.将查询出来的字段 起个别名 select 字段名 as 别名
-- as可以省略
select
empno as '编号',ename '姓名',sal,job,hiredate '入职时间'
from
emp;
三。简单查询
1.条件查询
SELECT 字段名 FROM 表面 WHERE 条件;
条件查询
-- 4.1查询部门在20的所有人
select ename, deptno from emp where deptno = 20;
-- 4.2查询月薪大于1000的人
select ename,sal from emp where sal > 1000;
-- 4.3查询月薪大于1000,并且小于2000的人
select ename,sal from emp where sal >= 1000 and sal <= 2000;
select ename,sal from emp where sal BETWEEN 1000 and 2000;
-- 4.4查询在20或者30部门的人
select ename, deptno from emp where deptno = 20 or deptno = 30;
select ename, deptno from emp where deptno in (20,30);
select ename, deptno from emp where deptno not in (20,30);
-- 4.5查询所有没有奖金的人
select ename, comm from emp where comm is null;
-- 4.6查询名字是SCOTT的人
select ename from emp where ename = "scott";
select ename from emp where ename like "scott";
-- 4.7查询名字是以S开头的人
-- %可以0~n个 _ 一个占位符,一个字符
select ename from emp where ename like "s%";
-- 4.8查询名字有S的人
select ename from emp where ename like "%s%";
-- 4.9查询名字中第二个字母是A的人
select ename from emp where ename like "_A%";
-- 4.10查询员工的月薪*12+奖金 是多少
select ename, sal*12 '年薪' from emp;
-- comm 是 null 所以不能直接计算
select ename, sal*12 + ifnull(comm, 0) '年薪' from emp;
-- ftp:temp -> tools -> mysql
-- 在emp表中查询都有哪些部门号 -- 去除重复
select distinct deptno from emp; -- 只能查出3条数据
select distinct (deptno, ename) from emp;
-- 查询员工姓名,以及月薪,并且按照月薪由大到小排序
-- 升序-默认 asc,倒叙-desc
select ename, sal from emp order by sal desc;
四。常用函数
/*
聚合函数、分组函数
count(): 求总数
max(): 求最大值
min(): 求最小值
avg(): 求平均值
sum(): 求和
会自动将null值排除在外
*/
-- 查询emp表中一共有多少个员工
select count(*) from emp;
-- 查询员工中的最高薪资
select max(sal) from emp;
-- 求平均薪资多少
select round(avg(sal)) from emp;
-- 求平均的奖金
select avg(comm) from emp;
-- 求所有员工的月薪总和
select sum(sal) from emp;
select * from emp;
/*
普通函数 - 方言
字符串相关,数学相关,时间相关
temp-resources-api
*/
select ceil(1.34);
select month(now());
select concat('ha','he');
select ifnull("hello", 20);
更多用法点击下面;
转载自:https://blog.csdn.net/weixin_43216903/article/details/89284757?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159758551219724811857111%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159758551219724811857111&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-4-89284757.first_rank_ecpm_v3_pc_rank_v2&utm_term=mysql%E5%87%BD%E6%95%B0%E6%9C%89%E5%93%AA%E4%BA%9B&spm=1018.2118.3001.4187
五。分页
/* limit分页 limit startRow(开始行), rowCount(行数)
startRow=(page-1)*rowCount;
*/
use work01;
select * from emp limit 0,3;
select * from emp limit 3,3;
select * from emp limit 6,3;
select * from emp limit 9,3;
select * from emp limit 12,3;
select * from emp order by sal asc limit 0,3;
六。约束
- 主键:非空且唯一 代理主键:没有任何业务意义 自然主键:表中本身存在的非空唯一的有效字段
插入重复键值: 1062 Duplicate entry ‘1’ for key ‘PRIMARY’
插入空的主键值:Column ‘id’ cannot be null
删除主键:alter table st5 drop primary key;
怎加 主键 :alter table st5 add primary key(id);
create table st5 ( id int primary key,
name varchar(20), age int );
主键自增 AUTO_INCREMENT
列名 int primary key AUTO_INCREMENT
主键自加可以在插入时给主键赋值null
- unique 唯一约束:列中不可以出现重复的值。但是null没有数据,不存在重复问题
-- 已有表添加唯一约束
ALTER TABLE stu ADD UNIQUE index (id) ;
-- 删除唯一约束 index 索引
ALTER TABLE stu drop index id ;
- not null 非空约束:列的值不可以null
- default ‘啥啥’ 列里的值默认值为啥啥
insert into st9 values (1, '李四',default);
或者
insert into st9 (id, name) values (2, '李四');
七。外键约束:从表中与主表对应的那一列
- 创建约束:
新建表时增加外键:
constraint 外键约束名随意取 foreign key (外键字段名) references 主表名 (主表字段名);
已有表怎加外键:
alter table 从表 add constraint 外键约束名随意取 foreign key (外键字段名) references 主表名 (主表字段名);
删除外键:
alter table 从表 drop foreign key 外键名称;
- 一对多:
主表:
create table department(
id int primary key auto_increment,
dep_name varchar(20),
dep_location varchar(20) );
从表:
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int ,--外键对应主表的主键 )
创建外键约束
constraint emp_depid_fk foreign key (dep_id) references department(id)
- 多对多
/*
多对多,需要创建一张新的table,对2张表进行外键约束。
中间表对另外两张表关联,中间表删除才可以删除其他表。
*/
create table coder(-- 从表1
id int primary key auto_increment,
name varchar(20),
salary varchar(20)
);
create table project(-- 从表2
id int primary key auto_increment,
name varchar(10)
);
create table coder_project(-- 主表
coder_id int ,
project_id int ,
-- 添加外键
foreign key (coder_id) references coder(id),
foreign key (project_id ) references project(id )
);