----> B站MySQL数据库视频 <----视频点击这里哦

1.数据库的基本概念

  1)数据库的英文单词:DataBase 简称:DB
  2)什么是数据库?
    用于存储和管理数据的仓库(内存也存储数据是临时性数据,关机或断电数据就消失了,数据不能持久)
  3)数据库的特点
    1.持久化存储数据的,其实数据库就是一个文件系统,类似1.txt文件方式存储(与文件存储一样)
    2.方便存储和管理数据
    3.使用了统一的方式操作数据库 ----- 即SQL语句
  4)常见的数据库软件
    数据库与数据库软件:类似买汽车,具体品牌具体型号的汽车才是真正的汽车产品,类似宝马X3才是具体化的车产品(类似:汽车=数据库、宝马x3=mysql5.8)
MySqL:开源免费的数据库,小型的数据库。MySqL6.x版本也开始收费。
Qracle:收费的大型数据库,Oracle公司的产品,SUN公司收购了MySQL,Oracle又收购了SUN公司(所以MySQL也变成了Oracle公司的产品)
DB2:IBM公司的数据库产品,常应用于银行系统中
SQLServer:微软公司收费的中型数据库
SQLite:嵌入式的小型数据库,应用在手机端,保存浏览器用户的配置信息

2.MySQL数据库软件

  1)MySQL安装

0
选择与电脑相对应的64位操作系统
0
下载的MySQL软件包版本尾号64或32要与电脑的操作系统版本保持一致
0
0
 0
0
注意:下面自定义安装目录名称不要有中文字符
0
0
0
0
不同电脑会由于分辨率与不兼容问题,导致下面安装框不在屏幕内,使用TAB键可以切换选项,再回车安装
下面勾选:是否运行MySQL的运行实例,点击完成后,出现配置界面
0
0
0
0
0
0
0

 

下图密码为第一个:root,第二个为确认密码:root

0
当点击Execute后,下面4个选项头部圆圈内出现蓝色√号即为安装成功,出现红色×号,即为相应步骤安装失败
0
0
遇到报错:Dindows+r
0
0
  1.清理以下三个目录:
    a. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL
    b. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL
    c. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL
MySQL注册表中的ControlSet001,ControlSet002,不一定是001和002,可能是ControlSet005、006之类,删除的时候,都删除就可以
2.检查C:\WINDOWS目录下是否有my.ini文件,将其删除
3.在c盘查询MySQL(可能会隐藏,显示隐藏文件就行了),全部删除
4.重新安装MySQL,配置过程中选择之前未用过的名字(MySql4,若仍使用原来的MySql,则无法启动服务)

  2)MySQL卸载

    mysql的安装目录找到my.ini
    复制“datadir=/ProgramData”行,默认安装到C盘,找到对应的目录
    卸载mysql
0
0
删除C盘下:/ProgramData目录下的MySQL文件夹

  3)MySQL配置

    MySQL启动

      1.手动
      2.cmd-->services.msc 打开服务窗口
0
0
3.使用管理员打开cmd,启动MySQL:net start mysql <-->停止MySQL:net stop mysql
0

MySQL登录

第一种:mysql -uroot -proot
-u指定登陆用户,-p登录密码,使用root用户登录,密码是自己设置的root
0
mysql -uroot -p 回车,密文输入密码
0
第二种:mysql -h127.0.0.1 -uroot -p连接目标的密码
-h连接目标的IP,下面案例为连接本地127.0.0.1
0
第三种:mysql --host=127.0.0.1 --user=root --password=root
0

MySQL退出

exit、quit,下图演示exit效果,quti相同的效果,切记:Ctrl+c为强制中断服务退出,会中断MySQL服务。
0

MySQL目录结构

安装目录

my.ini存放配置文件信息
0
bin        二进制目录,存放二进制的可执行文件
data      数据目录,存放日志文件、数据文件
include 存放C语言头信息
lib         存放MySQL运行需要的库文件
share    存放MySQL的一些错误信息

数据目录

C:\ProgramData\MySQL 默认是隐藏的,可以在<查看>中设置,显示隐藏文件
0
数据库就是一个文件夹,表就是对应数据库(文件夹)内的文件
数据库:文件夹
表:文件
数据:文件内存储的数据

3.SQL语句

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

  1)什么是SQL

    SQL其实就是定义了操作所有关系型数据库的规则,每一种数据库操作的方式存在不一样的地方,称为“方言”,类似家乡话只有故乡的人才能听懂。

  2)SQL通用语法

    1.SQL语句可以单行或多行书写,以分号;结尾
    2.可使用空格和缩进来增强语句的可读性
    3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
    4.3种注释
      单行注释:-- 注释内容 或 # 注释内容(mysql特有,注意--后面要接一个空格,#后面可接可不接)
      多行注释:/* 注释 */
mysql> SHOW DATABASES;-- 查询数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
mysql> SHOW DATABASES;# 查询数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
mysql> SHOW DATABASES;#查询数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
mysql> SHOW DATABASES;/* 查询数据库 */
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

3)SQL分类

  1)DDL(Data Definition Languge)数据定义语言
    用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等
  2)DML(Data Manipulation Languge)数据操作语言
    用来对数据库中表的数据进行增删改。关键字:insert,delete,update等
  3)DQL(Data Query Languge)数据查询语言
    用来查询数据库中表的记录(数据)。关键字:select,where等
  4)DCL(Data Control Languge)数据控制语言
    用来定义数据库的访问权限和安全级以及创建用户,关键字:GRANT,REVOKE等

4.DDL:操作数据库、表

1)操作数据库:CRUD

  1.C(Create):创建,添加,新增

    ①CREATE DATABASE 数据库名称;
mysql> CREATE DATABASE db1;
Query OK, 1 row affected (0.01 sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec) mysql> SHOW CREATE DATABASE db1; # 查询创建数据库语句 +----------+--------------------------------------------------------------+ | Database | Create Database | +----------+--------------------------------------------------------------+ | db1 | CREATE DATABASE db1 /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+--------------------------------------------------------------+ 1 row in set (0.00 sec)

mysql> CREATE DATABASE db1; # 再次创建会报错1007
ERROR 1007 (HY000): Can't create database 'db1'; database exists

     ②创建数据库,判断不存在再创建,已存在不报错

mysql> CREATE DATABASE if not exists db1; # 加上if判断,创建数据库,如果已存在不报错,如果不存在则创建
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
mysql> CREATE DATABASE if not exists db2; # 加上判断创建新的数据库
Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES;# db2之前不存在,创建成功
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| db2                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

    ③创建数据库并指定字符集

mysql> CREATE DATABASE db3 character set gbk;
Query OK, 1 row affected (0.00 sec)
mysql> SHOW CREATE DATABASE db3;
+----------+-------------------------------------------------------------+
| Database | Create Database                                             |
+----------+-------------------------------------------------------------+
| db3      | CREATE DATABASE db3 /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+-------------------------------------------------------------+
1 row in set (0.00 sec)

     ④创建数据库,判断不存在再创建,已存在不报错并指定字符集

mysql> CREATE DATABASE if not exists db4 character set gbk;
Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| db2                |
| db3                |
| db4                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)
mysql> SHOW CREATE DATABASE db4;
+----------+-------------------------------------------------------------+
| Database | Create Database                                             |
+----------+-------------------------------------------------------------+
| db4      | CREATE DATABASE db4 /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+-------------------------------------------------------------+
1 row in set (0.00 sec)

  2.R(Retrieve):查询

    ①查询所有数据库名称
      SHOW DATABASES;
    information schema库:描述mysql数据库中的信息,有哪些库哪些表名字,并不存在真正对应的物理文件
    mysql库:核心数据库,存放核心数据
    performamce_ schema库:性能库,对性能提升做操作的库

    ②查询某个数据库的字符集、查询某个数据库的创建语句

      SHOW CREATE DATABASE 数据库名称;
mysql> SHOW CREATE DATABASE mysql;  # 查询创建mysql数据库的语法
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| mysql    | CREATE DATABASE mysql /*!40100 DEFAULT CHARACTER SET utf8 */ |   # /**/注释,安装数据库时默认选择字符集为utf8
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)

  3.U(Update):修改

    ①修改数据库字符集
      ALTER DATABASE 数据库名称 character set 新字符集名称;
mysql> SHOW CREATE DATABASE db3;
+----------+-------------------------------------------------------------+
| Database | Create Database                                             |
+----------+-------------------------------------------------------------+
| db3      | CREATE DATABASE db3 /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+-------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> ALTER DATABASE db3 character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> SHOW CREATE DATABASE db3;
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| db3      | CREATE DATABASE db3 /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)

   4.D(Delete):删除

    ①DROP DATABASE 数据库名称;
mysql> DROP DATABASE db3;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| db2                |
| db4                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
7 rows in set (0.00 sec)
mysql> DROP DATABASE db3;# 不能重复删除,会报错
ERROR 1008 (HY000): Can't drop database 'db3'; database doesn't exist

    ②删除数据库,判断存在则删除,不存在不报错

mysql> DROP DATABASE if exists db3;# 即使db3数据库已不存在也不报错
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> DROP DATABASE if exists db4;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW DATABASES;# db4数据库已删除
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| db2                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

  5.使用数据库

    类似点击windows中的文件目录进入到文件目录中才能操作文件目录下的文件
    ①查询正在使用的数据库名称
      SELECT DATABASE();
mysql> SELECT DATABASE();# 此时还未使用数据库,所以不显示
+------------+
| DATABASE() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

   ②使用数据库USE

     USE 数据库名称;
mysql> USE db1;# 使用、切换数据库
Database changed
mysql> SELECT DATABASE();# 当前使用数据库名称
+------------+
| DATABASE() |
+------------+
| db1        |
+------------+
1 row in set (0.00 sec)

2)操作表

  1.C(Create):创建,添加,新增

    ①语法:
      CREATE TABLE 表名(
                  列名1 数据类型1,
                  列名2 数据类型2,
                  ...........
                  列名n 数据类型n
      );
    注意:最后一列,不需要逗号(,)
    ②数据类型:
      1.int(integer) 整数类型
        age int,
      2.double 小数类型
        score double(5,2)    其中5 最多小数点后5位,2 小数点后保留2位小数
      3.data 日期类型,只包含年月日,yyyy-MM-dd
      4.datatime 日期,包含年月日时分秒yyyy-MM-dd HH:mm:ss
      5.timestamp 时间戳类型,包含年月日时分秒yyyy-MM-dd HH:mm:ss
        如果指定是timestamp字段,若将来不给这个字段赋值或赋值为null,则默认使用当前的系统时间来自动赋值
      6.varchar 字符串类型,超过规定最大字符串长度会报错
        name varchar(20):表示姓名最大20个字符
        zhangsan 8个字符 张三 2个字符
      ③创建表
        create table student(
          id int,
          name varchar(32),
          age int,
          score double(4,1),
          birthday date,
          insert_time timestamp
       );
mysql> use db1;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| db1        |
+------------+
1 row in set (0.00 sec)
mysql> create table student(     id int,     name varchar(32),     age int,     score double(4,1),     birthday date,     insert_time timestamp);
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| student       |
+---------------+
1 row in set (0.00 sec)
mysql> desc student;
+-------------+-------------+------+-----+-------------------+-----------------------------+
| Field       | Type        | Null | Key | Default           | Extra                       |
+-------------+-------------+------+-----+-------------------+-----------------------------+
| id          | int(11)     | YES  |     | NULL              |                             |
| name        | varchar(32) | YES  |     | NULL              |                             |
| age         | int(11)     | YES  |     | NULL              |                             |
| score       | double(4,1) | YES  |     | NULL              |                             |
| birthday    | date        | YES  |     | NULL              |                             |
| insert_time | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+-------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.01 sec)
    ④复制表内容
      CREATE TABLE 表名 like 被复制的表名;
mysql> CREATE TABLE stu like student;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW TABLES;
+---------------+
| Tables_in_db1 |
+---------------+
| stu           |
| student       |
+---------------+
2 rows in set (0.00 sec)

数据库与execl表格类似,当我们创建execl表格时,会先创建表名,表里有很多行,第一行为表头行,在表头行有很多列,每一列代表的含义不一样,按照每列的头部信息写入数据(头部信息例如:姓名、年龄,身高等)(数据库顺序:创建表,先指定表名、每一列名字、那一列将要存储什么样的数据格式)

2.R(Retrieve):查询

①查询数据库中所有表的名称 SHOW TABLES;
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)
mysql> USE DB1;
Database changed
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| db1        |
+------------+
1 row in set (0.00 sec)
mysql> SHOW TABLES;# 只有到对应的数据库下才能操作对应数据库下的表
Empty set (0.01 sec)
mysql> USE mysql;
Database changed
mysql> SHOW TABLES;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
............................. # 太多已省略
| user                      |
+---------------------------+
24 rows in set (0.01 sec)
    ②查询表结构
      desc 表名;
mysql> DESC host;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| Select_priv           | enum('N','Y') | NO   |     | N       |       |
| Insert_priv           | enum('N','Y') | NO   |     | N       |       |
| Update_priv           | enum('N','Y') | NO   |     | N       |       |
........................................................................# 太多已省略
+-----------------------+---------------+------+-----+---------+-------+
20 rows in set (0.01 sec)

  3.U(Update):修改

    ①修改表名
      ALTER TABLE 表名 rename to 新的表名;
mysql> SHOW TABLES;
+---------------+
| Tables_in_db1 |
+---------------+
| student       |
+---------------+
1 row in set (0.00 sec)
mysql> ALTER TABLE student rename to stu;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW TABLES;
+---------------+
| Tables_in_db1 |
+---------------+
| stu           |
+---------------+
1 row in set (0.00 sec)
    ②修改表的字符集
      SHOW CREATE TABLE stu; # 查看字符集类型
      ALTER TABLE 表名 character set 字符集类型;
mysql> SHOW CREATE TABLE stu;
+-------+----------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                  
id int(11) DEFAULT NULL,
name varchar(32) DEFAULT NULL,
age int(11) DEFAULT NULL,
score double(4,1) DEFAULT NULL,
birthday date DEFAULT NULL,
insert_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | # 此处显示字符集类型为utf8
+-------+----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> ALTER TABLE stu character set gbk; # 修改字符集类型为gbk
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> SHOW CREATE TABLE stu;
+-------+---------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                  |
+-------+---------------------------------------------------------------------------------------------------------------------+
| stu   | CREATE TABLE stu (
id int(11) DEFAULT NULL,
name varchar(32) CHARACTER SET utf8 DEFAULT NULL,
age int(11) DEFAULT NULL,
score double(4,1) DEFAULT NULL,
birthday date DEFAULT NULL,
insert_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=gbk | # 此处显示字符集类型为gbk
+-------+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
    ③添加一列
      ALTER TABLE 表名 add 列名 数据类型;
mysql> ALTER TABLE stu add gender varchar(10);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC stu;
+-------------+-------------+------+-----+-------------------+-----------------------------+
| Field       | Type        | Null | Key | Default           | Extra                       |
+-------------+-------------+------+-----+-------------------+-----------------------------+
| id          | int(11)     | YES  |     | NULL              |                             |
| name        | varchar(32) | YES  |     | NULL              |                             |
| age         | int(11)     | YES  |     | NULL              |                             |
| score       | double(4,1) | YES  |     | NULL              |                             |
| birthday    | date        | YES  |     | NULL              |                             |
| insert_time | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| gender      | varchar(10) | YES  |     | NULL              |                             |
+-------------+-------------+------+-----+-------------------+-----------------------------+
7 rows in set (0.03 sec)
    ④修改某一列名称 类型
      ALTER TABLE 表名 change 列名 新列名 新数据类型;# 既改了列名又改了类型
      ALTER TABLE 表名 modify 列名 新数据类型;# 只改了数据类型
mysql> ALTER TABLE stu change gender sex varchar(20); -- 更改了字段名称和字符串长度
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC stu;
+-------------+-------------+------+-----+-------------------+-----------------------------+
| Field       | Type        | Null | Key | Default           | Extra                       |
+-------------+-------------+------+-----+-------------------+-----------------------------+
| id          | int(11)     | YES  |     | NULL              |                             |
| name        | varchar(32) | YES  |     | NULL              |                             |
| age         | int(11)     | YES  |     | NULL              |                             |
| score       | double(4,1) | YES  |     | NULL              |                             |
| birthday    | date        | YES  |     | NULL              |                             |
| insert_time | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| sex         | varchar(20) | YES  |     | NULL              |                             |
+-------------+-------------+------+-----+-------------------+-----------------------------+
7 rows in set (0.01 sec)
mysql> ALTER TABLE stu modify sex varchar(10); -- 只更改了字符串长度
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC stu;
+-------------+-------------+------+-----+-------------------+-----------------------------+
| Field       | Type        | Null | Key | Default           | Extra                       |
+-------------+-------------+------+-----+-------------------+-----------------------------+
| id          | int(11)     | YES  |     | NULL              |                             |
| name        | varchar(32) | YES  |     | NULL              |                             |
| age         | int(11)     | YES  |     | NULL              |                             |
| score       | double(4,1) | YES  |     | NULL              |                             |
| birthday    | date        | YES  |     | NULL              |                             |
| insert_time | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| sex         | varchar(10) | YES  |     | NULL              |                             |
+-------------+-------------+------+-----+-------------------+-----------------------------+
7 rows in set (0.01 sec)
    ⑤删除列
      ALTER TABLE 表名 drop 列名;
mysql> ALTER TABLE stu drop sex;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC stu;
+-------------+-------------+------+-----+-------------------+-----------------------------+
| Field       | Type        | Null | Key | Default           | Extra                       |
+-------------+-------------+------+-----+-------------------+-----------------------------+
| id          | int(11)     | YES  |     | NULL              |                             |
| name        | varchar(32) | YES  |     | NULL              |                             |
| age         | int(11)     | YES  |     | NULL              |                             |
| score       | double(4,1) | YES  |     | NULL              |                             |
| birthday    | date        | YES  |     | NULL              |                             |
| insert_time | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+-------------+------+-----+-------------------+-----------------------------+
6 rows in set (0.01 sec)

  4.D(Delete):删除

    ①DROP TABLE 表名;
mysql> DROP TABLE stu;
Query OK, 0 rows affected (0.01 sec)
mysql> DROP TABLE stu;# 重复删除会出现报错
ERROR 1051 (42S02): Unknown table 'stu'
mysql> SHOW TABLES;# 确定已经删除
+---------------+
| Tables_in_db1 |
+---------------+
| student       |
+---------------+
1 row in set (0.00 sec)
    ②DROP TABLE if exists 表名;# 与创建一样,加入判断,不报错误
mysql> DROP TABLE IF EXISTS STU;# 加入判断不报错
Query OK, 0 rows affected, 1 warning (0.00 sec)

 5.客户端图形化工具:SQLYog

A.本博客SQL下载地址

B.其他网站下载数据库并安装

6.DML:增删改表中数据

  1)添加数据

    语法:insert into 表名(列名1,列名2,.....列名n) values(值1,值2,......值n);
注意:
  1.列名和值要一一对应
  2.如果表名后,不定义列名,则默认给所有列添加值
  3.除了数字类型,其他类型需要使用引号(单双都可以)引起来
  insert into 表名 values(值1,值2,......值n);
  INSERT into stu VALUES(2,'赵敏',17,99.9,NULL,NULL);
  INSERT into stu VALUES(3,"张三丰",17,99.9,"1893-11-11",NULL);

小提示:如果windows命令行添加汉字正常,但是查看时,显示无规则乱码,找到安装目录下的my或my.ini文件,找到[mysql] default-character-set=utf8,[mysqld] default-server-set=utf-8,改为[mysql] default-character-set=gbk,然后保持[mysqld] default-server-set=utf-8不变或改成gbk
原因: [mysql] default-character-set 是客户端默认字符集。如果采用命令行作为客户端,此字符集必须和命令行默认字符集能够匹配,否则出现中文乱码

  2)删除数据

  语法:delete from 表名 [where 条件]  意为:当条件满足时,从表里删除数据
注意:
  如果不加条件,则删除表中所有记录。
  如果要删除所有记录,
    1,delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作(操作次数多,占用线程)
    2,TRUNCATE TABLE 表名; -- 推荐使用。 效率更高,先删除表,然后再创建一张一样的表。
  DELETE FROM stu WHERE ID=1;
mysql> select * from stu;
+------+-----------+------+-------+------------+---------------------+
| id   | name      | age  | score | birthday   | insert_time         |
+------+-----------+------+-------+------------+---------------------+
|    1 | 张无忌    |   18 |  NULL | NULL       | 2022-11-01 23:27:49 |
|    2 | 赵敏      |   17 |  99.9 | NULL       | 2022-11-02 12:10:36 |
|    3 | 张三丰    |   17 |  99.9 | 1893-11-11 | 2022-11-02 13:18:46 |
+------+-----------+------+-------+------------+---------------------+
3 rows in set (0.00 sec)
mysql> DELETE FROM stu WHERE ID=1;# 删除第一条数据
Query OK, 1 row affected (0.01 sec)
mysql> select * from stu;# 查看数据确定数据已删除
+------+-----------+------+-------+------------+---------------------+
| id   | name      | age  | score | birthday   | insert_time         |
+------+-----------+------+-------+------------+---------------------+
|    2 | 赵敏       |   17 |  99.9 | NULL       | 2022-11-02 12:10:36 |
|    3 | 张三丰     |   17 |  99.9 | 1893-11-11 | 2022-11-02 13:18:46 |
+------+-----------+------+-------+------------+---------------------+
2 rows in set (0.00 sec)
mysql> DELETE FROM stu;# 后面不加条件,会默认删除所有数据
Query OK, 2 rows affected (0.01 sec)
mysql> select * from stu;# 数据已被完全删除,不推荐使用
Empty set (0.00 sec)

mysql> INSERT INTO stu(id,name,age) values(1,'zhangwuji',18);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO stu values(2,'zhaomin',17,99.9,NULL,NULL);
Query OK, 1 row affected (0.01 sec)

mysql> select * from stu;# 添加两条数据,查看数据
+------+-----------+------+-------+----------+---------------------+
| id   | name      | age  | score | birthday | insert_time         |
+------+-----------+------+-------+----------+---------------------+
|    1 | zhangwuji |   18 |  NULL | NULL     | 2022-11-02 14:02:48 |
|    2 | zhaomin   |   17 |  99.9 | NULL     | 2022-11-02 14:04:16 |
+------+-----------+------+-------+----------+---------------------+
2 rows in set (0.00 sec)
mysql> TRUNCATE TABLE stu;# 同样也是删除数据,但先删除表再创建一个一模一样的表,节省资源,效率更高
Query OK, 0 rows affected (0.01 sec)
mysql> select * from stu;# 查看数据已经被删除
Empty set (0.00 sec)
mysql> SHOW TABLES;
+---------------+
| Tables_in_db1 |
+---------------+
| stu           |
+---------------+
1 row in set (0.00 sec)

 3)修改数据

  语法:UPDATE 表名 SET 列名1=值1,列名2=值2,列名n=值n [where 条件];
  注意:
    如果不加任何条件,则会将表中所有记录数据全部修改
    UPDATE STU SET SCORE=100 WHERE ID=1;
mysql> INSERT INTO stu(id,name,age) values(1,'zhangwuji',18);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO stu values(2,'zhaomin',17,99.9,NULL,null);
Query OK, 1 row affected (0.01 sec)
mysql> select * from stu;
+------+-----------+------+-------+----------+---------------------+
| id   | name      | age  | score | birthday | insert_time         |
+------+-----------+------+-------+----------+---------------------+
|    1 | zhangwuji |   18 |  NULL | NULL     | 2022-11-02 14:24:00 |
|    2 | zhaomin   |   17 |  99.9 | NULL     | 2022-11-02 14:24:16 |
+------+-----------+------+-------+----------+---------------------+
2 rows in set (0.00 sec)
mysql> UPDATE STU SET SCORE=100 WHERE ID=1;# 基于ID更改数据内容,第一条添加分数
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from stu;
+------+-----------+------+-------+----------+---------------------+
| id   | name      | age  | score | birthday | insert_time         |
+------+-----------+------+-------+----------+---------------------+
|    1 | zhangwuji |   18 | 100.0 | NULL     | 2022-11-02 14:25:16 |
|    2 | zhaomin   |   17 |  99.9 | NULL     | 2022-11-02 14:24:16 |
+------+-----------+------+-------+----------+---------------------+
2 rows in set (0.00 sec)
mysql> UPDATE stu SET age=20,score=99,birthday='1995-07-07' where id=1;# 基于ID更改多条数据记录
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from stu;
+------+-----------+------+-------+------------+---------------------+
| id   | name      | age  | score | birthday   | insert_time         |
+------+-----------+------+-------+------------+---------------------+
|    1 | zhangwuji |   20 |  99.0 | 1995-07-07 | 2022-11-02 14:38:08 |
|    2 | zhaomin   |   17 |  99.9 | NULL       | 2022-11-02 14:24:16 |
+------+-----------+------+-------+------------+---------------------+
2 rows in set (0.00 sec)
mysql> UPDATE stu SET age=25;# 没有加任何条件
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from stu;    # 所有age数据都被更改
+------+-----------+------+-------+------------+---------------------+
| id   | name      | age  | score | birthday   | insert_time         |
+------+-----------+------+-------+------------+---------------------+
|    1 | zhangwuji |   25 |  99.0 | 1995-07-07 | 2022-11-02 14:56:52 |
|    2 | zhaomin   |   25 |  99.9 | NULL       | 2022-11-02 14:56:52 |
+------+-----------+------+-------+------------+---------------------+
2 rows in set (0.00 sec)

 7.DQL:查询数据

  1)语法:

    select
      字段列表
    from
      表名列表
    where
      条件列表
    group by
      分组字段
    having
      分组之后的条件
    order by
      排序
    limit
      分页限定

  2)基础查询

CREATE TABLE student (
   id INT, -- 编号
   NAME VARCHAR(20), -- 姓名
   age INT,-- 年龄
   sex VARCHAR(5),-- 性别
   address VARCHAR(100), -- 地址
   math INT,-- 数学
   english INT -- 英语
  );
INSERT INTO STUDENT (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);
    1.多个字段的查询
      SELECT 字段名1,字段名2... FROM student;
  注意:
    如果查询所有字段,则可以使用*来替代字段列表
      查询姓名和年龄
      SELECT NAME,age FROM student;
      SELECT
        NAME,-- 姓名
        age -- 年龄
      FROM
        student;-- 指定的表
mysql> SELECT NAME,age FROM student;
+----------+------+
| NAME     | age  |
+----------+------+
| 马云     |   55 |
| 马化腾   |   45 |
| 马景涛   |   55 |
| 柳色     |   20 |
| 柳青     |   20 |
| 刘德华   |   57 |
| 马德     |   22 |
| 德玛西亚 |   18 |
+----------+------+
8 rows in set (0.00 sec)
    2.去除重复
      去除重复的结果集:DISTINCT
      SELECT address FROM student;
      SELECT DISTINCT address FROM student;# 去除重复的结果集
      SELECT DISTINCT NAME,address FROM student;# 多列时,保证展示列的结果集完全一样才会去除重复
mysql> SELECT address FROM student;
+---------+
| address |
+---------+
| 杭州    |
| 深圳    |
| 香港    |
| 湖南    |
| 湖南    |
| 香港    |
| 香港    |
| 南京    |
+---------+
8 rows in set (0.00 sec)
mysql> SELECT DISTINCT address FROM student; # 去除重复的结果集
+---------+
| address |
+---------+
| 杭州    |
| 深圳    |
| 香港    |
| 湖南    |
| 南京    |
+---------+
5 rows in set (0.00 sec)
mysql> SELECT DISTINCT NAME,address FROM student; # 多列时,保证展示列的结果集完全一样才会去除重复
+----------+---------+
| NAME     | address |
+----------+---------+
| 马云     | 杭州    |
| 马化腾   | 深圳    |
| 马景涛   | 香港    |
| 柳色     | 湖南    |
| 柳青     | 湖南    |
| 刘德华   | 香港    |
| 马德     | 香港    |
| 德玛西亚 | 南京    |
+----------+---------+
8 rows in set (0.00 sec)
    3.计算列
    一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
    IFNULL(表达式1,表达式2) :NULL参与的运算,计算结果都为NULL
      表达式1:哪个字段需要判断是否为null
      表达式2:如果该字段为null后的替换值
      计算math和english分数之和
      SELECT NAME,math,english FROM student;
      SELECT NAME,math,english,math + english FROM student; -- 如果有NULL参与的运算,计算结果都为NULL
      SELECT NAME,math,english,math + IFNULL(english,0) FROM student;
mysql> SELECT NAME,math,english FROM student;
+----------+------+---------+
| NAME     | math | english |
+----------+------+---------+
| 马云     |   66 |      78 |
| 马化腾   |   98 |      87 |
| 马景涛   |   56 |      77 |
| 柳色     |   76 |      65 |
| 柳青     |   86 |    NULL |
| 刘德华   |   99 |      99 |
| 马德     |   99 |      99 |
| 德玛西亚 |   56 |      65 |
+----------+------+---------+
8 rows in set (0.00 sec)
mysql> SELECT NAME,math,english,math + english FROM student;-- 如果有NULL参与的运算,计算结果都为NULL
+----------+------+---------+----------------+
| NAME     | math | english | math + english |
+----------+------+---------+----------------+
| 马云     |   66 |      78 |            144 |
| 马化腾   |   98 |      87 |            185 |
| 马景涛   |   56 |      77 |            133 |
| 柳色     |   76 |      65 |            141 |
| 柳青     |   86 |    NULL |           NULL |
| 刘德华   |   99 |      99 |            198 |
| 马德     |   99 |      99 |            198 |
| 德玛西亚 |   56 |      65 |            121 |
+----------+------+---------+----------------+
8 rows in set (0.01 sec)
mysql> SELECT NAME,math,english,math + IFNULL(english,0) FROM student;
+----------+------+---------+--------------------------+
| NAME     | math | english | math + IFNULL(english,0) |
+----------+------+---------+--------------------------+
| 马云     |   66 |      78 |                      144 |
| 马化腾   |   98 |      87 |                      185 |
| 马景涛   |   56 |      77 |                      133 |
| 柳色     |   76 |      65 |                      141 |
| 柳青     |   86 |    NULL |                       86 |
| 刘德华   |   99 |      99 |                      198 |
| 马德     |   99 |      99 |                      198 |
| 德玛西亚 |   56 |      65 |                      121 |
+----------+------+---------+--------------------------+
8 rows in set (0.00 sec)
    4.起别名
    起别名:AS:as也可以省略
      SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student;# 使用AS起别名
      SELECT NAME 姓名,math 数学,english 英语,math + IFNULL(english,0) 总分 FROM student;# 或使用空格,可省略AS
mysql> SELECT NAME,math,english,math + IFNULL(english,0) AS 总分 FROM student;
+----------+------+---------+------+
| NAME     | math | english | 总分 |
+----------+------+---------+------+
| 马云     |   66 |      78 |  144 |
| 马化腾   |   98 |      87 |  185 |
| 马景涛   |   56 |      77 |  133 |
| 柳色     |   76 |      65 |  141 |
| 柳青     |   86 |    NULL |   86 |
| 刘德华   |   99 |      99 |  198 |
| 马德     |   99 |      99 |  198 |
| 德玛西亚 |   56 |      65 |  121 |
+----------+------+---------+------+
8 rows in set (0.01 sec)
mysql> SELECT NAME 姓名,math 数学,english 英语,math + IFNULL(english,0) 总分 FROM student;# 或者使用空格
+----------+------+------+------+
| 姓名     | 数学 | 英语 | 总分 |
+----------+------+------+------+
| 马云     |   66 |   78 |  144 |
| 马化腾   |   98 |   87 |  185 |
| 马景涛   |   56 |   77 |  133 |
| 柳色     |   76 |   65 |  141 |
| 柳青     |   86 | NULL |   86 |
| 刘德华   |   99 |   99 |  198 |
| 马德     |   99 |   99 |  198 |
| 德玛西亚 |   56 |   65 |  121 |
+----------+------+------+------+
8 rows in set (0.00 sec)

  3)条件查询

     1.where 子句后跟条件
    2.运算符
      >、<、<=、>=、=、<>
    BETWEEN...AND
    IN(集合)
    LIKE 模糊查询
      like占位符:_:代表任意单个字符
                         %:代表多个任意字符
    IS NULL
    and 或 &&
    or 或 ||
    not 或 !
  案例:
    a.查询年龄大于20岁的人
mysql> SELECT * FROM student WHERE age>20;
+------+--------+------+------+---------+------+---------+
| id   | NAME   | age  | sex  | address | math | english |
+------+--------+------+------+---------+------+---------+
|    1 | 马云   |   55 || 杭州    |   66 |      78 |
|    2 | 马化腾 |   45 || 深圳    |   98 |      87 |
|    3 | 马景涛 |   55 || 香港    |   56 |      77 |
|    6 | 刘德华 |   57 || 香港    |   99 |      99 |
|    7 | 马德   |   22 || 香港    |   99 |      99 |
+------+--------+------+------+---------+------+---------+
5 rows in set (0.00 sec)
    b.查询年龄等于20岁的人
mysql> SELECT * FROM student WHERE age=20;
+------+------+------+------+---------+------+---------+
| id   | NAME | age  | sex  | address | math | english |
+------+------+------+------+---------+------+---------+
|    4 | 柳色 |   20 || 湖南    |   76 |      65 |
|    5 | 柳青 |   20 || 湖南    |   86 |    NULL |
+------+------+------+------+---------+------+---------+
2 rows in set (0.00 sec)
    c.查询年龄不等于20岁的人
mysql> SELECT * FROM student WHERE age!=20;
+------+----------+------+------+---------+------+---------+
| id   | NAME     | age  | sex  | address | math | english |
+------+----------+------+------+---------+------+---------+
|    1 | 马云     |   55 || 杭州    |   66 |      78 |
|    2 | 马化腾   |   45 || 深圳    |   98 |      87 |
|    3 | 马景涛   |   55 || 香港    |   56 |      77 |
|    6 | 刘德华   |   57 || 香港    |   99 |      99 |
|    7 | 马德     |   22 || 香港    |   99 |      99 |
|    8 | 德玛西亚 |   18 || 南京    |   56 |      65 |
+------+----------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
mysql> SELECT * FROM student WHERE age<>20;
+------+----------+------+------+---------+------+---------+
| id   | NAME     | age  | sex  | address | math | english |
+------+----------+------+------+---------+------+---------+
|    1 | 马云     |   55 || 杭州    |   66 |      78 |
|    2 | 马化腾   |   45 || 深圳    |   98 |      87 |
|    3 | 马景涛   |   55 || 香港    |   56 |      77 |
|    6 | 刘德华   |   57 || 香港    |   99 |      99 |
|    7 | 马德     |   22 || 香港    |   99 |      99 |
|    8 | 德玛西亚 |   18 || 南京    |   56 |      65 |
+------+----------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
    d.查询年龄大于等于20&&小于等于30岁的人
mysql> SELECT * FROM student WHERE age >= 20 && age <= 30;# 不推荐
+------+------+------+------+---------+------+---------+
| id   | NAME | age  | sex  | address | math | english |
+------+------+------+------+---------+------+---------+
|    4 | 柳色 |   20 || 湖南    |   76 |      65 |
|    5 | 柳青 |   20 || 湖南    |   86 |    NULL |
|    7 | 马德 |   22 || 香港    |   99 |      99 |
+------+------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM student WHERE age >= 20 AND age <= 30;
+------+------+------+------+---------+------+---------+
| id   | NAME | age  | sex  | address | math | english |
+------+------+------+------+---------+------+---------+
|    4 | 柳色 |   20 || 湖南    |   76 |      65 |
|    5 | 柳青 |   20 || 湖南    |   86 |    NULL |
|    7 | 马德 |   22 || 香港    |   99 |      99 |
+------+------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM student WHERE age BETWEEN 20 AND 30;# 推荐
+------+------+------+------+---------+------+---------+
| id   | NAME | age  | sex  | address | math | english |
+------+------+------+------+---------+------+---------+
|    4 | 柳色 |   20 || 湖南    |   76 |      65 |
|    5 | 柳青 |   20 || 湖南    |   86 |    NULL |
|    7 | 马德 |   22 || 香港    |   99 |      99 |
+------+------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
    e.查询年龄22岁,19岁,25岁的信息的人
mysql> SELECT * FROM student WHERE age = 22 || age =18 || age =25;# 不推荐
+------+----------+------+------+---------+------+---------+
| id   | NAME     | age  | sex  | address | math | english |
+------+----------+------+------+---------+------+---------+
|    7 | 马德     |   22 || 香港    |   99 |      99 |
|    8 | 德玛西亚 |   18 || 南京    |   56 |      65 |
+------+----------+------+------+---------+------+---------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM student WHERE age = 22 OR age =18 OR age =25;
+------+----------+------+------+---------+------+---------+
| id   | NAME     | age  | sex  | address | math | english |
+------+----------+------+------+---------+------+---------+
|    7 | 马德     |   22 || 香港    |   99 |      99 |
|    8 | 德玛西亚 |   18 || 南京    |   56 |      65 |
+------+----------+------+------+---------+------+---------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM student WHERE age IN (22,18,25);# 推荐
+------+----------+------+------+---------+------+---------+
| id   | NAME     | age  | sex  | address | math | english |
+------+----------+------+------+---------+------+---------+
|    7 | 马德     |   22 || 香港    |   99 |      99 |
|    8 | 德玛西亚 |   18 || 南京    |   56 |      65 |
+------+----------+------+------+---------+------+---------+
2 rows in set (0.00 sec)
    f.查询英语成绩为null的人
mysql> SELECT * FROM student WHERE english = NULL;# 查不到,=<>等不能应用于等于null中
Empty set (0.00 sec)
mysql> SELECT * FROM student WHERE english IS NULL;
+------+------+------+------+---------+------+---------+
| id   | NAME | age  | sex  | address | math | english |
+------+------+------+------+---------+------+---------+
|    5 | 柳青 |   20 || 湖南    |   86 |    NULL |
+------+------+------+------+---------+------+---------+
1 row in set (0.00
    g.查询英语成绩不为null的人    
mysql> SELECT * FROM student WHERE english  IS NOT NULL;
+------+----------+------+------+---------+------+---------+
| id   | NAME     | age  | sex  | address | math | english |
+------+----------+------+------+---------+------+---------+
|    1 | 马云     |   55 || 杭州    |   66 |      78 |
|    2 | 马化腾   |   45 || 深圳    |   98 |      87 |
|    3 | 马景涛   |   55 || 香港    |   56 |      77 |
|    4 | 柳色     |   20 || 湖南    |   76 |      65 |
|    6 | 刘德华   |   57 || 香港    |   99 |      99 |
|    7 | 马德     |   22 || 香港    |   99 |      99 |
|    8 | 德玛西亚 |   18 || 南京    |   56 |      65 |
+------+----------+------+------+---------+------+---------+
7 rows in set (0.00 sec)
    h.查询姓马的有哪些?like
mysql> SELECT * FROM student WHERE NAME LIKE '马%';
+------+--------+------+------+---------+------+---------+
| id   | NAME   | age  | sex  | address | math | english |
+------+--------+------+------+---------+------+---------+
|    1 | 马云   |   55 || 杭州    |   66 |      78 |
|    2 | 马化腾 |   45 || 深圳    |   98 |      87 |
|    3 | 马景涛 |   55 || 香港    |   56 |      77 |
|    7 | 马德   |   22 || 香港    |   99 |      99 |
+------+--------+------+------+---------+------+---------+
4 rows in set (0.00 sec)
    i.查询第二个字是化的人
mysql> SELECT * FROM student WHERE NAME LIKE "_化%";# 单引号双引号一样效果,皆可
+------+--------+------+------+---------+------+---------+
| id   | NAME   | age  | sex  | address | math | english |
+------+--------+------+------+---------+------+---------+
|    2 | 马化腾 |   45 || 深圳    |   98 |      87 |
+------+--------+------+------+---------+------+---------+
1 row in set (0.00 sec)
    j.查询姓名是三个字的人
mysql> SELECT * FROM student WHERE NAME LIKE "___";# 此处就是双引号,与单引号一样的效果,引号内是三个下划线
+------+--------+------+------+---------+------+---------+
| id   | NAME   | age  | sex  | address | math | english |
+------+--------+------+------+---------+------+---------+
|    2 | 马化腾 |   45 || 深圳    |   98 |      87 |
|    3 | 马景涛 |   55 || 香港    |   56 |      77 |
|    6 | 刘德华 |   57 || 香港    |   99 |      99 |
+------+--------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
    k.查询姓名中包含德的人
mysql> SELECT * FROM student WHERE NAME LIKE "%%";
+------+----------+------+------+---------+------+---------+
| id   | NAME     | age  | sex  | address | math | english |
+------+----------+------+------+---------+------+---------+
|    6 | 刘德华   |   57 || 香港    |   99 |      99 |
|    7 | 马德     |   22 || 香港    |   99 |      99 |
|    8 | 德玛西亚 |   18 || 南京    |   56 |      65 |
+------+----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)

8.本篇单词:

database:数据库
structured:结构化
definition:定义
manipulation:操作
query:查询
control:控制
exists:存在
character:字符集
information schema:信息架构
performamce_ schema:性能架构
select:选择,选中
insert:插入
values:价值、值
truncate:截断,截短
distinct:不同的
between:之间