数据库笔记一

数据库

数据库(DataBase db,dba数据库管理员)

数据库方便存储和管理数据,按照特定的规则存储在磁盘上,就是一个存储数据的仓库。

数据库管理系统(DataBase Management System,DBMS)

数据库管理软件,用于创建和管理DB。

MySQL数据库

MySQL是一个关系型数据库管理系统,最早是由瑞典的MySQLAB公司开发,目前在Oracle旗下,是流行的数据库管理系统。

关系型数据库

以数据表为单位,表与表之间存在关联关系

例如:

用户表

商品表

订单表 用户编号,商品编号。

非关系型数据库 redis

缓存 key:value;

sql :结构化查询语言简称(SQL)

是一种特殊的编程语言,用于对数据库管理操作和数据的增删改查操作。是一种标准的数据库操作语言,一般的数据库管理系统都支持(一些语法上略有不同)

在sql语言中根据操作不同,又分为不同的类型的sql语句:

1.DDL:数据(结构)定义语言,

创建和删除数据库表结构的语言

常用语句:create ,alter,drop,rename。

-- 创建数据库
CREATE  DATABASE test;
-- 创建数据库,并修改字符集编码
CREATE DATABASE test CHARSET utf8;
-- 创建数据库,并改变数据库的基本字符集,并判断数据库是否存在。
CREATE DATABASE IF NOT EXISTS test CHARSET utf8;

-- 删除数据库
DROP DATABASE test;

-- mysql数据库创建后就无法修改,只能修改字符集编码
ALTER DATABASE test CHARSET utf8;
数据库表

表(table)是数据存储的最常见和最简单的形式,是构成关系型数据库的基本元素。

表的最简单形式是由行和列组成,分别都包含着数据。 每个表都有一个表头和表体,表头定

义表名和列名 .表中的行被看作是文件中的记录,表中的列被看作是这些记录的字段。

创建表的步骤:

1.确定表名,2.确定列名,

列的数据类型:

字符串型:

char(n):长度为n的定长字符串。

varchar(n):最大长度为n的变长字符串。

日期时间类型:

date 日期--年月日; datetime 时间--年月日 时分秒。

数值类型:

整数:

TINYINF 1;

SMALLINT 2;

MEDIUMINT 3;

INT 4;

BIGINT 8;

signed 有符号(默认有符号)

unsigned 无符号。

浮点数:

decimal(M,D)

M:精度,数据的总长度;

D:标度,小数点后的长度

TEXT列字符字符串:

长文本类型,例如存储新闻信息,小说...

有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。

TINYTEXT:最大长度255个字符 (2^8-1)

TEXT:最大长度65535 (2^16-1)

MEDIUMTEXT:最大长度16777215 (2^24-1)

LONGTEXT最大长度4294967295 (2^32-1)

列的约束:列的规则。

创建表的语法。

/*
约束条件:
COMMENT'___',给定一个注释。
PRIMARY KEY 设定为主键
AUTO_INCREMENT 无法输入,自动增加。
NOT NULL  输入不能为空
DEFAULT'___',给定默认值.
CHECK(列名<___),判断是否满足条件。
UNIQUE  唯一,不能重复
*/
CREATE TABLE student(
ID INT PRIMARY KEY AUTO_INCREMENT COMMENT'学号 主键',
NAME VARCHAR(4) NOT NULL COMMENT'姓名',
age INT CHECK(age>0) NOT NULL COMMENT'年龄',
gender CHAR(1) NOT NULL DEFAULT'男' COMMENT'性别',
hight DECIMAL(3,2) CHECK(hight<2.5),
phone CHAR(11) NOT NULL UNIQUE,
birth DATETIME,
house VARCHAR(25)
)
/*-------------------------------------*/
-- 修改表名
RENAME TABLE student TO stu
-- 将student表改名为stu。
-- 复制表结构
CREATE TABLE student LIKE stu
-- 创建student表,并复制stu表的结构。
2.DML

数据操纵语言DML(Data Manipulation Language)

常用语句: insert,delete,update

插入数据

方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);

方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;

方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);

方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)

修改数据

UPDATE 表名 SET 列名 = ‘新值’WHERE 条件

删除数据

DELETE FROM 表名 WHERE 条件

TRUNCATE TABLE 表名;清空整张表

查询

单列查询

DQL(Data Query Language)数据查询语言查询是使用频率最高的一个操作,

可以从一个表中查询数据,也可以从多个表中查询数据。

select 查询列表 from 表名;

特定列查询:select column1,column2 from table

全部列查询: select * from table

算数运算符:+ - * /

排除重复行: select distinct column1,column2 from table

查询函数:select 函数; / 例如version()

字符函数:

length():获取参数值的字节个数

char_length()获取参数值的字符个数

concat(str1,str2,.....):拼接字符串

upper()/lower():将字符串变成大写/小写

substring(str,pos,length):截取字符串 位置从1开始

instr(str,指定字符):返回子串第一次出现的索引,如果找不到返回0

trim(str):去掉字符串前后的空格或子串,trim(指定子串 from 字符串)

lpad(str,length,填充字符):用指定的字符实现左填充将str填充为指定长度

rpad(str,length,填充字符):用指定的字符实现右填充将str填充为指定长度

replace(str,old,new):替换,替换所有的子串

逻辑处理

case when 条件 then 结果1 else 结果2 end; 可以有多个when

ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回

原本的值

if函数:if else的 效果 if(条件,结果1,结果2)

学函数

round(数值):四舍五入

ceil(数值):向上取整,返回>=该参数的最小整数

floor(数值):向下取整,返回<=该参数的最大整数

truncate(数值,保留小数的位数):截断,小数点后截断到几位

mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负

rand():获取随机数,返回0-1之间的小数

日期函数

now():返回当前系统日期+时间

curdate():返回当前系统日期,不包含时间

curtime():返回当前时间,不包含日期

可以获取指定的部分,年、月、日、小时、分钟、秒

YEAR(日期列),MONTH(日期列),DAY(日期列) ,HOUR(日期列) ,MINUTE(日期列)

SECOND(日期列)

str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期

date_format(日期列,格式):将日期转换成字符串

datediff(big,small):返回两个日期相差的天数

分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数

分类:sum 求和、avg 平均值、max 最大值、min 最小值、count 计数(非空)

1.sum,avg一般用于处理数值型max,min,count可以处理任何类型

2.以上分组函数都忽略null值

3.count函数的一般使用count(*)用作统计行数

4.和分组函数一同查询的字段要求是group by后的字段

-- 分组函数
-- count(*)/(1)/(列名) 用于计数
SELECT COUNT(*) FROM student 
SELECT COUNT(1) FROM student
SELECT COUNT(birth) FROM student
-- sum求和
SELECT SUM(hight) FROM student 
-- avg求求平均值
SELECT AVG(hight) FROM student
-- max/min求最大/最小值
SELECT MAX(hight),MIN(birth) FROM student
条件查询

使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。

语法:select <结果列> from <表名> where <条件>,当<*>时,查询所有的列。

精确查询

比较

=, != 或<>, >, <, >=, <=

逻辑运算

and 与 or 或 not 非

-- 条件查询
-- and与,满足所有条件。   or或,满足其中一个条件。     not非,不满足该条件的。 
SELECT * FROM student WHERE hight >=1.80 AND gender ='男' AND age>18
SELECT NAME FROM student WHERE hight = 1.80 OR hight=1.85 OR hight=2.41
SELECT * FROM student WHERE NOT (hight>=2.10)
模糊查询(效率慢)

LIKE

:是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值

或数值型.

通配符: % 任意多个字符

between __ and ___ 两者之间,包含临界值;

in 判断某字段的值是否属于in列表中的某一项

IN( ,_,)如果想让判断不属于in中的值时,在IN前加上not。

IS NULL(为空的)或 IS NOT NULL(不为空的)

-- 条件查询1
-- and与,满足所有条件。   or或,满足其中一个条件。     not非,不满足该条件的。 
SELECT * FROM student WHERE hight >=1.80 AND gender ='男' AND age>18
SELECT NAME FROM student WHERE hight = 1.80 OR hight=1.85 OR hight=2.41
SELECT * FROM student WHERE NOT (hight>=2.10)

-- 模糊查询
-- between __ and ___  两者之间,包含临界值;
SELECT * FROM student WHERE hight BETWEEN 1.40 AND 2.40
-- in 判断某字段的值是否属于in列表中的某一项
SELECT * FROM student WHERE hight IN(1.80,1.85,2.41)
-- IN(    __,_,__)如果想让判断不属于in中的值时,在IN前加上not。
SELECT * FROM student WHERE hight NOT IN(1.80,1.85,2.41)
-- IS NULL(为空的)或 IS NOT NULL(不为空的)
SELECT * FROM student WHERE hight IS NULL
SELECT * FROM student WHERE hight IS NOT NULL
-- LIKE   
-- 通配符:% 任意多个字符
SELECT * FROM student WHERE NAME LIKE('肖%')
SELECT * FROM student WHERE NAME LIKE('%i%')
UNION 的语法:

union合并多个查询的结果,

1、UNION 的语法如下:

(SQL语句的查询条件可以不同,但查询结果必须相同)

[SQL 语句 1]

UNION

[SQL 语句 2]

2、UNION ALL 的语法如下:

[SQL 语句 1]

UNION ALL

[SQL 语句 2]

当使用union 时,mysql 会把结果集中重复的记录删掉。

而使用union all ,mysql 会把所有的记录返回,且效率高于union

-- union合并
-- UNION 的语法
-- 使用union 时,会把结果集中重复的记录删掉
SELECT * FROM student WHERE age>=19 
UNION
SELECT * FROM student WHERE gender ='男'
-- UNION ALL 的语法
-- 使用union all,会把所有的记录返回,且效率高于union .
SELECT * FROM student WHERE age>=19 
UNION ALL
SELECT * FROM student WHERE gender ='男'

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值