数据库-MySQL

1. 数据库


1.1 数据库概念

1.1.1什么是数据库

数据库就是用来存储和管理数据的仓库!

数据库存储数据的优点:

  • 可存储大量数据;

  • 方便检索;

  • 保持数据的一致性、完整性;

  • 安全,可共享;

  • 通过组合分析,可产生新数据。

1.1.2 数据库的发展历程
  • 没有数据库,使用磁盘文件存储数据;

  • 层次结构模型数据库;

  • 网状结构模型数据库;

  • 关系结构**模型数据库:使用二维表格来存储数据;

  • 关系-对象模型数据库;

MySQL就是关系型数据库!
1.1.3 常见数据库
  • Oracle(神喻):甲骨文(最高!);

  • DB2:IBM;

  • SQL Server:微软;

  • Sybase:赛尔斯;

  • MySQL:甲骨文;

2. SQL语句


2.1 SQL概述

2.1.1 什么是SQL

SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。SQ标准(ANSI/ISO)有:

  • SQL-92:1992年发布的SQL语言标准;

  • SQL:1999:1999年发布的SQL语言标签;

  • SQL:2003:2003年发布的SQL语言标签;

这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。

虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为“方言”。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言。

2.1.2 语法要求
SQL语句可以单行或多行书写,以分号结尾;
可以用空格和缩进来来增强语句的可读性;
关键字不区别大小写,建议使用大写;

2.2 分类

DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。

2.3 DDL

2.3.1 基本操作
查看所有数据库名称:SHOW DATABASES; 
切换数据库:USE mydb1,切换到mydb1数据库;
查看当前使用的数据库的名称: select database();
2.3.2 操作数据库

#语法:

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET 字符集 COLLATE 排序规则字符集];

#创建数据库:

CREATE DATABASE [IF NOT EXISTS] mydb1;

创建数据库,例如:CREATE DATABASE mydb1,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。

DEFAULT CHARACTER: 默认的字符集, 如果没有设置,默认是utf8
COLLATE: 排序规则, 如果没有设置,默认是: utf8_general_ci

CREATE DATABASE IF NOT EXISTS mydb2 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

注意:
字符集:
utf8: utf8 编码最⼤字符长度为 3 字节,如果遇到 4 字节的宽字符就会插⼊异常了,比如Emoji表情,就无法使用utf8存储, 推荐使用utf8mb4
utf8mb4: mb4即most bytes 4,专门用来兼容四个字节即以上的unicode, 在Mysql在5.53版本之后
排序规则:
utf8mb4_bin:将字符串每个字符⽤⼆进制数据编译存储,区分⼤⼩写,⽽且可以存⼆进制的内容。 推荐使用
utf8mb4_general_ci:ci即case insensitive,不区分⼤⼩写。没有实现Unicode排序规则,在遇到某些特殊语⾔或者字符集,排序结果可能不⼀致。但是,在绝⼤多数情况下,这些特殊字符的顺序并不需要那么精确。
utf8mb4_unicode_ci:是基于标准的Unicode来排序和⽐较,能够在各种语⾔之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
utf8mb4_general_ci是⼀个遗留的 校对规则,不⽀持扩展,它仅能够在字符之间进⾏逐个⽐较。
utf8_general_ci校对规则进⾏的⽐较速度很快,但是与使⽤ utf8mb4_unicode_ci的校对规则相⽐,⽐

--删除数据库:

DROP DATABASE [IF EXISTS] mydb1;

删除数据库,例如:DROP DATABASE mydb1,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算mydb1不存在,也不会的报错。

--修改数据库编码:

ALTER DATABASE mydb1 CHARACTER SET utf8

修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8。
2.3.3 数据类型

MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。

MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。

2.3.4 操作表

创建表:

CREATETABLE 表名(

列名 列类型,

列名 列类型,

......

);

例如:
CREATETABLE stu (
sid CHAR(6),
sname VARCHAR (20),
age INT,
gender VARCHAR (10)
) ;
再例如:
CREATETABLE emp (
eid CHAR(6) COMMENT '编号',
ename VARCHAR (50) COMMENT '姓名',
age INT COMMENT '年龄',
gender VARCHAR (6) COMMENT '性别',
birthday DATE COMMENT '出生日期',
hiredate DATE COMMENT '入职日期',
salary DECIMAL (7, 2) COMMENT '薪水',
RESUME VARCHAR (1000) COMMENT '简介'
) COMMENT '员工表' ;
再例如: 设置表的使用的数据库引擎, 默认字符集,默认排序规则:
CREATETABLE emp (
eid CHAR(6) COMMENT '编号',
ename VARCHAR (50) COMMENT '姓名',
age INT COMMENT '年龄',
gender VARCHAR (6) COMMENT '性别',
birthday DATE COMMENT '出生日期',
hiredate DATE COMMENT '入职日期',
salary DECIMAL (7, 2) COMMENT '薪水',
RESUME VARCHAR (1000) COMMENT '简介'
) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT '员工表' ;

表的其他操作SQL

--查看当前数据库中所有表名称:
SHOW TABLES;
--查看指定表的创建语句: 查看emp表的创建语句;
SHOW CREATETABLE emp;

--查看表结构:
DESC emp; --查看emp表结构;

--删除表:
DROPTABLE emp; --删除emp表;

--修改表:
--1. 修改之添加列:给stu表添加classname列:
ALTERTABLE stu ADD (classname varchar(100));

--2. 修改之修改列类型:修改stu表的gender列类型为CHAR(2):
ALTERTABLE stu MODIFY gender CHAR(2);

--3. 修改之修改列名:修改stu表的gender列名为sex:
ALTERTABLE stu change gender sex CHAR(2);

--4. 修改之删除列:删除stu表的classname列:
ALTERTABLE stu DROP classname;

--5. 修改之修改表名称:修改stu表名称为student:
ALTERTABLE stu RENAME TO student;

2.4 DML

2.4.1 插入数据

插入指定列语法:

INSERTINTO 表名(列名1,列名2, …) VALUES(值1, 值2)

INSERTINTO stu (sid, sname, age, gender)
VALUES
('s_1001', 'zhangSan', 23, 'male');

INSERTINTO stu (sid, sname)
VALUES
('s_1001', 'zhangSan') ;

插入全部列语法:

INSERTINTO 表名 VALUES(值1,值2,…)

因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:强烈不建议
INSERTINTO stu VALUES('s_1002', 'liSi', 32, 'female');
注意: 所有字符串数据必须使用单引用!
扩展
#创建newStudent 表格结构 和t_student一摸一样
CREATETABLE newstuden SELECT *FROM t_student WHERE1!=1

扩展2

insertinto t_student(列1,列2,列3)select *from 表2

2.4.2 修改数据

语法:

UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件]

UPDATE stu SET sname='zhangSanSan', age='32', gender='female'WHERE sid='s_1001';

UPDATE stu SET sname='wangWu', age='30'WHERE age>60OR gender='female';

UPDATE stu SET sname='liSi', age='20'WHERE age>50AND gender='male';

UPDATE stu SET gender='female'WHERE gender ISNULL;

UPDATE stu SET age=age+1WHERE sname='zhaoLiu';
2.4.3 删除数据

语法:

DELETEFROM 表名 [WHERE 条件]

DELETEFROM stu WHERE sid='s_1001';

DELETEFROM stu WHERE sname='chenQi'OR age > 30;

--删除所有 慎用
DELETEFROM stu;

语法:

TRUNCATE TABLE 表名

TRUNCATE TABLE stu;

虽然TRUNCATE和DELETE都可以删除表的所有记录,但有原理不同。DELETE的效率没有TRUNCATE高!

TRUNCATE其实属性DDL语句,因为它是先DROP TABLE,再CREATE TABLE。而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。

总结

数据

数据库:长期存储在计算机内的、有组织的、可共享的大量数据的集合

数据库管理系统:

数据定义

数据操纵

数据组织、存储和管理

数据库的事务管理和运行管理

数据库的建立和维护

其他功能:与其他软件通信

数据库系统:数据库、DBMS、应用程序、DBA

数据模型的分类:概念模型、逻辑模型、物理模型

数据模型的三要素:数据结构、数据操作、数据完整性约束

外模式:数据库中局部数据的逻辑结构

模式:数据库中全体数据的逻辑结构

内模式:数据的物理结构和存储方式

外模式/模式映像:实现数据的逻辑独立性(应用程序与数据库的逻辑结构相互独立)

模式/内模式映像 :实现数据的物理独立性(应用程序与数据库的物理存储相互独立)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值