数据库
数据库:(DB) 按一定的数据模型组织、描述和存储在计算机内的、有组织的、可共享的数据集合。
数据管理: 对数据收集、整理、组织、存储、维护、检索、传送等。
目标: 在妥当的时候以妥当的形式给妥当的人提供妥当的数据。
数据处理: 对数据进行加工、计算、提炼,从而产生新的有效数据的过程。
SQL: Structured Query Language 结构化查询语言
MySQL 的常用操作命令:
1). 首先确保 MySQL 服务先开启: 在 DOS 命令下开启: net start 服务名
在 DOS 命令下关闭: net stop 服务名
2). 需要连接上 MySQL 服务器
在 DOC 环境下连接到 MySQL 服务器的命令:
登录:mysql 【-h 主机名 -P 端口号】 -u 用户名 -p密码
SQL 语言的 9个核心动词:
DQL数据查询语言:
用来查询数据库中的数据 —— SELECT
DDL数据定义语言:
用来创建数据库、数据库对象和定义表的列 —— CREATE、DROP、ALTER
DML数据操作语言:
用来插入、删除和修改数据库中的数据 —— INSERT、DELETE、UPDATE
DCL数据控制语言:
用来控制存取许可、存取权限等 —— GRANT、REVOKE
查看当前数据库服务器下的数据库: show databases;
查看当前数据库的编码格式: show variables like 'char%';
创建指定名称的数据库: create database 库名;
创建指定字符编码的数据库: create database 库名 character set utf8;
删除指定名称的数据库: drop database 库名;
使用指定的数据库: use 库名;
查看当前数据库下所有的表: show tables;
创建指定数据类型的数据库表: create table 表名(列名 类型 列的特征...);
查看之前所定义的表的结构的语法: show create table 表名;
查看表结构: desc 表名;
删除表: drop table 表名;
查看当前时间: select now();
select sysdate() from dual;
查看MySQL版本及当前时间: select version() current_date;
创建表 ★
create table 【if not exists】 表名(
字段名 字段类型 【约束】,
字段名 字段类型 【约束】,
。。。
字段名 字段 类型 【约束】
)
修改基本表★
1). 添加列: alter table 表名 add 列名 类型 [完整性约束];
2). 修改列: alter table 表名 change/modify 列名 列新名 新类型;
3). 删除列: alter table 表名 drop 列名;
4). 重命名表: alter table 表名 rename 新表名;
修改表的存储引擎: alter table 表名 engine=存储引擎;
改变字符格式: set names gbk;
复制表★
1、复制表的结构
create table 表名 like 旧表;
2、复制表的结构+数据
create table 表名
select 查询列表 from 旧表【where 筛选】;
常见的约束★
NOT NULL:非空,该字段的值必填
UNIQUE:唯一,该字段的值不可重复
DEFAULT:默认,该字段的值不用手动插入有默认值
CHECK:检查,mysql不支持
PRIMARY KEY:主键,该字段的值不可重复并且非空 unique+not null
FOREIGN KEY:外键,该字段的值引用了另外的表的字段
主键和唯一★
1、区别:
①、一个表至多有一个主键,但可以有多个唯一
②、主键不允许为空,唯一可以为空
2、相同点
都具有唯一性
都支持组合键,但不推荐
外键:
1、用于限制两个表的关系,从表的字段值引用了主表的某字段值
2、外键列和主表的被引用列要求类型一致,意义一样,名称无要求
3、主表的被引用列要求是一个key(一般就是主键)
4、插入数据,先插入主表
删除数据,先删除从表
可以通过以下两种方式来删除主表的记录
#方式一:级联删除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;
#方式二:级联置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;
创建表时添加约束
create table 表名(
字段名 字段类型 not null,#非空
字段名 字段类型 primary key,#主键
字段名 字段类型 unique,#唯一
字段名 字段类型 default 值,#默认
constraint 约束名 foreign key(字段名) references 主表(被引用列)
)
修改表时添加或删除约束
1、非空
添加非空
alter table 表名 modify column 字段名 字段类型 not null;
删除非空
alter table 表名 modify column 字段名 字段类型 ;
2、默认
添加默认
alter table 表名 modify column 字段名 字段类型 default 值;
删除默认
alter table 表名 modify column 字段名 字段类型 ;
3、主键
添加主键
alter table 表名 add【 constraint 约束名】 primary key(字段名);
删除主键
alter table 表名 drop primary key;
4、唯一
添加唯一
alter table 表名 add【 constraint 约束名】 unique(字段名);
删除唯一
alter table 表名 drop index 索引名;
5、外键
添加外键
alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列);
删除外键
alter table 表名 drop foreign key 约束名;
自增长列: 默认从1开始,步长为1
auto_increment_increment
如果要更改起始值:手动插入值
如果要更改步长:更改系统变量 set auto_increment_increment=值;
插入
语法:
insert into 表名(字段名,...) values(值,...);
语法:
insert into 表名 set 字段=值,字段=值,...;
修改
改单表的记录 ★
语法:
update 表名 set 字段=值,字段=值 【where 筛选条件】;
修改多表的记录【补充】
语法:
update 表1 别名 left|right|inner join 表2 别名 on 连接条件 set 字段=值,字段=值【where 筛选条件】;
删除
方式一:使用delete
一、删除单表的记录★
语法:
delete from 表名 【where 筛选条件】【limit 条目数】
二、级联删除[补充]
语法:
delete 别名1,别名2 from 表1 别名 inner|left|right join 表2 别名 on 连接条件 【where 筛选条件】
方式二:使用truncate
语法:
truncate table 表名
两种方式的区别【面试题】★
1.truncate删除后,如果再插入,标识列从1开始
delete删除后,如果再插入,标识列从断点开始
2.delete可以添加筛选条件
truncate不可以添加筛选条件
3.truncate效率较高
4.truncate没有返回值
delete可以返回受影响的行数
5.truncate不可以回滚
delete可以回滚
基础查询:
语法:
select 查询列表 from 表名;
1、查询单个字段
select 字段名 from 表名;
2、查询多个字段
select 字段名,字段名 from 表名;
3、查询所有字段
select * from 表名
4、查询常量
select 常量值;
注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
5、查询函数
select 函数名(实参列表);
6、查询表达式
select 100/1234;
7、起别名
①as
②空格
8、去重
select distinct 字段名 from 表名;
9、+
作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null
10、【补充】concat函数
功能:拼接字符
select concat(字符1,字符2,字符3,...);
11、【补充】ifnull函数
功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;
12、【补充】isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
条件查询:
语法:
select 查询列表 from 表名 where 筛选条件
1、简单条件运算符
> < = <> != >= <= <=>安全等于
2、逻辑运算符
&& and
|| or
! not
3、模糊查询
like:一般搭配通配符使用,可以判断字符型或数值型
通配符:%任意多个字符,_任意单个字符
between and
in
is null /is not null:用于判断null值
排序查询:
语法:
select 查询列表 from 表 where 筛选条件 order by 排序列表 【asc|desc】
分组查询:
语法:
select 分组函数,分组后的字段 from 表 【where 筛选条件】 group by 分组的字段 【having 分组后的筛选】【order by 排序列表】
使用关键字 筛选的表 位置
分组前筛选 where 原始表 group by的前面
分组后筛选 having 分组后的结果 group by 的后面
子查询:
语法:
select后面:
仅仅支持标量子查询
from后面:
表子查询
where或having后面:
标量子查询
列子查询
行子查询
exists后面:
标量子查询
列子查询
行子查询
表子查询
分页查询:
语法:
select 查询列表 from 表 limit 【offset,】size;
注意:
offset代表的是起始的条目索引,默认从0开始
size代表的是显示的条目数
分页公示:
(page-1)*pageSize,pageSize*rows
联合查询:
union:合并、联合,将多次查询结果合并成一个结果
语法:
查询语句1
union 【all】
查询语句2
union 【all】
...
union 去重,union all包含重复项
查询总结:
select 查询列表 ⑦
from 表1 别名 ①
连接类型 join 表2 ②
on 连接条件 ③
where 筛选 ④
group by 分组列表 ⑤
having 筛选 ⑥
order by排序列表 ⑧
limit 起始条目索引,条目数; ⑨
事务:
一、含义
事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行
二、特点(ACID)
A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行
B 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态
C 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的
D 持久性:一个事务一旦提交了,则永久的持久化到本地
使用显式事务:
① 开启事务
set autocommit=0;
start transaction;#可以省略
② 编写一组逻辑sql语句
注意:sql语句支持的是insert、update、delete
设置回滚点:
savepoint 回滚点名;
③结束事务
提交:commit;
回滚:rollback;
回滚到指定的地方:rollback to 回滚点名;
视图:
语法:
create view 视图名 as 查询语句;
好处:
1、简化sql语句
2、提高了sql的重用性
3、保护基表的数据,提高了安全性
修改
方式一:
create or replace view 视图名 as 查询语句;
方式二:
alter view 视图名 as 查询语句
删除
drop view 视图1,视图2,...;
查看
desc 视图名;
show create view 视图名;
变量:
语法:
①查看系统变量
show 【global|session 】variables like ''; 如果没有显式声明global还是session,则默认是session
②查看指定的系统变量的值
select @@【global|session】.变量名; 如果没有显式声明global还是session,则默认是session
③为系统变量赋值
方式一:
set 【global|session 】 变量名=值; 如果没有显式声明global还是session,则默认是session
方式二:
set @@global.变量名=值;
set @@变量名=值;
存储过程:
创建 ★
create procedure 存储过程名(参数模式 参数名 参数类型)
begin
存储过程体
end
调用
call 存储过程名(实参列表)
查看
show create procedure 存储过程名;
删除
drop procedure 存储过程名;
函数:
创建
create function 函数名(参数名 参数类型) returns 返回类型
begin
函数体
end
注意:函数体中肯定需要有return语句
调用
select 函数名(实参列表);
查看
show create function 函数名;
删除
drop function 函数名;
流程控制结构
分支结构
1、if函数
功能:实现简单双分支
语法:
if(条件,值1,值2)
位置:
可以作为表达式放在任何位置
2、case结构
功能:实现多分支
语法1:
case 表达式或字段
when 值1 then 语句1;
when 值2 then 语句2;
..
else 语句n;
end [case];
语法2:
case
when 条件1 then 语句1;
when 条件2 then 语句2;
..
else 语句n;
end [case];
位置:
可以放在任何位置,
如果放在begin end 外面,作为表达式结合着其他语句使用
如果放在begin end 里面,一般作为独立的语句使用
3、if结构
功能:实现多分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
else 语句n;
end if;
位置:
只能放在begin end中
循环结构
1、while
语法:
【名称:】while 循环条件 do
循环体
end while 【名称】;
2、loop
语法:
【名称:】loop
循环体
end loop 【名称】;
3、repeat
语法:
【名称:】repeat
循环体
until 结束条件
end repeat 【名称】;
循环控制语句
leave:类似于break,用于跳出所在的循环
iterate:类似于continue,用于结束本次循环,继续下一次