数据库类型
类型
varchar,char 字符串型
blob,text大数据类型
tinyint,smallint,int,blgint,float,double 数值型
date,timestamp,tlme,datetime 时间型
约束
primary key 主键,被主键修饰字段中的数据,不能重复 不能为null。
not null指定此字段不能为空
unique指定此字段不能有重复
auto_increment自动增长
三大范式
1:确保每一列的原子性
2:非键字段必须依赖于键字段
3:在1的基础上,除了主键以外的其他列都不传递依赖于主键列,or,任何非主属性不依赖于其他属性(在2的基础上消除传递依赖)
查
查询所有记录
select * from 表名
查询表中部分内容
select 字段1…from 表名
去重查询
select distinct 字段(*) 表名
条件查询,sql语句后加where
查询条件
>大于,<小于,<=小于等于,>=大于等于,=等于,<>不等于
as 修改原来的字段名
between … and…显示在某一区间的值(有始有终)
in 显示在列表条件的值 例如in(值1…)相当于in=值1,…
like 模糊查询%代表零或多个任意字符_代表一个字符
is null 判断是否为空
and多个条件同事成立(并且的意思)
or多个条件成立任意一个(或者的意思)
not不成立(!的意思)
order by 可以对查询结果进行排序
desc降序
asc升序
单个列排序语法
select * from 表名 order by 列名 (升序or降序)
多个列排序语法
select * from 表名 order by 列名 (升序or降序),列名 (升序or降序)……
查询一段记录:
select * from 表名 limit ?,?
前者是索引
后者是距离
,
group by 分组
使用group by可以将查询结果按某一列数据值进行分类
左链接
select * from (当主表的表) left join 表名 on 条件
多个表(三个以上)
select * from (主表) left join 表明 on 条件 left join 表明……
视图
将用sql语句链接成的表包装起来
create view 名 as (sql语句)
sql的运行顺序
-
FROM: 对前2个表执行笛卡尔积,生成虚表vt1
-
ON: 对vt1应用on条件,只有满足join_condition条件的才能插入虚表vt2
-
OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2,生成t3,如果from包含两个以上表,则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束
-
WHERE: 对vt3进行where筛选,只有满足where条件的才能插入vt4
-
GROUP BY: 对vt4按group by字段分组,得到vt5
-
HAVING:对vt5应用HAVING筛选器只有使 having_condition 为true的组才插入vt6
-
SELECT:处理select列表产生vt7
-
DISTINCT:将重复的行从vt7中去除产生vt8
-
ORDER BY:将vt8的行按order by子句中的列 列表排序生成一个游标vc9
-
LIMIT(Mysql): 从vc9的开始处选择指定数量的行生成vt10 并返回调用者
sql 的执行顺序,执行顺序, from 表名, where 条件为从后到前执行,后面的字段最大的过滤数据,再执行 group by 分组,然后执行 having 条件,再执行 order by 条件,然后执行 select * ,例如: select * from t_user where 性别 = " 女 " and province = "山东"
增删改
- 插入表的记录insert
语法:
向表中插入某些字段
insert into 表(字段1……)values(值1……)
向表中插入所有的字段,字段的顺序为 创建表的顺序
insert into 表values(值1……) - 更新表记录:update
更新所有记录指定字段
update 表名 set 字段名=值……
更新符合条件记录的字段
update 表名 set 字段名=值… where 条件 - 删除记录:delete
删除指定条件的记录
delete from 表名 where 条件
删除全部记录
truncate table 表名
cmd
net start mysql启动mysql数据库
net stop mysql关闭mysql数据库
mysql -uroot -proot登录mysql数据库
set names gbk ;修改黑窗口乱码
. 文件路径 运行mysql文件
DDL数据库的操作
create database 数据库的名字~~创建数据库
create database 数据库的名字 character set 编码格式 ~~创建并指定数据库的编码
create database 数据库的名字 character set 编码格式 collate 比较规则~创建指定数据库的编码并带有比较规则
show databases~~查看全部数据库
show create database 数据库的名字 ~~查看指定数据库的信息
drop database 数据库的名字~~删除指定数据库
alter database 数据库名 character set 字符集 ~修改数据库的字符集
select database()~~查看当前正在使用的数据库
use 数据库的名字~~切换到指定的数据库
DDL表的操作
create table表名(字段名 类型(长度)[约束]……)创建表
show tables 查看数据库中所有的表
desc 表的名字 查看表的结构
show create table 表名查看表的建表语句
drop table 表的名字删除指定的表
foreign key(字段 a) references 表(字段b)~~设置外键 使 字段a与其他表的字段b产生关联
修改表
添加列:alter table 表名 add 列名 类型 (长度)[约束]
修改类型及约束:alter table 表名 modify 列名 类型(长度)[约束]
修改列名:alter table 表名 change 旧列名 新列名类型(长度)[约束]
删除列:alter table 表名 drop 列名
修改表名:rename table 旧表名 to 新表名
修改表的字符集(编码格式):alter table 表 character set 编码格式
常用函数
聚合函数
count求个数
sum求和
avg求平均数
max求最大值
min求最小值
select LAST_INSERT_ID() // 是mysql的函数,跟insert操作关联,用于取得最新插入数据的主键,如果单独执行返回0
select MD5(str) // md5 加密
自定义函数
create function 函数名字(参数名字 参数类型长度)
returns 返回类型长度
begin
declare声明字段名称 声明字段类型;
declare 返回字段名称 返回字段类型;
操作语句;
return 返回字段;
end
调用自定义函数:select 函数名(参数)
sql逻辑
-
条件判断函数
-
if(判断,结果1,结果2) 如果判断正确返回结果1;不正确返回结果2
-
ifnull(值1,值2) 如果值1为null就返回 2 and不为空就返回值1
-
select case
when 条件1
then 值1
when 条件2
then 值2
…
else 最后的值
end
case函数的开始,end函数的结束,如果条件1成立就返回值1,如果条件2成立就返回值2!全部不成立就返回最后的值
循环
-
where循环语法
where 条件 do
(操作);
set 迭带变量=迭带变量+1
end while -
repeat 循环
repeat
(操作);
set (迭带变量)=(迭带变量)+1
until (迭带变量)>(值)
end repeat;
储存过程
就是将很多sql语句等装成一个代码块
语法
create procedure 存储过程名称(参数)
begin
sql语句
end;
储存过程的使用方法
调用:call 储存过程名称();
删除:drop procedure 储存过程名称()
储存过程参数类型~~in,out,inout
in~必须在调用储存过程是指定(默认值),不能当返回值
out~可在储存过程中改变,还可以当返回值
inout~调用时指定or被改变or当返回值
使用变量
自定义变量~declare 变量名称 类型
自定义变量并初始化值~declare 变量名称 类型 default 值
储存中可以使用运算符