MySQL基础

1 数据库1.1 什么是数据库1.2 数据库分类1.3 MySQL简介2 操作数据库2.1 数据库基本操作2.2 数据库的数据类型2.3 数据库的字段属性2.4 创建数据库表2.5 数据库引擎2.6 修改和删除表3 MySQL数据库管理3.1 外键3.2 DML语言3.3 添加3.4 修改3.5 删除
1 数据库
1.1 什么是数据库
数据库(DB ,DataBase)
作用:储存数据,管理数据
DBMS:数据库管理系统
- 数据库的管理软件
1.2 数据库分类
关系型数据库:(SQL)
- MySQL, Oracle, Sql Server, DB2, SQLite
- 通过表和表之间,列和列之间的关系数据进行存储
非关系型数据库:(NoSQL Not Only SQL)
- Redis, MongDB
- 以对象存储,通过对象的属性来决定
1.3 MySQL简介
- MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于 Oracle旗下产品
- 体积小、速度快、总体拥有成本低
- MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一
2 操作数据库
2.1 数据库基本操作
创建数据库
1CREATE DATABASE [IF NOT EXISTS] test; IF NOT EXISTS 不存在时创建
删除数据库
xxxxxxxxxx11DROP DATABASE [IF EXISTS] test;IF EXISTS存在时删除
使用数据库
xxxxxxxxxx11USE test当数据库中的字段名是关键字时需要加``括起来
查看数据库
xxxxxxxxxx11SHOW DATABASES 查看所有数据库
2.2 数据库的数据类型
数据库的列的数据类型
数值
- tinyint 1个字节
- smallint 2个字节
- mediumint 3个字节
- int 4个字节
- bigint 8个字节
- float 4个字节
- double 8个字节
- decimal 字符串类型的浮点
注:int类型的长度不是保存数据的长度,就算定义int(1)还是能存储到2^32,int(n),长度n表示最大显示宽度,显示宽度与存储大小无关,与zerofull的填充长度有关(与vaechar不同)
在INT(3)的情况下插入100,10,0,结果为:100,010,001
字符串
- char 字符串固定大小 0~255
- varchar 可变字符串 0~65535 String
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1
时间和日期
- date YYYY-MM-DD 日期格式
- time HH:mm:ss 时间格式
- datetime YYYY-MM-DD HH:mm:ss 时间
- timestamp 时间戳 1970.1.1到现在的毫秒 全球统一
- year 年份
null
- 没有值
- 不要使用null进行运算
2.3 数据库的字段属性
数据库的列所携带的属性
Unsigned
- 无符号整型
- 声明后该列不能为负数
zerofill
- 0填充的
- 不足的位数用0来填充
- 定义int(3), value = 5 ,005
自增
- 自动在上一条记录基础上加1
- 通常用来设计唯一的主键,必须为整数类型
- 可以自定义主键自增的起始值和步长

非空 NULL not null
- 设置为非空不赋值就会报错
默认值 default
- 设置默认的值
在项目中推荐必须携带的字段
xxxxxxxxxx51id 主键2`version` 乐观锁3is_delete 伪删除4gmt_creat 创建时间5gmt_update 修改时间
2.4 创建数据库表
creat
x
1-- 表名称和字段名使用``括起来 防止与关键字重名2-- 字符串使用''3-- PRIMARY KEY主键 建议写在后面 方便查看4CREATE TABLE IF NOT EXISTS `student`(5 `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',6 `name` VARCHAR(30) NOT NULL DEFAULT '游客' COMMENT '姓名',7 `password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',8 `sex` VARCHAR(2) NOT NULL COMMENT '性别',9 `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',10 `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',11 `address` VARCHAR(256) DEFAULT NULL COMMENT '家庭住址',12 PRIMARY KEY(`id`)13)ENGINE=INNODB DEFAULT CHARSET=utf8;格式:
xxxxxxxxxx51CREATE TABLE [IF NOT EXISTS] `表名`(2 `字段名` 列类型 [属性] [索引] [注释],3 `字段名` 列类型 [属性] [索引] [注释],4...5)[表类型] [字符集] [注释];xxxxxxxxxx31SHOW CREATE TABLE test; -- 查看创建数据库的语句2SHOW CREATE TABLE student;-- 查看创建数据表的语句3DESC student;-- 查看表的结构2.5 数据库引擎
| MYISAM | INNODB | |
|---|---|---|
| 事务支持 | 不支持 | 支持 |
| 数据行锁定 | 不支持 | 支持 |
| 外键约束 | 不支持 | 支持 |
| 全文索引 | 支持 | 不支持 |
| 表空间大小 | 较小 | 较大 2倍 |
常规使用操作:
- MYISAM 节约空间,速度快
- INNODB 安全性高,事务处理,多表多用户操作
存储:本质文件存储
设置数据库表的字符集编码
MySQL的默认的编码设置为Latin1,不支持中文
- 在创表的时候修改编码
xxxxxxxxxx11CHARSET=utf8- 在my.ini中配置默认的编码
xxxxxxxxxx11character-set-server=utf8建议每次建表都加上编码,修改本地配置会与其他的服务端配置不同步,可能导致同样的建表不同的效果
2.6 修改和删除表
修改
xxxxxxxxxx121-- 修改表名2ALTER TABLE `student` RENAME AS `student1`;3-- 增加新字段4ALTER TABLE `student1` ADD age INT(3);5-- 修改字段属性 6-- MODIFY可以修改所有属性 不能修改字段名7ALTER TABLE `student1` MODIFY age VARCHAR(3);8-- 修改字段名 9-- CHANGE只能修改部分属性 可以修改字段名 一般用来改名10ALTER TABLE `student1` CHANGE age age1;11-- 删除字段12ALTER TABLE `student1` DROP age1;删除
xxxxxxxxxx21-- 删除表2DROP TABLE IF EXISTS `student1`所有的删除操作尽量加上判断
3 MySQL数据库管理
3.1 外键

外键的作用相当于约束,在表1中grade数据必须和表2存在的id数据匹配,否则无法提交修改
1 在创建表的时候添加外键
创建年级表
51CREATE TABLE `grade`(2 `grade_id` INT(10) NOT NULL AUTO_INCREMENT,3 `grade_name` VARCHAR(50) NOT NULL,4 PRIMARY KEY(`grade_id`)5)ENGINE=INNODB DEFAULT CHARSET=utf8;创建学生表
171-- 学生表的grade_id字段引用年级表的grade_id2-- 定义外键3-- 给外键添加约束 4-- 约束 KEY 外键 (字段) 引用 引用的表 (字段)5CREATE TABLE IF NOT EXISTS `student`(6 `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',7 `name` VARCHAR(30) NOT NULL DEFAULT '游客' COMMENT '姓名',8 `password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',9 `sex` VARCHAR(2) NOT NULL COMMENT '性别',10 `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',11 `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',12 `address` VARCHAR(256) DEFAULT NULL COMMENT '家庭住址',13 `grade_id` INT(10) NOT NULL,14 PRIMARY KEY(`id`),15 KEY `FK_grade_id` (`grade_id`),16 CONSTRAINT `FK_grade_id` FOREIGN KEY (`grade_id`) REFERENCES `grade`(`grade_id`)17)ENGINE=INNODB DEFAULT CHARSET=utf8; 查看表可以看到外键

存在被引用关系的表不能直接删除 需要先删除引用表
直接在建表时添加外键容易出现依赖性问题,版本兼容性差,可以使用ALTER语句进行添加约束
2 ALTER添加外键
xxxxxxxxxx21ALTER TABLE `student1` 2ADD CONSTRAINT `FK_grade_id` FOREIGN KEY(`grade_id`) REFERENCES `grade`(`grade_id`);以上为数据库级别的外键,不建议使用,数据库表多之后引用复杂兼容性差
推荐使用:在程序中实现外键
3.2 DML语言
DML语言:数据操作语言
- insert 添加
- update 更新
- delete 删除
3.3 添加
INSERT 语句
基本插入:
x
1-- 插入语句 INSERT2-- 语法:INSERT INTO 表名(字段1,字段2,字段3,...)VALUES (值1,值2,值3,...);3INSERT INTO `grade` (`grade_name`) VALUES ('大一');4-- 不写表的字段名就会默认顺序插入多行插入:
xxxxxxxxxx81-- 语法:INSERT INTO 表名(字段1,字段2,字段3,...)VALUES 2-- (值1,值2,值3,...), --一行3-- (值1,值2,值3,...), --二行4-- ......;5INSERT INTO `grade` (`grade_name`) VALUE 6('大二'),7('大三'),8('大四');插入结果:

3.4 修改
UPDATE 语句
xxxxxxxxxx11-- 修改语句 UPDATE2-- 语法:UPDATE 表名 SET 字段名=修改的值 WHERE id=1;3-- WHERE选择一列 一般用唯一的主键来查找列4-- 不加WHERE进行选择默认修改所有列的值5UPDATE `student1` SET `name`='小明' WHERE id=1;6-- 修改多个字段7UPDATE `student1` SET `name`='小明',`email`='12312321@qq.com' WHERE id=1;WHERE 子句
where 是筛选的条件
| 操作符 | 含义 | 语句 | 结果 |
|---|---|---|---|
| = | 等于 | id=6 | 操作第6行 |
| <>或!= | 不等于 | id<>6 | 操作除了第6行 |
| > | 大于 | id>6 | 操作7~infinite行 |
| < | 小于 | id<6 | 操作1~5行 |
| >= | 大于等于 | id>=6 | 操作6~infinite行 |
| <= | 小于等于 | id<=6 | 操作1~6行 |
| BETWEEN...AND... | 在...之间 | id BETWEEN 2 AND 6 | 操作2~6行 |
| AND | 与 | id<=6 AND id>=2 | 操作2~6行 |
| OR | 或 | name='小明' or name='张三' | 操作名字是小明和张三的行 |