概念
数据库模型
- mysql 服务器工作模式
- 表类似java中的一个类
- 记录类似java中对象对象
对数据基本操作
- c - 创建数据库表 - insert
- R - 访问数据 - select
- U - 更新数据 - update
- D - 删除数据 - delete
SQL语言特点
- 查询出来的是虚表,并非真是存在的。
- 大小写不敏感。
- 可以起别名,列名,表名。
mysql数据特点
- 本地磁盘有直接的目录直观体现。
- 数据库中有多张表,多个表为一个文件
- 表中多个列, 多个记录
- 常见客户端
- mysql客户端
- jdbc
- 数据库对象
- 数据库,表,列,约束,索引,存储过程,视图,触发器,事件,函数,预编译
- DDL,数据定义语言:操作数据库相关语言
- DML,数据操作语言, CRUD操作,create,select,updata,delete
具体知识点
- 变量,sql语法中的变量和java类似
- 函数
- 单行函数:作用于集合中的每一行数据
- 多行函数,组函数,聚集函数,结果只有一个。
- max,min,sum,avg,count等统计运算.
- 主键
- 执行顺序
- from, join, on, where, group by, select, having, order by, limit
- 先确定基表
- 联接基本
- 内联外联
- 有联接必须有条件on
- 过滤行 where
- 分组 group by
- select 后面加上, 后面需要什么
- 过滤表having
- 排序order by;
- 分页显示
- 子查询
- 查询中嵌套查询
- 先查询子查询
- where 条件里面括起来
- 子查询的结果被主查询
- 子查询结果就是虚表,可以进行联接,比较,查询等。
- 解决一次查询不能解决问题的情况,子查询先于主查询执行
- 关键字
- in, 等于列表任意一个值
- any, 任意一个
- all, 全部
- innodb 是数据库引擎
- innodb 支持事务,外键等高级特性,是当前默认引擎,速度较快,
- myisam 不支持事务,不支持外键,是早期默认引擎,速度超快, 一个表三个文件
- 每个表支持设置数据引擎类型,show可查看所有引擎,show create可查看当前表引擎
- 创建表
- 基于子查询建表,把虚表变实表
- 表复制,只能复制列和数据,不能复制主键和外键
- 表克隆
- create table country4 like wold.country;
- alter table:修改表结构
- 添加列,alter table 表名 add 新列名 数据类型 其他类型
- 修改列,alter table 表名 modify 列名 新数据类型 新长度 新其他选项
- 丢弃列,alter table 表名 drop 列名;
- 重命名列,alter table 表名 change 老列名 新列名 新数据类型 新长度新选项
- 修改表名,alter table 表名 rename to 新表名
- 表中数据类型
| | 定常字符串 | 变长字符串 | 双精度浮点 | 定点数 | 日期 | 时间 | 日期时间 | 超大文本 |
- 事务 : 一系列的DML语句被当作一个整体来处理执行, 如果全部执行成功, 就可以提交, 如果有任何失败,就要回滚, 全部失败
- 启动事务
- set autocommit = false; // 设置自动提交为假
- start transaction; 或 begin;
- 结束事务
- commit;成功, rollback; 失败 (DCL - 数据控制语言)
- 执行了一个DDL语句, 事务提交(成功)
- 会话正常结束, 事务提交(成功)
- 出现异常, 事务回滚(失败)
- 预编译 :
- 预编译 :提高效率和便于使用prepare 预编译体名称 from 'SQL';
- 创建预编译
prepare
p1
from
'select * from teacher';
- 执行预编译
execute 预编译体名称;
- 丢弃预编译
drop prepare 预编译体名称;
- 约束
- not null 表示非空,必须是列级约束, 一张表中可以有多个非空键
- unique 表示唯一,可以是列级也可以是表级, 允许有null值, 并且一张表中可以多个唯一键
- primary key 表示主键, 可以是列级也可以表级, 一张表中必须只能有一个主键.
- 外键约束时, 默认情况下父表中的被引用的记录不可以删除
- 在添加外键时,可以指定父表中被引用的记录的处理选项
alter table classes
add constraint myfk2 foreign key(master) references teacher(id) on delete [do nothing(默认选项)][cascade(级联), set null(设置为null)];
具体命令汇总
登陆,改密
- set password for 'root'@'locahost' = password('123456');
- mysql -uroot -p123456
数据库操作
- show databases ;
- show tables from 数据库名;
- create database 数据库名;
- use 数据库名;
- source d:/mywork/mysql/company.sql;
- drop database 数据库名;
- set names gbk;
- ``:飘号,对数据库名进行包围;
- select database();
表操作
- show tables;
- show tables from 数据库名;
- show create table 表名;(查看表的最详尽信息)
- show engines;
- show create talbe 表名;
- describe 表名;
- desc 表名;
- desc 库名.表名;
- create
- create table customer( id int, name varchar(20), age int, phone varchar(20) );
- create table country4 like wold.country;
- insert into country4 from select * from wold.country;
- create select ...
- drop table 表名;
- 表一旦丢弃 ,和表相关的所有对象都消失, 所有数据全消失.
- truncate table 表名, 清空表,是一个DDL语句, 不能撤销, 但是效率高, 速度快, 直接释放空间.
- if exists 表示存在,if not exists 表示不存在
- drop table if exists 表名1,表名2, ...;
- 修改表结构
- alter
- alter database school charset utf8;
- create database if not exists school charset gbk;
- primary key 是主键约束,非空加唯一组合
- 添加主键, 丢弃主键,
- add primary key(主键的列名) drop primary key();
- 添加列,alter table 表名 add 新列名 数据类型 其他类型
- 修改列,alter table 表名 modify 列名 新数据类型 新长度 新其他选项
- 丢弃列,alter table 表名 drop column 列名;
- 重命名列,alter table 表名 change 老列名 新列名 新数据类型 新长度新选项
- 修改表名,alter table 表名 rename to 新表名
- alter table classes
add constraint myfk2 foreign key(master) references teacher(id) on delete [do nothing(默认选项)][cascade(级联), set null(设置为null)];
数据操作
- CRUD,create 添加数据,read读取数据,update修改数据,delete删除数据
- insert
- insert into 表名(列名1, 列名2, ...) values(值1, 值2, ....);
- insert into 表名 from (select * from 表名 where 筛选条件)
- update
- update 表明 set 列名1 = 新值1, ...where 过滤行;
- delete
- delete from 表名 where 过滤行;
- select
- ///select表达式///
- select * from 表名 where 限制条件
- as: 给列起别名,as关键字可以省略,如果别名中有空格, 必须用""包围起来
- like, _, %, 仅限字符串
- between and;
- in(数据列表)
- and,or,not,逻辑运算符
- =,>,<,>=,<=,比较运算符,
- 普通运算结果为0表示假, 非0表示真
- 多表联接
- distinct
- order by
- select扩展操作
- select database(); 查看当前工作数据库
- select version(); 查看服务器版本
- select now(); 查看服务当前时间
- select database(), version(), now() from 数据库名; 多查询个信息,并查询其他库
- select 100, 'abc'; 查看常量
- select 123-5/35216*464114+55266; 查看表达式
- select @ab; 查看变量
- 变量,sql语法中的变量和java类似
- 声明,无数据类型,弱类型:
- 查询
- 表联接
- 分页 :
select * from tablename limit (页码 - 1) * 每页记录数, 每页记录数;