数据库分类
关系型数据库
- (MySQL,Oracle,Sql Server)
- 通过表和表之间,行和列之间的关系进行数据的存储
非关系型数据库
- (Redis,MongDB)
- 对象存储,通过对象的自身属性来决定
数据库语言 CRUD
DDL 定义
DML 操作
DQL 查询
DCL 控制
操作数据库
[]内为可写,可不写
1、创建
CREATE DATABASE [IF NOT EXISTS] firstTable
2、删除
DROP DATABASE [IF EXISTS] firstTable
3、使用
USE secondTable
4、查看
SHOW firstTable
SHOW DATABASE
数据库的列类型
数值
- tinyint 十分小的数据 1个字节
- smallint 较小的数据 2个字节
- mediumint 中等大小的数据 3个字节
- int 标准的整数 4个字节
- bigint 较大的数据 8个字节
- float 浮点数 4个字节
- double 浮点数 8个字节 (精度问题)
- decimal 字符串形式的浮点数 (金融计算)
字符串
- char 字符串固定大小的 0~255
- varchar 可变字符串 0~65535 常用的 String
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1 保存大文本
时间日期
java.util.Date
- date YYYY-MM-DD, 日期格式
- time HH:mm:ss 时间格式
- datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
- timestamp 时间戳,1970.1.1到现在的毫秒数,也较为常用
- year 年份表示
null
- 没有值,未知
- 注意,不要使用NULL进行运算,结果为NULL
数据库的字段属性
Unsigned
- 无符号的整数
- 声明了该列不能声明为负数
zerofill
- 0填充的
- 不足的位数,使用0来填充,int(3), 5—005
自增
- 通常理解为自增,自动在上一条记录的基础上+1(默认)
- 通常用来设计唯一的主键~index,必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空 NULL not null
- 假设设置为 not null ,如果不给他赋值,就会报错
- NULL ,如果不填写值,默认就是null
默认
- 设置默认值
- sex,默认值为男,如果不指定该列的值,则会有默认的值
操作表
1、创建数据库表
AUTO_INCREMENT 自增
PRIMARY KEY 主键,一般一个表只有一个唯一的主键
--创建表student
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`address` VARCHAR(100) DEFAULT NULL COMMENT '住址',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
数据表的类型
INNODB 默认使用~
MYISAM 早些年用
2、修改和删除表
修改
change用来字段重命名,不能修改字段类型或约束
modify不能用来重命名字段,只能修改字段类型和约束
--修改表名:
ALTER TABLE student RENAME AS studentNew
--增加表的字段:
ALTER TABLE studentNew ADD age INT(11)
--修改表的字段(重命名,修改约束)
ALTER TABLE studentNew MODIFY age VARCHAR(11)
ALTER TABLE studentNew CHANGE age ageNew INT(1)
--删除表的字段
ALTER TABLE studentNew DROP ageNew
删除
--删除表
DROP TABLE IF EXISTS studentNew
操作表
外键
创建表的时候没有外键关系
ALTER TABLE `student`
ADD CONDTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
创建表的时候添加外键约束
数据库的意义:数据存储,数据管理
DML语言:数据库操作语言
1、添加:insert
INSERT INTO `student`(`name`) VALUES('张三'),('李四')
INSERT INTO `student`(`name`,`pwd`,`sex`)VALUES('张三','a123456','男')
INSERT INTO `student`(`name`,`pwd`,`sex`)VALUES('张三','a123456','男'),('lisi','222222','男')
2、修改:update
--修改学员名字,带了简介
UPDATE `student` SET `name`='tt' WHERER id=1
--不指定条件的情况下,会改动所有的表
UPDATE `student` SET `name`='ttttt'
--修改多个属性,逗号隔开
UPDATE `student` SET `name`='tt',email='208743678326@qq.com' WHERER id=1
--通过多个条件定位数据
UPDATE `student` SET `name`='ttttt' WHERE `name`='llll' AND sex=`女`
3、删除:delete
--删除数据(避免这样写,会全部删除)
DELETE FROM `student`
--删除指定数据
DELETE FROM `student`WHERE id =1
TRUNCATE命令
作用:完全清空一个数据库表,表的结构与索引不变
--清空student表
TRUNCATE `student`
delete和TRUNCATE区别
- 相同点:都能删除数据,都不会删除表结构
- 不同:
- TRUNCATE 重新设置,自增列,计数器会归零
- TRUNCATE 不会影响事务
DQL(Data Query Language)语言:查询数据
--查询全部
SELECT * FROM student
--查询指定字段
SELECT `name`,`sex` FROM student
--别名,给结果起一个名字 AS 可以给字段起别名,也可以给表起别名
SELECT `StudentNo` AS 学号,`StudentName` AS 学生姓名 FROM student AS s
--函数Concat(a,b)拼接查询结果
SELECT CONCAT('姓名:',StudentName) AS 新名字 FROM student
查询去重
SELECT DISTINCT `StudentNo`FROM result
数据库的列(表达式)
Where子句之逻辑运算符
模糊查询运算符
联表查询JoinON
分页和排序
以下语法顺序不能颠倒
分页limit
排序order by
升序ASC,降序DESC
子查询和嵌套查询
子查询
本质:在where语句中嵌套一个子查询语句
where (select * from)
MySQL函数
常用函数
聚合函数
函数名称 | 描述 |
---|---|
COUNT() | 计数 |
SUM() | 求和 |
AVG() | 平均值 |
MAX() | 最大值 |
MIN() | 最小值 |
拓展之数据库级别的MD