今日分享开始啦,请大家多多指教~
1、什么是MySQL
MySQL是一个关系型数据库管理系统
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
1.2、连接数据库
命令行连接!
数据库xxx语言
DDL 定义
DML 操作
DCL 控制
DQL 查询
1.3操作数据库
操作数据库>操作数据库中的表>操作数据库中表的数据
创建数据库
CREATE DATABASE IF NOT EXISTS school;如果不存在数据库school则创建
删除数据库
DROP DATABASE IF EXISTS hello;如果存在数据库hello则删除
使用数据库
--tab键上面,如果你的表名或者字段名是一个特殊字符,就需要到反引号
USE SCHOOL
1.4、数据库列类型
数值
-
tinyint 十分小的数据 1个字节
-
smalint 较小的数据 2个字节
-
mediumint 中等大小的数据 3个字节
-
==int 标准的整数 4个字节 java的int ==
-
bigint 较大的数据 8个字节
-
float 浮点数 4个字节
-
double 浮点数 8个字节
-
decimal 字符串形式的浮点数 金融计算的时候,一般使用decimal
字符串
- char 字符串固定大小的 0~255
==varchar 可变字符串 0~65535 ** 常用的 String==
-
tinytext 微型文本 2^8-1
-
text 文本串 2^16-1 保存大文本
时间日期
-
date YYYY-MM-DD,日期格式
-
time HH:mm:ss 时间格式
-
==datetime YY-MM-DD HH:mm:ss 最常用的时间格式 ==
timestamp 时间戳 1970.1.1到现在的毫秒值!
- year 年份表示
null
-
没有值,未知
-
注意,不用使用NULL进行运算,跟NULL运算结果为NULL
1.5、数据库的字段属性(重点)
Unsigned:
●无符号的整数
●声明了该列不能声明为负数
zerofill:
●0填充的
●不足的位数,使用0来填充, int(3) , 005
autoincrement:
● 通常理解为自增,自动在上一条记录的基础上+1(默认)
●通常来设计唯一的主键~ index,必须是整数类型
非空 NULL not null
●假如设置为not null,如果不给他赋值,就会报错!
●NULL,如果不填写值,默认就是null!
默认:
●设置默认的值!
●sex,默认值是男,如果不指定该列的值,则会有默认的值!
拓展:
-
id 主键
-
version乐观锁 -
is_delete 伪删除
-
gmt_create 创建时间
-
gmt_update 修改时间
1.6、创建数据库表
格式
常用命令
1.7、数据表的类型
--关于数据库的引擎
INNODB 默认使用
MYISAM 早些年使用的
常规使用操作:
-
MYISAM 节约空间,速度较快
-
INNODB 安全性高,事务的处理,多表多用户操作
在物理空间存在的位置
所有的数据库文件都存在data目录下,一个文件夹就对应一个数据库
本质还是文件的存储!
MySQL引擎在物理文件上的区别
-
INNODB在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
-
MYISAM对应文件
*.frm - 表结构的定义文件
*.MYD - 数据文件(data)
*.MYI - 索引文件(index)
设置数据库表的字符集编码
CHARSET=utf8
不设置的话,会是MySQL默认的字符集编码latin-1(不支持中文)
在my.ini中配置默认的编码
character-set-server=utf8
2、修改删除表
2.1、修改
2.2、删除
--删除表(如果表存在则删除)
DROP TABLE IF EXISTS teacher1
所有的创建和删除操作尽量加上判断,以免报错~
注意点:
-
`反引号,字段名使用这个括起来
-
注释-- /* */
-
sql大小写不敏感,建议写小写
-
所有的符号都用英文!
3、MySQL数据管理
3.1、外键
方式一:在创建表的时候增加约束(麻烦,比较复杂)
删除有外键关系的表的时候,必须先删除引用别人的表(从表),再删除被引用的表(主表)
方式二:创建表成功后,添加外键约束
以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据过多造成困扰)
最佳实现
-
数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
-
我们想使用多张表的数据,想使用外键(程序去实现)
3.2、DML语言
数据库意义:数据存储,数据管理DML语言:数据操作语言
-
INSERT
-
UPDATE
-
DELETE
3.2.1、添加
insert
语法:INsert into 表名(字段名1,字段名2,字段名3,......) values ('值1','值2','值3',...)
注意事项:
1.字段和字段使用英文逗号隔开
2.字段是可以省略的,但是后面的值要一一对应,不能少
3.可以同时插入多条语句,VALUES后面的值需要使用逗号隔开VALUES (),(),......
3.2.2、修改
update 修改谁(条件) set原来的值=新值
条件:where子句 运算符 id等于某个值,大于某个值,在某个区间内修改
-- 通过多个条件定位数据
UPDATE student SET name='长江七号' WHERE name='RYGAR' AND sex='女'
语法:UPDATE 表名 SET 字段名1=‘值1’,字段名2=‘值2’,… WHERE 条件
注意:
-
字段名尽量带上反引号`
-
条件,筛选的条件,如果没有指定,则会修改所有的列
-
值可以是一个具体的值,也可以是一个变量
UPDATE student SET name='孙悟空',password='sunwukong123',birthday=NOW() WHERE name='长江七号' AND password='lisi123'
这个now()和current_time都是当前时间
3.2.3、删除
delete命令
语法:`delete from 表名[where 条件]
TRUNCATE命令
作用:完全清空一个数据库表,表的结构和索引约束不会变!
--清空student表
--语法: TRUNCATE 表名
TRUNCATE student
DELETE和TRUNCATE的区别
相同点:都能删除数据,都不会删除表结构
不同点:
1.TRUNCATE重新设置自增列,计数器会归零
2.TRUNCATE不会影响事务
DELETE删除的问题,重启数据库,现象(MySQL5.0版本有这些现象,但MySQL8.0版本修复了这些问题)
-
INNODB 自增列会从1开始(存在内存当中的,断点即失)
-
MYISAM 继续从上一个自增量开始(存在文件中的,不会丢失)
3.2.4、DQL查询数据(重点)
DQL(Data Query Language:数据查询语言)
-
所有的查询操作都用它SELECT
-
简单的查询,复杂的查询它都能做
-
数据库中最核心的语言,最重要的语句
-
使用频率最高的语句
有的时候,列名字不是那么的见名知意。我们起别名 AS 字段名 AS 别名
去重 DISTINCT
作用:去除SELECT查询出来的结果中重复的数据,只显示一条
-- 查询一下哪些同学参加了考试,成绩
SELECT * FROM result -- 查询全部的考试成绩
SELECT StudentNO FROM result --查询有哪些同学参加了考试
发现有重复数据,去重使用DISTINCT关键词
SELECT DISTINCT studentNo FROM result -- 发现重复数据,去重
查看MySQL版本
SELECT version();
数据库的列(表达式)
数据库中的表达式:文本值,列,null,函数,计算表达式,系统变量…
select 表达式 from 表
3.2.5、where条件子句
作用:检索数据中符合条件的值
搜索的条件由一个或者多个表达式组成! 结果为布尔值
逻辑运算符
| 运算符 | 语法 | 描述 |
|–|--|–|
| and && | a and b / a&&b | 逻辑与,两个都为真,结果为真 |
| or || | a or b / a || b | 逻辑或,其中一个为真,结果为真 |
| Not ! | not a / !a | 逻辑非,真为假,假为真! |
尽量使用英文字母
查询出了1000号学生的成绩
模糊查询:比较运算符
查询姓刘的学生
-- LIKE关键词,%(代表0到任意个字符) _(一个字符)
SELECT StudentNo,StudentName FROM student WHERE StudentName LIKE '刘%';
查询姓刘的学生,姓名为两个字的学生
SELECT StudentNo,StudentName FROM student WHERE StudentName LIKE '刘_';
查询姓刘的学生,姓名为三个字的学生
SELECT StudentNO,StudentName FROM student WHERE StudentName LIKE '刘__';
查询名字包含"嘉"字的学生
SELECT StudentNo,StudentName FROM student WHERE StudentName LIKE '&嘉&';
==IN(具体的一个或者多个值)==关键字查询1001,1003,1003号学生
SELECT StudentNo,StudentName FROM student WHERE StudentNo IN (1001,1002,1003);
查询在安徽的学生和在河南洛阳的学生
查询有出生日期的学生,不为空
SELECT StudentNo,StudentName FROM student WHERE BornDate IS NOT NULL;
查询没有出生日期的学生(为空)
SELECT StudentNo,StudentName FROM student WHERE BronDate IS NULL;
今日份分享已结束,请大家多多包涵和指点!