DBMS:DataBase Manager System 数据库管理系统
SQL:Structured Query Language 结构化查询语言
图形化数据库管理软件
Navicat
SQLyog
SQL分类
DDL:数据定义语言,定义数据库/表结构:
create创建, drop 删除,alter修改,truncate截断
DML:数据操纵语言,操作数据:
insert插入, update更新,delete删除
DCL:数据库控制语言,控制权限相关:
grant(授权),revoke(取消授权)
DQL:数据查询语言,查询数据
select查询
DDL
创建DB
CREATE DATABASE mydbl;
CREATE DATABASE mydb2 CHARACTER SET utf8;
删除DB
DROP DATABASE mysis;
修改DB(一般用于编码)
ALTER DATABASE mydb2 CHARACTER SET gbk;
显示已有数据库
SHOW DATABASES; 显示所有数据库
SHOW CREATE DATABASE mydbl; 显示创建语句以及编码
字段类型
java mysql
int int
float float
double double
char(字符)/String(字符串) char/varchar 固定长度(即便长度不够,会补空格) | 可变长度 (数据多长,长度多长,必须指定)
Date date(日期)|time(时间)|datetime (日期和时间)|
timestamp(日期时间 ,会自动使用当前时间):
文件类型 BLOB | TEXT : TEXT 文本类型 , BLOB 二进制类型
约束
单表约束:
主键约束: primary key
唯一约束: unique
非空约束: not null
表格SingleTable
* 创建数据表
语法: create table 表名(字段名 类型(长度) 【约束】 , 字段名 类型(长度)[约束]);
* 显示数据表
show tables ; -- 显示当前数据库的所有表
desc aa; --查看具体某张表的结构
show create table aa; --显示建表语句
*修改:
添加列: alter table 表名 add 列名 列的类型
重定义列: alter table 表名 modify 列名 新的类型
修改列名: alter table 表名 change 旧的列名 新的列名 类型
删除列名: alter table 表名 drop 列名
修改表名: rename table 表名 to 新表名
*表中数据
insert ,delete,update
表中数据:
增加: insert into 名称 values(值1,值2,值3) //添加行数据
指定了列名,只需要插入对应列的值
insert into 表名(sid,name) values(值1,值2)
删除: delete from 名称 [where 条件]
修改: update 表名 set 列名=值,列名=值 [where 条件]
查询: select 输出的列名 from 表名 where 条件 group by 分组条件 having 分组之后的条件过滤 order by 排序的列名 asc|desc limit 起始索引(从0开始),显示几条
limit,分页
-- 角标(起始索引)的算法 : (页码-1)*每页显示的数量
* where 和 having
where 分组之前执行的 , 不能接聚合函数
having 与Group by 结合在一起使用的,分组之后执行的,可以接聚合函数
*where条件的写法:
关系运算符: > >= = < <= != <>
逻辑运算符: and or not
其它运算符:
is null 值为空
is not nll
in(范围) 判断是否满足这个范围条件
between..and.. 是否中区间内
模糊查询: like
_ : 匹配单个字符
% : 匹配任意个数的字符
ifnull(参数1,参数2) 非空判断
表格MultiTable
多表之间的关系: 多张表之间的关系
多表之间的关系约束: 向A表中插入的记录,需要存在于B表中
-- 多表之间的关系,由什么来维护/约束 foreign key 外键约束
-- 添加一个外键约束:
-- 修改 product 这张表 添加 外键约束(cno) 让它参考 category表中的cid字段
alter table product add foreign key(cno) references category(cid);
多表之间的查询:
1.内连接查询:
select * from A , B where A.字段 = B.字段 (隐式内连接)
select * from A inner join B on A.字段 = B.字段 (显式内连接)
2.左外连接:
以左表为基础,查询左表中的所有数据以及右表对应的记录,若右表没有对应的记录,则显示null
select * from A left outer join B on A.字段 = B.字段
3.右外连接:
以右表为基础,查询右表中所有的记录以及左表对应的记录,若左表没有对应的记录,则显示null
select * from A right outer join B on A.字段 = B.字段
子查询: 查询语句中嵌套查询语句
单行子查询: 子查询出来的结果只有一行
关键字: > >= = < <= != <>
多行子查询: 子查询出来的结果有多行
关键字: in , not in , any , all
TRUNCATE,DROP,DELETE的区别
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
TRUNCATE,DELETE,DROP放在一起比较:
TRUNCATE TABLE:删除内容、释放空间但不删除定义。truncate后自增长的ID列也会归零,以后插入记录ID从1开始
DELETE TABLE:删除内容不删除定义,不释放空间。delete后再插入记录,ID会从上次最大的数字开始。
DROP TABLE:删除内容和定义,释放空间。
网友评论