Mysql数据库

定义

对大量信息进行管理的高效解决方案,按照数据结构来组织、存储和管理的库

  • 数据库系统(DataBase System)=数据库管理系统(DBMS)+数据库(DataBase)+管理员
  • •DBS=DBMS+DB

关系模型:

1.数据结构可以规定,同类数据,结构一致,就是一个二维的表格
2.数据之间的关系可以设置,实体之间的联系

关系型数据库典型概念
•数据库datebase:数据的仓库
•表table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式
•行&列:行用于记录数据,列用于规定数据格式
•记录:行内的数据
•字段:数据的某个列
•SQL:数据库管理系统,用于管理数据库的语言,结构化查询语言(SQL:structured Query Language)
•MySQL:数据库(管理+数据:)+谁能向数据库系统发出如何管理的命令,MySQL是基于C/S架构的,客户端/服务器

数据库的增删改查

sql语句以 ;结尾

创建数据库

Crete database 数据库名称 (charset=utf8);
Crete database if (not) exists 数据库名称 (charset=utf8);

数据库查询

show databases;

查看创建数据库的创建语句

show create database 数据库名称;

数据库删除

drop database 数据库名称;

修改数据库的字符集

alter database 数据库名称 character set utf8;

进入/切换某个数据库

在建表时候 需要进入到相应的数据库中
use database 数据库名称;

创建数据表

create table 表名 (字段名称)[数据类型][字段约束]
列定义:列名 列的数据类型[列的属性(约束)] 不同列用","来连接,最后一个列后不用“,”

建表—字段约束存储数据类型

存储数据数据类型
存储数据数据类型

- [ ] 数据的完整性

  • 作用 :保证用户输入的数据保存到数据库中是正确的

  • 分类:

  • 实体完整性 标识(标记)每一行数据不重复.行级约束

约束类型约束名称特点
主键约束primary key1.每个表都要有一个主键 2. 数据唯一且不为Null
唯一约束unique1.指定列的数据不能重复 2.可以为空值
自动增长auto_increment1.指定列的数据会自动增长 2.即使数据删除,还是从删除的序号继续往下 3.一般会设置主键自增长
# 主键约束
方式一:
create table 表名(字段名 数据类型 约束类型 primary key,字段名 数据类型 约束类型);
方式二:
CREATE TABLE 表名(字段1 数据类型,字段名2 数据类型,primary key(要设置主键的字段));
联合主键:
两个字段数据同时相同时,才违反联合主键约束
CREATE TABLE 表名(字段1 数据类型,字段2 数据类型,primary key(主键1,主键2));

# 唯一约束
create table 表名(字段名 数据类型 约束类型 unique,字段名 数据类型 约束类型);

# 自动增长列
CREATE TABLE 表名(
字段名1 数据类型 primary key AUTO_INCREMENT,
字段2 数据类型 UNIQUE);
  • 如果在建表时未设置主键 如何添加
ALTER TABLE 表名 ADD CONSTRAINT primary key(要设置主键的字段名);
  • 域完整性 1.限制此单元格的数据正确,不对照此列的其他单元格比较
    2.域代表当前的单元格
    数据类型 日期类型 字符串类型
约束类型约束名称特点
非空约束not null此字段数据不为空
默认值约束default不填入任何数据 以默认值数据填入
# 非空约束+默认值约束
CREATE TABLE 表名(
字段名1 数据类型 primary key AUTO_INCREMENT,
字段2 数据类型 UNIQUE NOT NULL,
字段3 数据类型 DEFAULT '默认值');
  • 引用完整性
  • 添加数据完整性 给表添加约束
  • 参照完整性
  • 关联两张表 做外键关系 foreign key
# 对已有表添加外键关系
ALTER TABLE score ADD CONSTRAINT sc_st_fk FOREIGN KEY(sid) REFERENCES student(id);

删除表和查询表

# 删除表及表中数据
drop table 表名 
truncate table 表名
delete table 表名

删除表三种方法及区别
添加一列

alter table 表名 add 字段名 数据类型;

查看表的字段信息

desc 表名

更改字段数据类型

ALTER TABLE 表名 MODIFY 字段名 数据类型 ;

删除一列

alter table 表名 drop 字段名;

修改表名

rename table 原始表名 to 要修改的表名;

查看表的创建细节

SHOW CREATE TABLE 表名;

修改表的列名

ALTER TABLE 表名 change name newname varchar(20);

查询表中所有数据

select * from 表名

在表中插入数据

  • 列名与列值的类型,个数,顺序要一一对应.
    * 值不要超出列定义的长度.
    * 插入的日期和字符一样,都使用引号括起来.
# 插入一条数据
insert into 表名(字段名1,字段名2,字段名3)values(数据1,数据2,数据3)
# 插入多条数据
# VALUES后面以逗号隔开
INSERT INTO 表名(列名1,列名2....) VALUES(列值1,列值2),(列值1,列值2)

更新数据

UPDATE 表名 SET 列名1=列值1, 列名2=列值2... WHERE 列名=值

添加过滤条件删除数据

DELETE FROM 表名 [WHERE 列名=值]

查询指定的列

select 字段名1,字段名2 from 表名

条件查询
BETWEEN…AND; 值在什么范围

IN(set);

IS NULL; (为空)

IS NOT NULL; (不为空)

AND; 与

OR; 或

NOT; 非
符号及含义
模糊查询

* 根据指定的关键字进行查询
* 使用LIKE关键字后跟通配符
* 通配符
* _:任意一个字母
* %:任意0~n个字母
# 模糊查询
# 查询姓名中第二个字母为'u'的学生记录
SELECT * FROM students WHERE name LIKE '_u%';
# 查询姓名中包含's'字母的学生记录
SELECT * FROM students WHERE name LIKE '%s%';

使用正则表达式查询
正则表达式是用某种模式去匹配一类字符串的一个方式。正则表达式的查询能力比通配符的查询能力更强大。 在MySQL中使用关键字REGEXP来匹配查询正则表达式

# 基本语法
字段名 REGEXP '匹配方式'
# 查名字里面包含z或者s或者l的记录
select * from students where name regexp '[zsl]';
# 匹配以指定的字符开头和结束的字符
# 实现查询姓名中(name)字段以l开头以i结尾,中间两个字符的学生来自哪里
select address from students where name regexp '^l..i$';

排序

  • 关键字 ORDER BY
    排序类型(默认是ASC))
    升序ASC 从小到大
    降序DESC 从大到小
SELECT * FROM 表名 ORDER BY 字段名 排序类型,字段名 排序类型;

数据查询之聚合函数

  • 对查询的结果进行统计计算
    * 常用聚合函数
    COUNT():统计指定列不为NULL的记录行数;
    MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
    MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
    SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
    AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
# 查询employee表中记录数:
SELECT COUNT(*) FROM employee;

# 查询员工表中有绩效的人数:
SELECT COUNT(performance) FROM employee;

# 查询所有雇员月薪和
SELECT SUM(salary) FROM employee;

# 查询所有雇员月薪和,以及所有雇员绩效和
SELECT SUM(salary),SUM(performance) FROM employee;

# 统计所有员工平均工资
SELECT AVG(salary) FROM employee;

# 查询最高工资和最低工资
SELECT MAX(salary),MIN(salary) FROM employee;

分组查询

将查询结果按照1个或者多个字段进行分组,字段值相同的为1组
GROUP_CONCAT(字段名)可以作为一个输出字段来使用
- 表示分组之后,根据分组结果,使用group_concat()来 放置每一组的某字段的值的集合
* GROUP BY + having 用分组查询后指定一些条件来输出查询结果
- having作用和where一样,但是having只能用于GROUP BY

# 根据性别进行分组
SELECT gender FROM employee GROUP BY gender;

# 在一组里面所有男性名字和女性名字
SELECT gender,GROUP_CONCAT('name') FROM employee GROUP BY gender;

# 查看部门平均薪资
SELECT department,GROUP_CONCAT(salary),SUM(salary) FROM employee GROUP BY department;

#  查询工资总和大于9000的部门名称
SELECT department,GROUP_CONCAT(salary),SUM(salary)
FROM employee
GROUP BY department
HAVING SUM(salary)>9000;

where和having的区别
分页

  • 从哪一行开始查,总共要查几行
    * LIMIT 参数1, 参数2
    参数1:从哪一行开始查
    参数2:一共要查几行
    角标是从0开始
    格式
    SELECT * FROM 表名 LIMIT 0,5;
SELECT * FROM employee
LIMIT (curPage-1)*pageSize,pageSize;

单表查询书写顺序和执行顺序

SELECT --> FROM --> WHERE --> GROUP BY --> HAVING - ORDER BY --> LIMIT

FROM => WHERE => GROUP BY => HAVING => SELECT => ORDER BY => LIMIT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值