MySQL基础-笔记

MYSQL基础语法

学习内容

数据库的基本知识

目标

  1. 学习数据库的概念
  2. 学习常用的数据库
什么是数据库

存储数据的仓库,数据库本质也是文件。

数据的存储方式
  1. 数据保存在内存

    int[] arr = new int[]{1, 2, 3, 4};
    ArrayList<Integer>list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    

    new出来的对象存储在堆中.堆是内存中的一小块空间

    优点:内存速度快
    缺点:断电/程序退出,数据就清除了.内存价格贵

  2. 数据保存在普通文件
    优点:永久保存
    缺点:查找,增加,修改,删除数据比较麻烦,效率低

  3. 数据保存在数据库
    优点:永久保存,通过SQL语句比较方便的操作数据库,数据库是对大量的信息进行管理的高效的解决方案

常见数据库

[外链图片转存失败(img-3QoVAdIN-1564667866217)(/常见数据库.PNG)]
Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。
MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。
DB2 :IBM公司的数据库产品,收费的。常应用在银行系统中.
SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。
SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
SQLite: 嵌入式的小型数据库,应用在手机端。

常用数据库MYSQLOracle
在web应用中,使用的最多的就是MySQL数据库,原因如下:

  1. 开源、免费
  2. 功能足够强大,足以应付web应用开发(最高支持千万级别的并发访问)

小结

  1. 说出数据库的概念:存储数据的仓库

  2. 说出常用的数据库:MYSQL, Oracle

MySQL目录结构

目标

了解MySQL目录结构

-- bin:mysql相关的可执行文件*.exe-- MySQLInstanceConfig.exe mysql的配置程序-- data: mysql自带的数据库文件(不用关注)-- include: c语言的头文件(不用关注)-- lib: 存放mysql使用到的dll动态库(相当于jar包,不用关注)-- my.ini mysql的配置文件,配置了mysql的相关信息

命令行客户端连接服务器

目标

  1. 学习打开和关闭mysql服务
  2. 学习登录mysql
打开和关闭mysql服务

在这里插入图片描述
在这里插入图片描述

DOS命令⽅方式启动

在这里插入图片描述

在这里插入图片描述

启动MYSQL: net start mysql

停⽌止MYSQL: net stop mysql

登录mysql服务器

在这里插入图片描述

​ MySQL是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的root账号,使用安装时设置的密码即可登录

  1. 登录格式1:在DOS命令行:mysql -u用户名 -p密码
    例如:

    mysql -uroot -proot
    

在这里插入图片描述

后输入密码方式:

mysql -uroot -p回车
下一行输入密码
  1. 登录格式2:mysql -hip地址 -u用户名 -p密码
    例如:

    mysql -h127.0.0.1 -uroot -proot
    
  2. 退出MySQL:exit

小结

  1. 连接到本机的mysql

    mysql -uroot -proot
    
  2. 连接到指定主机的mysql

    mysql -hip地址 -u账号 -p密码
    

服务器与数据库、表、记录的关系

目标

学习mysql服务器与数据库、表、记录的关系

讲解

在这里插入图片描述

实体类与表的对应关系

在这里插入图片描述

关系型数据库的核心单元是表

小结

mysql服务器与数据库、表、记录的关系?

mysql服务器可以管理多个数据库

一个数据库可以有多张表

一张表中可以存储多条记录

SQL语句的分类和语法

目标

学习SQL的概念和作用

什么是SQL

结构化查询语言(Structured Query Language)简称SQL。

SQL语句就是对数据库进行操作的一种语言。

SQL作用

通过SQL语句我们可以方便的操作数据库、表、数据。
SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
在这里插入图片描述

SQL语句分类
  1. DDL(Data Definition Language) 数据定义语言
    用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等

  2. DML(Data Manipulation Language) 数据操作语言
    用来对数据库中表的数据进行增删改。关键字:insert, delete, update等

  3. DQL(Data Query Language) 数据查询语言
    对数据库进行数据查询,关键字select

  4. DCL(Data Control Language)数据控制语言(了解)

    是用来设置或更改数据库用户或角色权限的语句,这个比较少用到

SQL通用语法
  1. SQL语句可以单行或多行书写,以分号结尾。

  2. 可使用空格和缩进来增强语句的可读性。

  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

    SELECT 
            * 
    	FROM 
    	user;
    
  4. 3种注释
    单行注释: – 注释
    多行注释: /*注释*/
    MYSQL特有的单行注释:# 注释

小结

  1. SQL的作用?

    操作数据库的语言
    
  2. SQL的分类?

    DDL: 数据定义语言,主要是操作数据库,表,字段
    DML:数据操作语言,对数据进行增删改
    DQL:数据查询语言,对数据进行查询
    DCL: 数据控制语言,创建用户(了解)
    
  3. SQL的语法特点?

    1. SQL语句可以单行或多行书写,以分号结尾。
    2. 可使用空格和缩进来增强语句的可读性。
    3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
    

DDL创建数据库(重要)

目标

学习创建数据库的三种语法

讲解

创建数据库
  1. 直接创建数据库

    CREATE DATABASE 数据库名;
    
    CREATE:表示创建
    DATABASE:表示数据库
    
  2. 判断是否存在并创建数据库

    CREATE DATABASE IF NOT EXISTS 数据库名;
    
  3. 创建数据库并指定字符集(编码表)

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

注意: 创建表时必须设置列的类型

  1. 具体操作:
  • 直接创建数据库db1
    CREATE DATABASE db1;
    

在这里插入图片描述

  • 判断是否存在并创建数据库db2
    CREATE DATABASE IF NOT EXISTS db2;
    

在这里插入图片描述

  • 创建数据库db3并指定字符集为gbk
    CREATE DATABASE db2 CHARACTER SET gbk;
    

在这里插入图片描述

查看数据库
  1. 查看所有的数据库
SHOW DATABASES;

在这里插入图片描述
2. 查看某个数据库的定义信息

SHOW CREATE DATABASE 数据库名;

在这里插入图片描述

小结

  1. 创建数据库语法

    CREATE DATABASE 数据库名;
    
  2. 查看有哪些数据库

    SHOW DATABASES;
    

DDL修改和删除数据库(重要)

目标

  1. 学习修改数据库的字符集
  2. 学习删除数据库
修改数据库字符集
ALTER:表示修改

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

具体操作:

  • 将db3数据库的字符集改成utf8
    ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
    

在这里插入图片描述

删除数据库
DROP:表示删除

DROP DATABASE 数据名;

具体操作:

  • 删除db2数据库
    DROP DATABASE db2;
    

在这里插入图片描述

小结

  1. 修改数据库的字符集格式?

    ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 新字符集;
    
  2. 删除数据库格式?

    DROP DATABASE 数据库名
    

DDL使用数据库

目标

  1. 学习切换数据库语法
  2. 查看正在使用的数据库

讲解

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

    SELECT DATABASE()
  2. 使用/切换数据库

    use 数据库名;
    

具体操作:

  • 查看正在使用的数据库
    SELECT DATABASE();
    

在这里插入图片描述

  • 使用db1数据库
    USE db1;
    

在这里插入图片描述

小结

DDL语句操作数据库关键字
创建CREATE DATABASE 数据库名;
修改ALTER DATABASE 数据名 DEFUALT CHARACTER SET 新字符集;
查看SHOW DATABASES;
删除DROP DATABASE 数据库名;

DDL创建表(重要)

目标

学习DDL创建表

前提先使用某个数据库(db1)

创建表
CREATE TABLE 表名(字段名 数据类型, 字段名 数据类型);

建议写成如下格式:

CREATE TABLE 表名(
    字段名 数据类型,
    字段名 数据类型
);

关键字说明:

CREATE:表示创建
TABLE: 表示数据表
MySQL数据类型

MySQL中的我们常使用的数据类型如下:
在这里插入图片描述

详细的数据类型如下(不建议详细阅读!)

在这里插入图片描述

具体操作:

创建student表包含id,name,birthday字段

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE
);

小结

  1. 创建表语句

    CREATE TABLE 表名(字段名 字段类型, 字段名 字段类型);
    
  2. 常用数据类型:

    int
    double
    

varchar
date




## DDL查看表(重要)

### 目标

1. 学习查看某个数据库中的所有表
2. 学习查看表结构

### 讲解

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

```sql
SHOW TABLES;
  1. 查看表结构

    DESC 表名;
    
  2. 查看创建表的SQL语句

    SHOW CRETE TABLE 表名;
    

具体操作:

  • 查看mysql数据库中的所有表
    SHOW TABLES;
    

在这里插入图片描述

  • 查看student表的结构
    DESC student;
    

在这里插入图片描述

  • 查看student的创建表SQL语句
    SHOW CREATE TABLE student;
    

在这里插入图片描述

小结

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

    SHOW TABLES;
    
  2. 查看表结构

    DESC 表名;
    
  3. 查看创建表的SQL语句

    SHOW CREATE TABLE 表名;
    

DDL删除表(重要)

目标

  1. 学习删除表语法
  2. 学习快速创建一个表结构相同的表

讲解

快速创建一个表结构相同的表
CREATE TABLE 表名 LIKE 其他表;

具体操作:

  • 创建s1表,s1表结构和student表结构相同

    CREATE TABLE s1 LIKE student;
    
删除表
  1. 直接删除表

    DROP TABLE 表名;
    
  2. 判断表是否存在并删除表

    DROP TABLE IF EXISTS 表名;
    

具体操作:

  • 直接删除表s1表
    DROP TABLE s1;
    

在这里插入图片描述

  • 判断表是否存在并删除s1表
    DROP TABLE IF EXISTS s1;
    

在这里插入图片描述

小结

  1. 快速创建一个表结构相同的表

    CREATE TABLE 表名 LIKE 其他表;
    
  2. 删除表语法

    DROP TABLE 表名;
    

DDL修改表结构

目标

学习修改表结构的语法

讲解

所有的修改表结构的语句都是: ALTER TABLE 表名 XXX;

修改表结构使用不是很频繁,只需要了解,等需要使用的时候再回来查即可

  1. 添加表一列

    ALTER TABLE 表名 ADD 字段名 字段类型;
    

    具体操作:

    • 为学生表添加一个新的字段remark,类型为varchar(20)
      ALTER TABLE student ADD remark VARCHAR(20);
      

在这里插入图片描述

  1. 修改列类型

    ATLER TABLE 表名 MODIFY 字段名 新的类型;
    

    具体操作:

    • 将student表中的remark字段的改成varchar(100)
      ALTER TABLE student MODIFY remark VARCHAR(100);
      

    在这里插入图片描述

  2. 修改列名

    ALTER TABLE 表名 CHANGE 老字段名 新字段名 类型;
    

    具体操作:

    • 将student表中的remark字段名改成intro,类型varchar(30)
      ALTER TABLE student CHANGE remark intro varchar(30);
      

    在这里插入图片描述

  3. 删除列

    ALTER TABLE 表名 DROP 字段名;
    

    具体操作:

    • 删除student表中的字段intro
      ALTER TABLE student DROP intro;
      

在这里插入图片描述

  1. 修改表名

    RENAME TALBE 旧表名 TO 新表名;
    

    具体操作:

    • 将学生表student改名成student2,再删除student2表
       RENAME TABLE student TO student2;
       DROP TABLE student2;
      

    在这里插入图片描述

  2. 修改表的字符集

    ALTER TABLE 表名 DEFAULT CHARACTER SET 新字符集;
    

    具体操作:

    • 将sutden2表的编码修改成gbk
      ALTER TABLE student2 character set gbk;
      
      在这里插入图片描述

小结

  1. 所有修改表前面的语法都是相同的?

    ALTER TABLE 表名 XXXX;
    
  2. 添加一列:

    ALTER TABLE 表名 ADD 字段名 字段类型;
    
  3. 修改类型:

    ALTER TABLE 表名 MODIFY 字段名 新的类型;
    
  4. 修改字段名和类型:

    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
    
  5. 删除一列:

    ALTER TABLE 表名 DROP 字段名;
    

DML插入记录(重点)

目标

学习DML往表中添加记录

讲解

DML是对表中的数据进行增删改

创建student表包含id,name,birthday,sex,address字段。

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE,
      sex char(2),
      address varchar(50)
);
插入全部字段
  • 所有的字段名都写出来

    INSERT INTO:表示添加数据
    
    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2);
    
  • 不写字段名

    INSERT INTO 表名 VALUES (字段值1, 字段值2);
    
插入部分数据
只需要指定要插入数据的字段
INSERT INTO 表名 (字段名1, 字段名2...) VALUES (字段值1, 字段值2);

没有添加数据的字段会使用NULL

  1. 具体操作:

    • 插入部分数据,往学生表中添加 id, name, age, sex数据
    INSERT INTO student (id, NAME, age, sex) VALUES (1, '张三', 20, '男');
    

在这里插入图片描述

  • 向表中插入所有字段
    • 所有的字段名都写出来
    INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '广州');
    

在这里插入图片描述

 * 不写字段名
 ```sql
 INSERT INTO student VALUES (3, '王五', 18, '男', '北京');
 ```
 [外链图片转存失败(img-GC81Ur54-1564667866233)(/添加所有字段数据.png)]
注意
  • 值与字段必须对应,个数相同,类型相同
  • 值的数据大小必须在字段的长度范围内
  • 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
  • 如果要插入空值,可以不写字段,或者插入null

小结

  1. 向表中添加一条完整记录:

    所有的字段都写出来
    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (值1, 值2...);
    
    不写字段名
    INSERT INTO 表名 VALUES (值1, 值2...);
    
  2. 向表中添加一条记录部分列

    写要添加数据的字段即可
    INSERT INTO 表名 (字段名1, 字段名2...) VALUES (值1, 值2...);
    

DOS命令窗口操作数据乱码问题

目标

学习解决DOS命令行乱码

讲解

当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码,导致SQL执行失败
在这里插入图片描述
错误原因:因为MySQL的客户端设置编码是utf8,而系统的DOS命令行编码是gbk,编码不一致导致的乱码
在这里插入图片描述

解决方案:

  1. 快捷设置
    在DOS命令行输入:
    set names gbk;
    

注意:以上方式为临时方案,退出DOS命令行就失效了,需要每次都配置

  1. 修改MySQL安装目录下的my.ini文件,重启服务所有地方生效。此方案将所有编码都修改了[不建议]
    在这里插入图片描述

小结

如何解决DOS命令行乱码

在DOS命令行输入:
set names gbk;

DML更新表记录

目标

学习DML更新表记录

讲解

  1. 不带条件修改数据

    UPDATE 表名 SET 字段名=新的值;
    
  2. 带条件修改数据

    UPDATE 表名 SET 字段名=新的值 WHERE 字段名=;
    
  3. 关键字说明

    UPDATE:表示修改
    
  4. 具体操作:

    • 不带条件修改数据,将所有的性别改成女
      UPDATE student SET sex='女';
      

    在这里插入图片描述

    • 带条件修改数据,将id号为2的学生性别改成男
      UPDATE student SET sex='男' WHERE id=2;
      

    在这里插入图片描述

    • 一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京
      UPDATE student SET age=26, address='北京' WHERE id=3;
      

    在这里插入图片描述

小结

  1. 不带条件的更新数据库记录

    UPDATE 表名 SET 字段名=新的值;
    
  2. 带条件更新数据库记录

    UPDATE 表名 SET 字段名=新的值 WHERE 条件;
    

DML删除表记录

目标

学习DML删除表记录

讲解

  1. 带条件删除数据

    DELETE FROM 表名 WHERE 字段名=;
    
  2. 不带条件删除数据

    DELETE FROM 表名;
    
  3. 具体操作:

    • 带条件删除数据,删除id为3的记录

      DELETE FROM student WHERE id=3;
      

      在这里插入图片描述

    • 不带条件删除数据,删除表中的所有数据

      DELETE FROM student;
      

    在这里插入图片描述

小结

  1. 指定条件删除

    DELTE FROM 表名 WHERE 字段名=值;
    
  2. 没有条件删除所有的记录

    DELTE FROM 表名;
    

数据库约束的概述

目前根据字段的类型可以对数据进行限制,但是这个限制不够全面。

目标

学习数据库约束的作用

讲解

数据库约束的作用

​ 对表中的数据进行进一步的限制,保证数据的正确性有效性完整性

约束种类
  • PRIMARY KEY: 主键约束
  • UNIQUE: 唯一约束
  • NOT NULL: 不为空
  • DEFAULT: 默认约束
  • FOREIGN KEY: 外键约束

小结

  1. 数据库约束的作用?

    对表中的数据进一步的限制,保证数据正确性,完整性,有效性

主键约束

目标

  1. 学习主键约束的作用
  2. 学习加和删除主键约束
为什么需要主键约束

有些记录的 name,age,score 字段的值都一样时,那么就没法区分这些数据,造成数据库的记录不唯一,这样就不方便管理数据。
在这里插入图片描述
在这里插入图片描述

每张表都应该有一个主键,并且每张表只能有一个主键。

主键的作用

区分表中的记录

哪个字段作为表的主键

通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。

在这里插入图片描述

创建主键

主键:PRIMARY KEY
主键的特点

  • 主键必须包含唯一的值
  • 主键不能包含NULL值

创建主键方式

  1. 在创建表的时候给字段添加主键

    CREATE TABLE 表名 (
    	字段名 字段类型 PRIMARY KEY,
    	字段名 字段类型
    );
    
  2. 在已有表中添加主键

    ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
    

具体操作:

  • 创建表学生表st5, 包含字段(id, name, age)将id做为主键
CREATE TABLE st5 (
	id INT PRIMARY KEY, -- id是主键
	NAME VARCHAR(20),
	age INT
);

在这里插入图片描述

  • 添加数据
INSERT INTO st5 (id, NAME) VALUES (1, '唐伯虎');
INSERT INTO st5 (id, NAME) VALUES (2, '周文宾');
INSERT INTO st5 (id, NAME) VALUES (3, '祝枝山');
INSERT INTO st5 (id, NAME) VALUES (4, '文征明');
  • 插入重复的主键值
-- 主键是唯一的不能重复:Duplicate entry '1' for key 'PRIMARY'
INSERT INTO st5 (id, NAME) VALUES (1, '文征明2');
  • 插入NULL的主键值
-- 主键是不能为空的:Column 'id' cannot be null
INSERT INTO st5 (id, NAME) VALUES (NULL, '文征明3');
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;

具体操作:

  • 删除st5表的主键
ALTER TABLE st5 DROP PRIMARY KEY;

在这里插入图片描述

小结

  1. 说出主键约束的作用?区分表中的记录

  2. 主键的特点?不能重复,不能为空

  3. 添加和删除主键?

创建表时添加主键
CREATE TABLE 表名 (
	字段名 字段类型 PRIMAYR KEY,
	字段名 字段类型
);
在已有表上添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;

主键自增

目标

学习主键为自动增长

讲解

​ 主键让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值

字段名 字段类型 PRIMARY KEY AUTO_INCREMENT

AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

具体操作:

  • 创建学生表st6, 包含字段(id, name, age)将id做为主键并自动增长
CREATE TABLE st6 (
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT
);
  • 插入数据
-- 主键默认从1开始自动增长
INSERT INTO st6 (NAME, age) VALUES ('唐僧', 22);
INSERT INTO st6 (NAME, age) VALUES ('孙悟空', 26);
INSERT INTO st6 (NAME, age) VALUES ('猪八戒', 25);
INSERT INTO st6 (NAME, age) VALUES ('沙僧', 20);

在这里插入图片描述

扩展
默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法

ALTER TABLE 表名 AUTO_INCREMENT=起始值;

DELETETRUNCATE的区别

  • DELETE 删除表中的数据,但不重置AUTO_INCREMENT的值。
    在这里插入图片描述

  • TRUNCATE 摧毁表,重建表,AUTO_INCREMENT重置为1
    在这里插入图片描述

小结

  1. 设置主键为自动增长格式?

    字段名 字段类型 PRIMARY KEY AUTO_INCREMENT
    

唯一约束

目标

  1. 学习唯一约束的作用
  2. 学习添加唯一约束
唯一约束的作用

这个字段的值不能够重复

唯一约束的格式
CREATE TABLE 表名 (
	字段名 字段类型 UNIQUE,
	字段名 字段类型
);

具体步骤:

  • 创建学生表st7, 包含字段(id, name),name这一列设置唯一约束,不能出现同名的学生
CREATE TABLE st7 (
	id INT,
	NAME VARCHAR(20) UNIQUE
);
  • 添加一些学生
INSERT INTO st7 VALUES (1, '貂蝉');
INSERT INTO st7 VALUES (2, '西施');
INSERT INTO st7 VALUES (3, '王昭君');
INSERT INTO st7 VALUES (4, '杨玉环');

-- 插入相同的名字出现name重复: Duplicate entry '貂蝉' for key 'name'
INSERT INTO st7 VALUES (5, '貂蝉');

-- 出现多个null的时候会怎样?因为null是没有值,所以不存在重复的问题
INSERT INTO st3 VALUES (5, NULL);
INSERT INTO st3 VALUES (6, NULL);

小结

  1. 说出唯一约束的作用?

    这个字段的值不能够重复
    
  2. 添加唯一约束格式?

    字段名 字段类型 UNIQUE
    

非空约束

目标

  1. 学习非空约束的作用
  2. 学习添加非空约束
非空约束的作用

限制表中数据不能为空

非空约束的语法格式
CREATE TABLE 表名 (
	字段名 字段类型 NOT NULL,
	字段名 字段类型
);

具体操作:

  • 创建表学生表st8, 包含字段(id,name,gender)其中name不能为NULL
CREATE TABLE st8 (
	id INT,
	NAME VARCHAR(20) NOT NULL,
	gender CHAR(2)
);
  • 添加一些完整的记录
INSERT INTO st8 VALUES (1, '郭富城', '男');
INSERT INTO st8 VALUES (2, '黎明', '男');
INSERT INTO st8 VALUES (3, '张学友', '男');
INSERT INTO st8 VALUES (4, '刘德华', '男');

-- 姓名不赋值出现姓名不能为null: Column 'name' cannot be null
INSERT INTO st8 VALUES (5, NULL, '男');

小结

非空约束的格式:

CREATE TABLE 表名 (
	字段名 字段类型 NOT NULL,
	字段名 字段类型
);

扩展: 主键唯一,非空,普通的字段我们也可以添加唯一和非空.有区别吗?

1.一张表只能有一个主键,可以有多个唯一非空的字段
2.主键可以自动增长,普通字段不行

默认值

目标

  1. 学习默认值的作用
  2. 学习给字段添加默认值

讲解

默认值的作用

如果这个字段不设置值,就使用默认值。

默认值格式
CREATE TABLE 表名 (
	字段名 字段类型,
	字段名 字段类型 DEFAULT 默认值
);

具体步骤:

  • 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州
CREATE TABLE st9 (
	id INT,
	NAME VARCHAR(20),
	address VARCHAR(50) DEFAULT '广州'
);
  • 添加一条记录,使用默认地址
INSERT INTO st9 (id, NAME) VALUES (1, '刘德华');

在这里插入图片描述

  • 添加一条记录,不使用默认地址
INSERT INTO st9 VALUES (2, '张学友', '香港');

小结

  1. 说出默认值的作用?

    这个字段不设置值,使用默认值
    
  2. 给字段添加默认值格式?

    字段名 字段类型 DEFAULT 默认值
    

DQL没有条件的简单查询

目标

学习DQL简单查询

讲解

注意:查询不会对数据库中的数据进行修改,只是一种显示数据的方式。

查询表中所有列数据
  1. 写出查询每列的名称
SELECT 字段名1, 字段名2,... FROM 表名;

具体操作:

SELECT id, NAME ,age, sex, address FROM student;

在这里插入图片描述

  1. 使用*表示所有列

    SELECT * FROM 表名;
    

    具体操作:

    SELECT * FROM student;
    

在这里插入图片描述

查询表中指定列数据

查询指定列的数据,多个列之间以逗号分隔

SELECT 字段名1, 字段名2 FROM 表名;

具体操作:
查询student表中的name 和 age 列

SELECT NAME, age FROM student;

在这里插入图片描述

别名查询
  1. 查询时给列、表指定别名需要使用AS关键字

  2. 使用别名的好处是方便观看和处理查询到的数据

    SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
    

注意

查询给表取别名目前还看不到效果,需要到多表查询的时候才能体现出好处
AS关键字可以省略

  1. 具体操作:
    • 查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”
    SELECT NAME AS 姓名, age AS 年龄 FROM student;
    

在这里插入图片描述

清除重复值
  1. 查询指定列并且结果不出现重复数据

    SELECT DISTINCT 字段名 FROM 表名;
    
  2. 具体操作:

    • 查询address列并且结果不出现重复的address
    SELECT DISTINCT address 城市 FROM student;
    

在这里插入图片描述

查询结果参与运算
  1. 某列数据和固定值运算

    SELECT 字段名 + 数值 FROM 表名;
    
  2. 某列数据和其他列数据参与运算

    SELECT 字段1 + 字段2 FROM 表名;
    

    注意: 参与运算的必须是数值类型

  3. 需求:

    • 添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩
    • 查询的时候将数学和英语的成绩相加
  4. 实现:

  • 修改student表结构,添加数学和英语成绩列

    ALTER TABLE student ADD math INT;
    ALTER TABLE student ADD english INT;
    
  • 给每条记录添加对应的数学和英语成绩

  • 查询math + english的和

    SELECT math + english FROM student;
    

在这里插入图片描述

结果确实将每条记录的math和english相加,但是效果不好看

  • 查询math + english的和使用别名”总成绩”
    SELECT math + english 总成绩 FROM student;
    

在这里插入图片描述

  • 查询所有列与math + english的和并使用别名”总成绩”
    SELECT *, math + english 总成绩 FROM student;
    

在这里插入图片描述

  • 查询姓名、年龄,将每个人的数学增加10分
    SELECT name, math + 10 FROM student;
    

小结

  1. 简单查询格式

    SELECT 字段名 FROM 表名;
    
  2. 定义别名

    SELECT 字段名 AS 别名 FROM 表名;
    SELECT 字段名 别名 FROM 表名;
    
  3. 去除重复行

    SELECT DISTINCT 字段名 FROM 表名;
    
DML语句操作关键字
添加INSERT INTO 表名 (字段名) VALUES (值);
修改UPDATE 表名 SET 字段名=新的值;
删除DELETE FROM 表名;
查询SELECT * FROM 表名;

蠕虫复制

目标

了解蠕虫复制

讲解

什么是蠕虫复制:将一张表的数据复制,插入到另一张表中
语法格式:

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

作用:将表名2中的数据复制到表名1

具体操作:

  • 创建student2表,student2结构和student表结构一样
CREATE TABLE student2 LIKE student;
  • 将student表中的数据添加到student2表中
INSERT INTO student2 SELECT * FROM student;

注意:如果只想复制student表中name,age字段数据到student2表中使用如下格式
INSERT INTO student2(NAME, age) SELECT NAME, age FROM student;
在这里插入图片描述

小结

蠕虫复制语法格式:

INSERT INTO 表名1 SELECT * FROM 表名2; 从表名2中查询出数据添加到表名1里面

DQL查询语句-条件查询

前面我们的查询都是将所有数据都查询出来,但是有时候我们只想获取到满足条件的数据

目标

学习条件查询语法格式

讲解

语法格式:

SELECT 字段 FROM 表名 WHERE 条件;

流程:取出表中满足条件的记录

准备数据
CREATE TABLE student3 (
  id int,
  name varchar(20),
  age int,
  sex varchar(5),
  address varchar(100),
  math int,
  english int
);

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
比较运算符

>大于
<小于
<=小于等于
>=大于等于
=等于
<>!=不等于

具体操作:

  • 查询math分数大于80分的学生
SELECT * FROM student3 WHERE math>80;

在这里插入图片描述

  • 查询english分数小于或等于80分的学生
SELECT * FROM student3 WHERE english<=80;

在这里插入图片描述

  • 查询age等于20岁的学生
SELECT * FROM student3 WHERE age=20;

在这里插入图片描述

  • 查询age不等于20岁的学生
SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;

在这里插入图片描述

逻辑运算符

and(&&) 多个条件同时满足
or(||) 多个条件其中一个满足
not(!) 不满足

具体操作:

  • 查询age大于35且性别为男的学生(两个条件同时满足)
SELECT * FROM student3 WHERE  age>35 AND sex='男';

在这里插入图片描述

  • 查询age大于35或性别为男的学生(两个条件其中一个满足)
SELECT * FROM student333 WHERE age>35 OR sex='男';

在这里插入图片描述

  • 查询id是1或3或5的学生
SELECT * FROM student3 WHERE id=1 OR id=3 OR id=5;

在这里插入图片描述

in关键字
语法格式:

SELECT * FROM 表名 WHERE 字段名 in (1,2,3);

in里面的每个数据都会作为一次条件,只要满足条件的就会显示

具体操作:

  • 查询id是1或3或5的学生
SELECT * FROM student3 WHERE id IN (1,3,5);

在这里插入图片描述

  • 查询id不是1或3或5的学生
SELECT * FROM student3 WHERE id NOT IN (1,3,5);

在这里插入图片描述

范围
SELECT * FROM 表名 WHERE 字段名 BETWEEN1 AND2;

比如:age BETWEEN 80 AND 100
相当于: age>=80 && age<=100

具体操作:

  • 查询english成绩大于等于75,且小于等于90的学生
SELECT * FROM student3 WHERE english>=75 AND english<=90;
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;

在这里插入图片描述

小结

比较运算符

>
<
>=
<=
!= <>
=

逻辑运算符

&& and
|| or
! not

IN

in (值1, 值2, 值3)

BETWEEN 小值 AND 大值

模糊查询like

目标

学习模糊查询语法格式

在这里插入图片描述

讲解

LIKE 像 像什么什么一样

SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

满足通配符字符串规则的数据就会显示出来

MySQL通配符有两个:
%: 表示任意多个字符
_: 表示一个字符

具体操作:

  • 查询姓马的学生
SELECT * FROM student3 WHERE NAME LIKE '马%';

在这里插入图片描述

  • 查询姓名中包含’德’字的学生
SELECT * FROM student3 WHERE NAME LIKE '%德%';

在这里插入图片描述

  • 查询姓马,且姓名有三个字的学生
SELECT * FROM student3 WHERE NAME LIKE '马__';

在这里插入图片描述

小结

模糊查询格式

SELECT * FROM 表名 WHERE 字段名 LIKE '通配符';

%: 表示任意多个字符
_: 表示一个字符

DQL查询语句-排序

目标

学习对查询的数据进行排序
在这里插入图片描述

讲解

通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名 [ASC|DESC];

[]表示可以不要
|表示二选一

ASC: 升序(默认的)
DESC: 降序

1.2.1 单列排序

单列排序就是使用一个字段排序

具体操作:

  • 查询所有数据,使用年龄降序排序
select * FROM student3 order by age DESC;

在这里插入图片描述

1.2.2 组合排序

组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。
上面的例子中,年龄是有相同的。当年龄相同再使用math进行排序

SELECT * FROM 表名 WHERE 条件 ORDER BY 字段名 [ASC|DESC], 字段名 [ASC|DESC];

具体操作:

  • 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序
SELECT * FROM student3 ORDER BY age DESC, math DESC;

在这里插入图片描述

小结

  1. 排序的关键字

    ORDER BY 字段名 [ASC|DESC]
    
  2. 升序:ASC 默认的

  3. 降序:DESC

DQL查询语句-聚合函数

目标

学习五个聚合函数的使用

讲解

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值NULL。

五个聚合函数:
count: 统计指定列记录数,记录为NULL的不统计
sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max: 计算指定列的最大值
min: 计算指定列的最小值
avg: 计算指定列的平均值

聚合函数的使用:写在 SQL语句SELECT字段名的地方

SELECT 字段名, 字段名 FROM 表名;
SELECT 聚合函数 FROM 表名;

具体操作:

  • 查询学生总数
SELECT COUNT(english) FROM student3;

在这里插入图片描述
我们发现对于NULL的记录不会统计

统计数量常用:

SELECT COUNT(*) FROM student3;

在这里插入图片描述

  • 查询年龄大于40的总数
SELECT COUNT(*) FROM student3 WHERE age>40;

在这里插入图片描述

  • 查询数学成绩总分
SELECT SUM(math) FROM student3;

在这里插入图片描述

  • 查询数学成绩最高分
SELECT MAX(math) FROM student3;

在这里插入图片描述

  • 查询数学成绩最低分
SELECT MIN(math) FROM student3;

在这里插入图片描述

  • 查询数学成绩平均分
SELECT AVG(math) FROM student3;
SELECT FORMAT(AVG(math),2) FROM student3;
FORMAT(x,d)限制小数点后有几位数
x:对象,即聚能函数
d:限制小数点后有几位数

在这里插入图片描述

小结

函数作用
sum(列名)求和
count(列名)统计个数
max(列名)获取最大值
min(列名)获取最小值
avg(列名)获取平均值

DQL查询语句-分组

目标

学习对查询后的结果进行分组
在这里插入图片描述

讲解

分组查询是指使用 GROUP BY语句对查询信息进行分组

SELECT * FROM 表名 WHERE 条件 GROUP BY 字段名;

GROUP BY怎么分组的?
将分组字段结果中相同内容作为一组

SELECT * FROM student3 GROUP BY sex;

这句话会将sex相同的数据作为一组
在这里插入图片描述

GROUP BY将分组字段的相同值作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。

分组后聚合函数的作用?不是操作所有数据,而是分别操作每组数据

SELECT SUM(math), sex FROM student3 GROUP BY sex;

效果如下:
在这里插入图片描述

实际上是将每组的math进行求和,返回每组统计的结果
在这里插入图片描述

注意事项:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

  • 查询的时候没有查询出分组字段
    [外链图片转存失败(img-fWlyYxhT-1564667866256)(/)]
  • 查询的时候查询出分组字段
    在这里插入图片描述

具体步骤:

  • 按性别分组
SELECT sex FROM student3 GROUP BY sex;

在这里插入图片描述

  • 查询男女各多少人
1.查询所有数据,按性别分组
2.统计每组人数
SELECT sex, COUNT(*) FROM student3 GROUP BY sex;

在这里插入图片描述

  • 查询年龄大于25岁的人,按性别分组,统计每组的人数
1.先过滤掉年龄小于25岁的人
2.再分组
3.最后统计每组的人数
SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex;

在这里插入图片描述

  • 查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据
    有很多同学可能会将SQL语句写出这样:

    SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex WHERE COUNT(*) >2;
    

注意: 并只显示性别人数>2的数据属于分组后的条件,对于分组后的条件需要使用having子句

SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2;
只有分组后人数大于2``这组数据显示出来

在这里插入图片描述

having与where的区别

  • having是在分组后对数据进行过滤
  • where是在分组前对数据进行过滤
  • having后面可以使用聚合函数
  • where后面不可以使用聚合函数

小结

  1. 分组的语法格式?

    SELECT * FROM 表名 WHERE 条件 GROUP BY 字段;
    
  2. 分组的原理?

    将某个字段中相同的数据作为一组,返回每组的第一条数据,意义不大(通常分组和聚合函数一起使用)
    
  3. where和having的区别?

  • having是在分组后对数据进行过滤
  • where是在分组前对数据进行过滤
  • having后面可以使用聚合函数
  • where后面不可以使用聚合函数

DQL查询语句-limit语句

目标

能够掌握limit语句的使用

在这里插入图片描述

讲解

准备数据:

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES 
(9,'唐僧',25,'男','长安',87,78),
(10,'孙悟空',18,'男','花果山',100,66),
(11,'猪八戒',22,'男','高老庄',58,78),
(12,'沙僧',50,'男','流沙河',77,88),
(13,'白骨精',22,'女','白虎岭',66,66),
(14,'蜘蛛精',23,'女','盘丝洞',88,88);

LIMIT限制的意思,所以LIMIT的作用就是限制查询记录的条数。

LIMIT语句格式:

SELECT * FROM 表名 WHERE 条件 LIMIT offset, length;

offset是指偏移量,可以认为是跳过的记录数量,不写则默认为0。
length是指需要显示的总记录数

具体步骤:

  • 查询学生表中数据,跳过前面2条,显示6条
我们可以认为跳过前面2条,取6条数据
SELECT * FROM student3 LIMIT 2,6;

在这里插入图片描述

LIMIT的使用场景:分页

比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。假设我们一每页显示5条记录的方式来分页。
在这里插入图片描述

假设我们一每页显示5条记录的方式来分页,SQL语句如下:

-- 每页显示5条
-- 第一页: LIMIT 0,5;	跳过0条,显示5条
-- 第二页: LIMIT 5,5;  跳过5条,显示5条
-- 第三页: LIMIT 10,5; 跳过10条,显示5条
SELECT * FROM student3 LIMIT 0,5;
SELECT * FROM student3 LIMIT 5,5;
SELECT * FROM student3 LIMIT 10,5;

在这里插入图片描述

注意

  • 如果第一个参数是0可以简写:
    SELECT * FROM student3 LIMIT 0,5;
    SELECT * FROM student3 LIMIT 5;
  • LIMIT 10,5; – 不够5条,有多少显示多少

小结

  1. LIMIT语句的使用格式?

    SELECT 字段名 FROM 表名 LIMIT 跳过条数, 显示条数;
    
  2. SELECT 字段名 FROM 表名 WHERE 条件 GROUP BY 分组列名 HAVING 条件 ORDER BY 排序列名 LIMIT 跳过行数, 返回行数;
    

在这里插入图片描述

总结

  1. 能够理解数据库的概念
    存储数据的仓库

  2. 能够安装MySQL数据库
    解压复制,配置信息
    下一步, 端口号, 密码, utf8编码,加入环境变量

  3. 能够启动,关闭及登录MySQL
    启动,关闭MySQL: 找到服务,右键-> 启动和停止
    登录MySQL: mysql -uroot -proot

  4. 能够使用SQL语句操作数据库(DDL)
    创建数据库: CREATE DATABASE 数据库名;
    查看所有数据库: SHOW DATABASES;
    删除数据库: DROP DATABASE 数据库名;
    切换数据库: USE 数据库名;

  5. 能够使用SQL语句操作表结构
    创建表: CREATE TABLE 表名 (字段名 字段类型, 字段名 字段类型…);
    查看所有表: SHOW TABLES;
    修改表: ALTER TABLE 表名 xxx;
    添加一列: ADD 字段名 字段类型;
    修改字段类型: MODIFY 字段名 新的类型;
    修改字段名: CHANGE 旧字段名 新字段名 类型;
    删除一列: DROP 字段名;
    修改表名: RENAME TABLE 旧表名 TO 新表名;
    删除表: DROP TABLE 表名;

  6. 能够使用SQL语句进行数据的添加修改和删除的操作(DML)
    添加数据: INSERT INTO 表名 (字段名1, 字段名2) VALUES (值1, 值2);
    修改数据: UPDATE 表名 SET 字段名=值;
    删除数据: DELETE FROM 表名;

  7. 能够使用SQL语句简单查询数据
    SELECT 字段名 FROM 表名;

在这里插入图片描述

能够使⽤用SQL语句句进⾏行行排序

SELECT 字段名 FROM 表名 WHERE 条件 ORDER BY 字段 [ASC|DESC];

能够使⽤用聚合函数

count: 统计数量
sum: 求和
max: 最大值
min: 最小值
avg: 平均值

能够使⽤用SQL语句句进⾏行行分组查

SELECT 字段名 FROM 表名 WHERE 条件 GROUP BY 字段名;
根据字段的值相同的作为一组,返回每组的第一条数据,分组通常和聚合函数一起使用

能够使⽤用SQL语句句添加主键、外键、唯⼀一、⾮非空约束

主键: PRIMARY KEY
唯⼀: UNIQUE
非空约束: NOT NULL
默认约束:DEFAULT 默认值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值