操作库
- 创建数据库
create database database_name [if not exists database_name]; - 查看数据库
查看全部数据库
show database;
使用数据库
use database_name
查看数据的创建:(可以查询数据库字符集使用)
show create database database_name;/create database …/
charset=utf-8 - 修改数据库(一般情况下不会修改数据库)
alter database database_name character set gbk;
为什么不会经常修改数据库?
软件工程分析
- 可行性分析–收益,法律要求
- 需求分析–分析软件有哪些功能
- 总体设计–设计数据库和表格结构和功能涉及的字段.
- 详细设计–指定功能的实现内容,和数据库表格中数据的规范.
- 代码实现
- 测试
- 上线
- 线上维护
- 删除数据库
drop database database_name
操作表
- 创建表
create table table_name(
id int,
name varchar(20)
);
- 字段类型
数值型 int(11)[默认是11,通常不用设置],double float tinyint smallint bigint
字符串
char(20)查询效率较快.char指定的字段创建为定长,在查询的时候只需要读取固定长度的数据即可.如果只存储2个字符的数据,占据的存储空间仍然是20个字符.
varchar(20)查询效率较慢.varchar比char类型更加节省空间,虽然指定存储空间是20个字符,但是真正在存储数据的时候只会占数据本身的长度,不会占用其他剩余的空间,所以相对来说varchar更加节省空间.
日期型
data time datetime timestamp(时间戳)
大数据类型
逻辑型
bit - 约束-键
primary key 主键 唯一性和非空性.
auto_increment 自动增长.
主键可以是任意类型字段,但是并不会自动增长,只有在主键字段为数值型的情况下,才可以设置为自动增长.
如果一个字段为自动增长的字段,那么这个字段一定会作为主键使用.
一个表格一般情况下都会设置一个主键,利用主键可以提升效率.
not null 非空
unique 唯一约束
foreign key 外键.
- 查询表
- 查询当前数据库中所有的表格:show tables;
- 查询当前表的创建语句:show create table table_name;
- 数据库引擎:InnoDB(支持事务),MyIsam(不支持事务)
- 修改表
alter table table_name add/drop/modify name varchar(20)
alter table table_name change name username varchar(20)
~rename table emp to employee;
操作表数据
- 数据的操作
增删改查 CRUD
插入数据:insert into table_name values(column_name,column_name…);
在插入数据时需要确定表名后的字段顺序,以便在values后按照指定的字段顺序书写对应值.
注意:
插入数据的类型和字段类型要匹配.
插入数据的长度不能超过字段要求的长度.
字符串和日期类型的数据需要使用单引号或者双引号(英文符号)引起来. - 删除数据
delete from table_name; 删除整张表中的数据.
truncate table_name; 删除整张表,包括表结构.auto_increment从头计数
truncate效率相比delete from 更高
如果是多表,多表之间存在表间关系,直接truncate删除表可能会导致表间关系不再存在.
delete from table_name where id=1
delete from table_name where id>1 - 更新数据
update table_name set column_name=value;更新整张表中的字段数据.
update table_name set column_name=value where name=‘xxx’; - 查询
select * from table_name;
select column_name,… from table_name;
以上两者的查询方式,如果在有索引的情况下,效率相同.只是直接书写全部字段名称查询速度相对比书写要稍高一些,这个速度可以忽略.
- 别名:
select math+english as sum from exam;
select math+english sum from exam e - 查询条件
where 包含的条件
等值查询 =
范围查询 >,<,>=,<=,<>,like,in(),is null - order by 子句
对查询结果排序
order by 在sql语句书写时要放在最后.
order by 是所有关键字中最后一个执行的关键字.
select * from exam where name=‘xx’ order by name=‘xxx’;
order by 子句一定要慎用.因为任何查询使用这个关键字后,查询效率都会降低. - 聚集函数
count 计数
记录某一个字段在表中有几行.
select count(|coumn_name)from table_name;
select count(1)from table_name; 对1当成一个字段
count某一字段比count效率略高一 点.
在表格中字处的数量较少的情况下(不超过10个),可认为效率是一致的.
sum 求和
avg 平均
max 最大值
min 最小值 - group by 分组
group by column_name根据指定的字段名称分组
select count(*) from table_name group by id 根据id分组后,再对各组计数.
where和having区别:where在分组前进行条件过滤,having在分组后进行条件过滤.使用where的地方都可以使用having替换.但是having可以使用分组函数,而where后不可以使用. - case when then else end
select gender case gender when 1 then ‘男’ when 2 then ‘女’ else ‘N/A’ end;
表间关系.
三种表间关系
1对1
1对多
多对多
笛卡尔积查询
结果数据量=左表数量*右表数量
select * from table_name1,table_name2
select * from table_name1,table_name2 where table_name1.id=table_name2.tid
内连接查询
在笛卡尔积查询的基础之上获取左边有且右边表也有的数据.
select * from from dept d inner join emp e on d.id=e.dept_id;
事务
一个事情可以分为多个步骤,这些步骤要么全部成功,要么全部失败,这件事情就可以称之为一个事务.
数据库cmd窗口控制事务
mysql数据库拥有默认的事务能力,一个sql语句,就是一个事务.
start transaction 开启事务
commit 提交事务
rollback 回滚事务
程序控制事务
JDBC-一套接口
mysql – jar
oracle --jar
conn.setAutoCommit(boolean):true则一句sql就是一个事务,一句sql提交一次.false 关闭自动提交,意味着开启事务.
conn.commit() 提交事务
conn.rollback() 回滚事务
conn.setSavepoint() 设置一个保存点