数据库(DB,DataBase)
概念:数据仓库,软件,安装在操作系统上,SQL可以存储大量的数据
作用:存储数据,管理数据
关系型数据库L(SQL)
DBMS(数据库管理系统)
Mysql是一个关系型数据库管理系统
前属于MysqlAB公司,现属于Oracle旗下产品
Mysql是最好的RDBMS应用软件之一,开源的数据库软件
体积小、速度快、成本低
操作数据库----操作数据库中的表-----操作数据库中表的数据
mysql关键字不区分大小写
1.创建数据库
Create Database [if not exists] student
2.删除数据库
drop database [if exists] student
3.使用数据库
use student
4.查看数据库
show databases
数值:
字符串:
时间日期:
null:
Unsigned:
zerofill:
自增:
非空:NULL not null
默认:
-- 目标:创建一个school数据库
-- 创建学生表(列,字段) 使用SQL创建
-- 学号int 登陆密码varchar(20) 姓名、性别varchar(2),出生日期(datatime),家庭住址,email
-- 注意点,使用英文(),表的名称和字段尽量使用·· 括起来
-- AUTO_INCREMENT 自增
-- 字符串使用,单引号括起来
-- 所有的语句后面加,
-- PRIMARY KEY主键,一般一个表只有一个唯一的主键!
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
格式:
Create table [if not exists] `表名`(
`字段名` 列类型 [属性] [索引] [注释],
)[表类型][字符集设置][注释]
常用命令:
show create database school --查看创建数据库的语句
show create table student -- 查看student数据表的定义语句
desc student --显示表的结构
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
常规操作:
修改:
-- 修改表名 alter table 旧表名 rename as 新表名
alter table teacher rename as teacher1
-- 增加表的字段 alter table 表名 add 字段名 列属性
alter table teacher1 add age int(11)
-- 修改表的字段(重命名,修改约束)
-- alter table 表名 modify 字段名 列属性[]
alter table teacher1 modify age varchar (11) --修改约束
-- alter table 表名 change 旧名字 新名字 列属性[]
alter table teacher1 change age age1 int(1) --字段约束名
-- 删除表的字段
-- alter table 表名 drop 字段名
alter table teacher1 drop age1
删除:
-- 删除表(如果表存在再删除)
drop table if exists teacher1
注意点:
数据库意义:数据存储,数据管理
DML语言:数据操作语言
insert:
insert into 表名([字段1,字段2,字段3]) values('值1'),('值2'),('值3')
注意:
update:
update 表名 set colnum = value where [条件]
条件:where 子句,运算符 id等于某个值或在某个区间
注意:
delete:
delete from 表名 [where 条件]
(Data Query Language:数据库查询语言)
-- 查询全部的学生
SELECT * FROM student
-- 查询指定字段
SELECT `studentno`,`studentname` FROM student
-- 别名 as
SELECT `studentno` AS 学号,`studentname` AS 姓名 FROM student
-- 函数 Concat(a,b)
SELECT CONCAT('姓名:',studentname) AS 新名字 FROM student
语法:
Select 字段 from 表
去重:distinct
去除select查询结果重复的数据
-- 查询全部考试成绩
select * from result
-- 查询那些同学参加
select `studentno` from result
-- 去重
select distinct `studentno` from result
作用:检索数据中符合条件的值
搜索的条件由一个或多个表达式组成,结果 布尔值
排序:asc(升),desc(降)
分页: limit(查询起始下标,pageSize)
嵌套使用
主要就是Having
MD5:主要增强算法复杂性和不可逆性
MD5不可逆,具体的值和MD5是一样的
MD5破解网站的原理,背后有一个字典,MD5加密后的值
事务原则:ACID 原子性,一致性,隔离性,持久性
原子性(Atomicity)
要么成功要么失败
一致性(Consistency)
事务前后的数据完整性要保证一致
**持久性(Durability)**事务提交
事务一旦提交则不可逆,被持久化到数据库中
隔离性(Isolation)
事物的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间相互隔离
隔离导致:
脏读:指一个事务读取了另外一个事务未提交的数据
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同
虚读(幻读):旨在一个事务中读取到了别的事务插入的数据,导致前后读取结果不一致
-- mysql是默认开启事务自动提交的
SET autocommit = 0 -- 关闭
SET autocommit = 1 -- 开启(默认)
-- 手动处理事务
SET autocommit = 0 -- 关闭自动提交
-- 事务开启
START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务中
INSERT xx
INSERT xx
-- 提交:持久化(成功)
COMMIT
-- 回滚:回到原来的样子(失败)
ROLLBACK
-- 事务结束
SET autocommit = 1 -- 开启自动提交
Mysql官方定义:索引是帮助Mysql高校获取数据的数据结构
在一个表中,逐渐索引只能有一个,唯一索引可以有多个
索引在小数据量的情况下作用不大,但在数据量的时候很有用
索引的数据结构
Hash类型的索引
Btree:InnoDB的默认数据结构
SQL yog可视化管理
SQL命令操作
用户表:mysql.user
本质:读这张表进行增删改查
为什么备份?
mysqldump -h 主机 -u 用户名 -p 密码 数据库 表名 物理位置
糟糕的数据库设计:
软件开发中关于数据库的设计
为什么要数据规范化?
三大范式
第一范式(1NF)
原子性:保证每一列不可再分
第二范式(2NF)
前提:满足第一范式,每张表只描述一件事情
第三范式(3NF)
前提:满足第一范式和第二范式
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能直接相关
关联查询的表不能超过三张表
驱动:声卡、显卡、数据库
SUN公司为了简化开发人员对数据库的操作,提供了一个Java操作数据库的规范,称为JDBC
java.sql
javax.sql
mysql-connector-java.jar包