Mysql分类、SQL语句1☞CRUD、条件查找、模糊查询

初识Mysql

前端(页面:展示数据)

后台(连接点:连接数据库JDBC,连接前端(控制试图跳转,给前端传递数据))

数据库(存数据,TXT,Excel,word)

学好数据库,操作系统,数据结构与算法,离散数学,数字电路,体系结构,编译原理,实战经验

为什么学数据库

  1. 岗位需求

  2. 现在的世界,大数据时代,数据可以变现,得数据者得天下

  3. 被迫需求:存数据

  4. 数据库是所有软件体系中最核心的存在 DBA

什么是数据库

数据库(DB,DataBase)

概念:数据仓库,软件,安装在操作系统(window,Linux)之上,SQL,可以存储大量的数据

作用:存数据,管理数据

数据库分类

关系型数据库(行,列)SQL

MySQL,Oracle,SQL server,DB2。。

通过表和表之间,行和列之间的关系进行数据的存储

非关系型数据库(key,value)NoSQL(not only sql)

Redis,MongDB

对象存储,通过对象的自身的属性来决定

数据库管理系统DBMS

数据库的管理软件,科学有效的管理,维护和获取数据

Mysql简介

MySQL是一个关系型数据库管理系统,

前世:瑞典MySQL AB公司,今生:Oracle旗下产品

所使用的SQL语言用于访问数据库的最常用标准化语言

体积小速度快,总体拥有成本低

适用于大中小型网站

安装建议:

  1. 尽量不要使用exe(不好卸载)

  2. 尽可能使用压缩包

SQL语句

每个sqlyog的执行操作,本质就是对应了一个sql,可以在软件的历史记录中查看

命令行连接数据库:(所有语句用分号结尾)

mysql -uroot -proot;-- 连接数据库
show databases;查看所有数据库
use school;切换数据库
show tables;查看所有表
describe student;显示数据库中所有表的信息
create database one;创建表
exit;退出连接
-- 单行注释
/*多行注释*/

DDL(Data Definition Language):数据库定义语言,如:create table之类

DML(Data Manipulation Language):数据库操作语言,如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD操作(新增Create、查询Retrieve、修改Update、删除Delete)

DQL(Data Query Language):数据库查询语言,SQL不区分大小写

DCL(Data Control Language)数据库控制语言,如grant、deny、revoke等,只有管理员才有相应的权限

操作数据库》操作数据库中表》操作数据库中表的数据

创建数据库

create database [if not exists] 数据库名

删除数据库

drop database [if exists] 数据库名

使用数据库

use `数据库名` -- 如果表名或者字段名是一个特殊字符,需要带``(table键上面的点,注意是英文状态)

查看数据库

show databases;-- 查看所有数据库

数据库的列类型

数值

tinyint十分小的数据 1字节

smallint较小的数据 2字节

mediumint 中等大小 3字节

int 标准的整数 4字节

big 较大的数据 8字节

float 单精度浮点数 4字节

double 双精度浮点 8字节

decimal 字符串浮点 金融计算一般使用

字符串

char 字符串固定大小 0-255

varchar 可变字符串 0-65535

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

没有值,未知

数据库的字段属性

Unsigned 无符号整数,不能声明为负数

zerofill:零填充,不足的位数使用零填充 int(3)5---005

自增autoincrement,自动在上一条记录的基础上加1,通常用来设置唯一主键,必须是整数类型,可以自定义设置主键自增的起始值和步长

null和notnull

null,默认为null

notnull,不能为空

每一个表都必须存在以下五个字段,未来做项目,表示一个记录存在的意义:

id主键

version 乐观锁

is_delete伪删除

gmt_create 创建时间

gmt_update 修改时间

创建表

create table if not exists 数据表名 创建数据表尽量用``括起来

字符串一般使用单引号,创建表格式时所有语句后面加英文逗号,最后一个不加

主键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] 表名(
字段名 列类型【属性】【索引】【注释】
)【表类型】【字符集设置】【注释】
SELECT VERSION()查询版本
show create database 数据库名,查询创建数据库的语句
show create table 数据表名,查询创建数据表的语句
desc 数据表名,显示数据表结构

数据表的类型

关于数据库的引擎

INNODB默认使用

MYISAM早些年使用

MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为2倍
常规使用操作节约空间速度快安全性高,事务的处理,多表多用户操作
物理文件在数据库表中只有一个*.frm,以及上级目录下的ibdata1文件

*.frm-表结构的定义文件

*.MYD数据文件(data)

*.MYI索引文件(index)

所有的数据库文件都存在于data目录下,本质还是文件的存储

设置数据库的字符集编码,不设置,默认使用字符编码Latin1(不支持中文)

CHARSET=utf8

或在my.ini中配置默认的编码character-set-server=utf8(不支持配置,会导致交接时对方没有配置,报错)

修改表名

alter table 旧表名 rename as 新表名 
alter table teacher rename as teacher1

增加表的字段

alter table 表名 add 字段名  字段列属性  
alter table teacher add age  int(3)

修改约束

alter table 表名 modify 字段名 字段属性  
alter table teacher modify age  varchar(3)

字段重命名

alter table 表名 change 旧字段名  新字段名  字段属性
alter table teacher change age age1 varchar(3)

删除表的字段

alter table  teacher  drop age1

删除表

drop table if exists 表名

所有创建删除尽量加上判断语句if exists/if not exists

字段名/表名加``包裹(英文状态table键上面的点)

MySQL数据管理

外键

定义外键,给外键添加约束

在创建表时增加外键

CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`gradeid` INT(10) NOT NULL COMMENT '年级',
PRIMARY KEY(`id`),
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

创建表时没有外键关系

alter table `student` add constraint `fk_gradeid` 
foreign key(`gradeid`) references `grade`(`gradeid`)

alert table 表 add constraint 约束名 foreign key(作为外键的列) reference 那个表(那个字段)

以上的操作都是物理外键,数据库级别的外键,不建议使用

删除有外键关系的表,先删除引用别人的表(从表),再删除被引用的表(主表)

DML语言数据操作语言(全部记住)

insert into 表名(字段1,字段2...)values('值1','值2',...)
-- 如果不写表的字段会一个一个匹配一个字段插入多个值
insert into 表名(字段名)values(`值1`),(`值2`)
INSERT INTO `student` (`name`) VALUES('小可爱'),('小美女')
INSERT INTO `student` (`name`,`pwd`) VALUES('小可爱','520'),('小美女','1314')

insert总结:

语法:insert into 表名([字段名1,字段名2]) values('值1','值1'),('值2','值2')

注意事项:字段和字段间用英文逗号隔开;字段可以省略,但后面的值必须要一一对应;可以同时插入多条数据,values后面的值需要使用英文逗号隔开,每条数据括号包住逗号隔开

update

UPDATE `student` SET `name`='小可爱最漂亮' WHERE id=2

语法:update 表名 set 字段名=新 where判断条件

修改多个属性逗号隔开

UPDATE `student` SET `name`='小可爱最漂亮',`pwd`=5201314 WHERE id=4

where条件子句

作用:检索数据中符合条件的值

操作符含义范围结果
=等于
<>或!=不等于
>
<
>=
<=
between  and在范围内,包括[2,5]
and &&false
or||true
运算符语法描述
and   &&a and b    a&&b逻辑与,两个都为真,结果为真
or  ||a or b    a||b逻辑或,其中一个为真,则结果为真
not !not a    !a逻辑非,真为假,假为真
SELECT * FROM 表名 WHERE 字段名>5 AND 字段名<10
SELECT * FROM 表名 WHERE 字段名1=6 AND 字段名2=1314(两个都符合才出结果)
SELECT * FROM 表名 WHERE 字段名1=7 OR 字段名2=9(两个符合其中一个就出结果)
SELECT * FROM 表名 WHERE 字段名!=5

模糊查询

运算符语法描述
is nulla is null如果操作符为null,结果为真
is not nulla is not null如果操作符不为null,结果为真
likea like bSQL匹配,如果a匹配b,结果为真
ina in(a1,a2,a3...)a在a1,a2,a3...之中某一个,则结果为真
SELECT 字段名或* FROM 表名 WHERE `字段名1` IS NULL
SELECT 字段名或* FROM 表名 WHERE `字段名` IS NOT NULL
SELECT * FROM 表名 WHERE `字段名` LIKE '%小%'(包含小的,百分号两边加引号)
SELECT * FROM 表名 WHERE `字段名` LIKE '%亮'(以亮结尾的)
SELECT * FROM 表名 WHERE `字段名` LIKE '大%'(以大开头的)
SELECT * FROM 表名 WHERE `字段名` LIKE '______'(字段名为六个字的)
SELECT * FROM 表名 WHERE `字段名` LIKE '小_____'(以小开头字段名为六个字的)
SELECT * FROM 表名 WHERE `字段名` LIKE '_____亮'(以亮结尾字段名为六个字的)
SELECT * FROM 表名 WHERE `字段名` IN(6,8,10)(查询字段名为6或8或10的数据,一个或多个值的查询)

delete

delete from 表名 where条件

清空表truncate `student`

delete & truncate

相同点:都能删除数据,都不会删除表结构

不同点:truncate 重新设置自增列,计数器会归零;truncate不会影响事务

了解:delete删除问题,重启数据库,现象

INNODB:自增列会重1开始(存在内存当中的,断电即失)

MyISAM:继续从上一个自增量开始(存在文件中,不会丢失)

DQL查询数据(最重点)

select * from 表名----查询全部

select `字段名` as 学号,`字段名` as 学生姓名 from 表名   as(别名,可以给字段取名字,也可以给表取)

SELECT VERSION()                查询系统版本(函数)

SELECT 100*222 AS 计算结果             用来计算(表达式)

SELECT @@auto_increment_increment          查询自增步长(变量)

SELECT `pwd`+22 AS 加分 FROM student            pwd加22后查看

SELECT CONCAT('姓名:',`name`) AS 美女排行榜 FROM student(查询到字段名为name的数据并改名为美女排行榜,给每个数据前拼接`姓名:`)

去重 distinct

SELECT DISTINCT `name` FROM student (查询有几个name,相同name只显示一次)

数据库中的表达式:文本值、列、null、函数、计算表达式、系统变量。。。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值