学习MySQL-基础1

目录

1.数据库概述

1.1数据库发展

1.2数据库分类

1.3数据库的优点

1.4数据库管理系统、数据库和表的关系

2.SQL概念

2.1 SQL作用

2.2 SQL语句分类

3.DDL操作数据库

3.1 创建数据库

3.2 查看数据库

3.3 修改数据库

3.4 删除数据库

3.5 使用数据库

4.DDL操作表结构

4.1 MySQL中数据类型

4.2 创建表

4.3 查看表

4.4 删除表

4.5 修改表的结构

5.DML操作表中数据

5.1 插入操作

5.2 蠕虫复制(了解)

5.3 更新表中的数据

5.4 删除表中的数据

6.where条件运算符

6.1按条件表达式筛选

6.2按逻辑表达式筛选

6.3模糊查询(条件查询的一种)


1.数据库概述

1.1数据库发展

在计算机的早期,“打孔卡”用来输入,输出和数据存储。

计算机数据库始于1960年代,这十年流行称为CODASYL的网络模型和称为IMS的分层模型。网状数据模型是以“图结构”表示数据记录之间的联系,层次数据模型是以“树结构”表示数据记录之间的联系。

在1974年至1977年之间关系数据库系统原型被创建,关系数据模型是以“二维表”(或称为关系)的方式表示数据记录之间的联系。关系数据库管理系统(RDBMS)的局限性:无法处理复杂类型数据(如文本、图像、视频等)。

NoSQL模型是非关系模型,使用“分布式”数据库系统,不仅可以处理结构化和非结构化的数 据,还可以非常快速地处理非结构化的大数据。

1.2数据库分类

1.2.1关系型数据库:

Oracle:大型数据库,收费

DB2:大型数据库,收费

SqlServer:中型数据库,收费

MySQL:中型数据库,免费

Access:小型数据库,是office套件中的一员

SQLite:嵌入式数据库,c语言开发

1.2.2.非关系型数据库:

Redis:缓存,键值对存储

Mongodb:分布式数据库,c++语言开发

1.3数据库的优点

  • 1. 降低存储数据的冗余度
  • 2. 更高的数据一致性
  • 3. 存储数据的可以共享
  • 4. 可以建立数据库所遵循的标准
  • 5. 便于维护数据完整性
  • 6. 能够实现数据的安全性

1.4数据库管理系统、数据库和表的关系

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建 立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系 统访问数据库中表内的数据。 数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实 体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

注:

  • 1. 一个数据库服务器包含多个数据库
  • 2. 一个数据库包含多张表
  • 3. 一张表包含多条记录
  • 4. 一条记录包含多个字段(列)

2.SQL概念

SQL(Structured Query Language):结构化查询语言

2.1 SQL作用

1. 是一种所有关系型数据库的查询规范,不同的数据库都支持

2. 通用的数据库操作语言,可以用在不同的数据库中

3. 不同的数据库SQL语句有一些区别

2.2 SQL语句分类

1. 数据定义语言DDL(Data Definition Language):用来定义数据库对象、库、表、列等;创建、删除、修改 库,表结构

create table 表名

2. 数据查询语言DQL(Data Query Language):对表中的查询操作

select * from 表名

3. 数据操纵语言DML(Data Manipulation Language):对表中的记录操作增删改

insert、update、delete

4. 数据控制功能DCL(Data Control Language):用户权限的设置

MySQL的语法

1. 命令行中每一条SQL语句都是以分号(英文状态)结束,但是在Navicat中是可以不加分号的;

2. SQL中是不区分大小写,关键字中认为大小写一样;

3. 注释的三种方式

注释语法 说明

--空格 单行注释

/* */ 多行注释

# Navicat特有的注释方法

3.DDL操作数据库

3.1 创建数据库

1. 创建数据库

# 格式

CREATE DATABASE 数据库名;

# demo

create database demo;

2. 判断数据库是否已经存在,不存在则创建数据库

# 格式

CREATE DATABASE IF NOT EXISTS 数据库名;

# demo

create database if not exists demo;

3. 创建数据库并指定字符集

# 格式

CREATE DATABASE 数据库名 CHARACTER SET 字符集;

# demo

create database demo character set utf8 collate utf8_general_ci;

3.2 查看数据库

1. 查看所有数据库

show databases;

2. 查看某一个数据库

show create database demo;

3.3 修改数据库

修改数据库默认的字符集

# 格式

ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

# demo

alter database demo default character set utf8;

3.4 删除数据库

1. 直接删除数据库

# 格式

DROP DATABASE 数据库名;

# demo

drop database demo;

2. 判断数据库存在,再删除

# 格式

DROP DATABASE IF EXISTS 数据库名;

# demo

drop database if exists demo;

3.5 使用数据库

1. 查看正在使用的数据库

SELECT DATABASE();

2. 使用和切换数据库

# 格式

use 数据库名;

# demo

use demo;

4.DDL操作表结构

4.1 MySQL中数据类型

mysql没有boolean类型,一般使用tinyint用0,1表示,或者使用字符型以'true'、'false'或者'Y'、'N'表示

4.2 创建表

1. 创建表结构

# 格式

CREATE TABLE 表名(

字段名1 字段类型1,

字段名2 字段类型2

注意:

  • 创建表,必须先选择要使用数据库;
  • CREATE,TABLE是两个关键字;
  • 字段类型要给大小。

#使用user数据库

use user;

#创建employee表包含 id,name,birthday 字段

CREATE TABLE employee(

id int(11),

name VARCHAR(22),

birthday date

#birthday为date,插入时间会自动插入年月日,时分秒被过滤掉

#同样如果为time,插入时间会自动插入时分秒,年月日被过滤掉

insert into employee values(1,'张三',now());

alter table employee add column b_time time;

update employee set b_time= now() where id=1;

2. 判断是否存在再创建

#创建employee表包含 id,name,birthday 字段

CREATE TABLE IF NOT EXISTS employee(

id int(11),

name VARCHAR(22) comment '名称',

birthday date

3. 快速创建一个表结构相同的表,只复制表结构,不复制数据

# 格式

CREATE TABLE 新表名 LIKE 旧表名;

# demo

CREATE TABLE newEmployee LIKE employee;

4.3 查看表

1. 查看某个数据库中的所有表

SHOW TABLES;

1. 查看表的结构

# 格式

DESC 表名

# demo

DESC employee;

2. 查看创建表的SQL语句

# 格式

SHOW CREATE TABLE 表名;

# demo

SHOW CREATE TABLE employee;

4.4 删除表

# 直接删除

# 格式

DROP TABLE 表名;

# demo

drop table newEmployee;

# 判断是否存在再删除

# 格式

DROP TABLE IF EXISTS 表名;

# demo

drop table if exists employee;

4.5 修改表的结构

1. 添加表中的字段

# 格式

ALTER TABLE 表名 ADD 列名 类型;

# demo

ALTER TABLE employee ADD age int(3);

2. 修改列类型

# 格式 更改列名及字段类型

ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;

# demo

ALTER TABLE employee CHANGE age new_age int(4);

#格式 更改类名的字段类型

ALTER TABLE 表名 MODIFY 列名 新类型;

#demo

alter table employee modify birthday datetime;

3. 删除列 DROP

# 格式

ALTER TABLE 表名 DROP 列名;

# demo

ALTER TABLE employee DROP new_age;

4. 修改表名

# 格式

RENAME TABLE 表名 TO 新表名;

# demo

rename table employee to employee1;

5. 修改数据表字符集

# 格式

ALTER TABLE 表名 character set 字符集;

# demo

ALTER TABLE employee character set utf8;

6. 修改字段的字符集

#格式

ALTER TABLE 表名 modify 字段名 字段类型 character set 字符集;

#demo

alter table employee modify name varchar(32) character set utf8;

5.DML操作表中数据

DML操作是用于对表中的记录进行增删改操作。

5.1 插入操作

# 格式

INSERT [INTO] 表名 (字段名) VALUES (字段值);

解析:

insert into 表名:表示往哪张表中添加数据

(字段名 1, 字段名 2, …):要给哪些字段设置值

values (值 1, 值 2, …):设置具体的值

1. 插入全部字段--方法一(所有的字段名都写出来)

# 格式

INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);

# demo

insert into employee (id,name,birthday) values (1, '孙悟空', '1999­12­09');

2. 插入全部字段--方法二(不写字段名)

# 格式

INSERT INTO 表名 VALUES (值 1, 值 2, 值 3);

# demo

insert into employee values (2, '猪八戒', '1999­12­10');

3. 插入部分数据

# 格式

INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);

# demo

insert into employee (id,name) values (1, '孙悟空');

注意:

1. 没有添加数据的字段会使用 NULL,前提是字段设置为允许为NULL;

2. 插入的数据应与字段的数据类型相同;

3. 数据的大小应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中;

4. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。在 mysql 中可以使用 value,但不建议使 用,功能与 values 相同;

5. 字符和日期型数据应包含在单引号中,MySQL 中也可以使用双引号;

6. 不指定列或使用 null,表示插入空值。

5.2 蠕虫复制(了解)

概念:将一张已经存在的表中的数据复制到另一张表中,一般用来做测试。

首先创建一张表employee1:

create table employee1 like employee;

1. 将表employee中的所有列内容复制到employee1中:

# 格式

INSERT INTO 表名 1 SELECT * FROM 表名 2;

# demo

insert into employee1 select * from employee;

2. 将表employee中的部分列内容复制到employee2中:

# 格式

INSERT INTO 表名 1(列 1, 列 2) SELECT 列 1, 列 2 FROM student;

# demo

insert into employee1(name,age) select name,age from employee;

5.3 更新表中的数据

# 格式

UPDATE 表名 SET 列名=值 [WHERE 条件表达式]

解析:

UPDATE 表名:需要更新的表名

SET:修改的列值

WHERE:符合条件的记录才更新

1. 不带条件修改(会修改所有字段的值)

# 格式

UPDATE 表名 SET 字段名=值;

# demo

update employee set name ='小明';

2. 带条件修改

# 格式

UPDATE 表名 SET 字段名=值 WHERE 字段名=值;

# demo

update employee set name ='john' where id=2;

5.4 删除表中的数据

# 格式

DELETE FROM 表名 [WHERE 条件表达式]

解析:

DELETE from 表名:从哪个表中删除记录

WHERE: 符合条件的记录才删除

1. 不带条件删除数据(会删除所有记录)

# 格式

DELETE FROM 表名;

# demo

delete from employee;

2. 带条件删除数据

# 格式

DELETE FROM 表名 WHERE 字段名=值;

# demo

delete from employee where name ='小明';

注意:

如果使用truncate进行删除记录,不删除表的结构,释放空间

# 格式

TRUNCATE TABLE 表名;

truncate和delete的区别:

1. truncate删除数据后重新写数据会从1开始,而delete删除数据后只会从删除前的最后一行续写;

2. 内存空间上,truncate释放空间;delete不释放空间;

3. truncate删除速度比delete快;

4. delete属于DML语句,而truncate属于DDL语句,这造成了它们在事务中的不同现象:

delete在事务中,因为属于DML语句,所以可以进行回滚和提交操作(由操作者) truncate属于DDL语句, 在事务中,执行后会自动commit,所以不可以回滚;

5. delete可以在后续加上where进行针对行的删除;truncate后面只能加上表名,直接删除表数据,无法使用 where筛选条件。

6.where条件运算符

6.1按条件表达式筛选

> : 大于

=:等于

!=:不等于

<> :不等于

> =:大于等于

例如:

delete FROM stu WHERE age > 22;

is null:判断字段为空

例如:

delete FROM stu WHERE money IS NULL;

注意:解决了money = NULL查询不出来的问题

is not null: 判断字段不为空

例如:

delete FROM stu WHERE money IS NOT NULL;

用来查询字段不为空的数据记录

6.2按逻辑表达式筛选

and or not (建议使用)

&& || !

例如:

delete stu WHERE age <> 22 AND `name` != '小红';

6.3模糊查询(条件查询的一种)

like,between and,in

Like:

例如:

delete FROM stu WHERE `name` LIKE '%红%';

delete FROM stu WHERE `name` LIKE '红%';

delete FROM stu WHERE `name` LIKE '%红';

注意:

like一般和通配符一起使用,常用通配符

%:代表0到多个字符,包括0

_ :代表任意单个字符 SELECT * FROM stu WHERE name LIKE '小_';

特殊情况:查询带有_的人名,需要转义

delete FROM stu WHERE `name` LIKE '\_%';

between and:等价于大于等于第一个值,小于等于第二个值

例如:

delete FROM stu WHERE age between 22 AND 23;

注意:

可以提高语句的简洁度;包含临界点;临界值不能颠倒;

如果时间字段使用between and,需要注意右边界的时间格式,如:

delete from user where create_time between '2022­04­13' and '2022­04­14';

有边界的时间没有明确时分秒,mysql会将时间默认为2022-04-14 00:00:00,返回的结果集可能会不包含2022- 04-14的数据

in判断某个字段的值是否属于in列表中的某一项,可以满足列表中的一项或多项,如果不满足则返回空

例如:

delete FROM stu WHERE stu_number in(003,002);

delete FROM stu WHERE (age,name) in ((22,'小红'),(22,'小明'));

注意:可以提高语句的简洁度;in列表的值类型必须统一或兼容;不支持通配符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值