(本节的mysql的DDL语句都是在mysql的命令行中演示的!)
一.概念
数据库:即存储数据的仓库
二.操作
1.启动/停止mysql
方法一:win+r ,输入services.msc

方法二:命令行输入指令
启动是net start mysql80 停止是net stop mysql80

点击++以管理员身份运行++!
然后输入指令:

2. Mysql的客户端连接
方法一:打开mysql命令行客户端

输入密码后:

由上图的第4行可知这个已安装的mysql是 社区版本的8.0.44
方法二.
输入命令 mysql [-h 127.0.0.1] [-p 3306] -u root -p
两个括号里分别是所连接的 ip和端口 ,并且这2参数都是可以省略的,默认连接的是本机的3306
-u指定用户,以root用户进行连接
-p指定密码
那么这种方式,要想在任意目录下执行mysql指令,就首先需要配置PATH变量
如何配置PATH变量?
此电脑右键-属性-高级系统设置-环境变量-path-编辑-新建
我们需要在这里再安装一个mysql的环境变量

上图需要复制粘贴 刚才所安装的mysql的位置(bin目录下)

只要看到上图的-GPL 这一行,就代表mysql已经连接成功了!!!
3.SQL的通用语法
(1)SQL语句可以单行写/多行写,以分号结尾
(2)SQL语句不区分大小写,但建议关键字使用大写
(3)单行注释:使用 -- 或者 # ,多行注释:使用 /* */
4.SQL语句的分类
(1)DDL
是用来定义数据库 ,以及数据库中的表 ,以及表中的字段的(即用来操作数据库,表,字段)
(2)DML
对表中数据进行增删改
(3)DQL
对数据库表中数据进行查询
(4)DCL
创建用户,控制数据库访问权限
三.通过DDL语句如何来操作数据库?
1.查询
(1)查询所有数据库
SHOW DATABASES;
(2)查询当前数据库
SELECT DATABASE();
2.创建
CREATE DATABASE 数据库名;
++上手实操:++

上图:首先开启mysql80,然后连接客户端,然后查询所有数据库,上图显示的有4个数据库(这4个数据库是安装时就自带的),然后创建数据库,起名为itcast,下行回复了Query OK,则说明当前数据可以创建成功!
创建成功后,可以再查询所有数据库:

那如果再重复创建已存在的itcast,则会报错error

那么我们可以给个条件:

上图这条语句的意思是如果不存在,则创建,如果存在,则不创建
接下来再次执行:查询当前所在的所有数据库

依然是这5个,并没有改变
注意:这里还有一个快捷方式:我们可以通过电脑键盘上的上下键,来查询到我们之前执行过的sql语句
那我现在再创建一个不存在的数据库,命名为test01 创建后再查看

3.删除
DROP DATABASE 数据库名;
++上手实操:++

根据上图内容可知:
首先删除itcast数据库,然后展示
然后尝试删除不存在的数据库test02,发现会在下一行进行报错
所以就是用drop database if exists test02;这句话的意思是 如果存在test02,则删除,如果不存在,则不删除。这时就不会报错。然后再次展示,可见未删除,因为不存在
4.使用
USE 数据库名;
++上手实操:++

比如说我这时候想要使用test01这个数据库,输入指令后显示Database changed 代表此时已经切换到了test01这个数据库。
如果已忘记当前所处于哪一个数据库?就使用到:

如果想要切换到其他的数据库,就还是,使用use 数据库名
四.通过DDL如何来操作数据库中所存储的表结构?
1、查询当前数据库中所有表
show tables;
++实操:++

显示empty,说明当前数据库中没有表
那么我现在切换到另一个数据库中,再展示该数据库中的表,结果如下:

2.创建

注意上图,是通过comment来加上注释的!
eg. id int comment '代表编号',
注意上图的中括号,不是在编写语句时加入,而是代表中括号之内的语句是可写可不写的!
注意:在sql中,字符串的类型是varchar,如果写varchar(50),就代表该字符串大小是50
那么接下来如何使用sql语句将下面表创建出来?

++实操:++


然后再去查询该数据库下的所有的表,如下图所示,test01这个数据库中现在只有一个表tb_user

那么现在如果还想知道这张表里的所有字段,就通过下面的方法(即3.查询表结构中的所有字段)
3、查询表结构中的所有字段
desc 表名;
++接上面实操:++

4.查询指定表中的详细信息
show create table 表名;

5.mysql当中支持的数据类型
(1)数值类型

上图的最后一行的精度和标度,举例说明
129.47 它的精度就是5,标度就是2
如果写某班级学生的成绩score,假设最多保留1位小数,最大数字是100,则score double (4,1);
这里的精度是4,标度是1,代表成绩最长有4位,小数点后面保留1位。
举例说明:假如说 age,如果写age int ; 则代表需要给 age 4个字节的大小的空间,那么就显得有些浪费了,所以只需要 age tinyint; 即只给age1个字节大小的空间,写年龄大小即可。又因为写年龄大小不可能是负数,所以写成 age tinyint unsigned;
(2)字符串类型

- char的性能好,但是它是"定长字符串",如果是char(10),即使你存储一个字符,他也会占用10个字符的空间,未占用空间会使用空格进行补位。
- varchar性能较差,但是它是"变长字符串",如果是varchar(10),如果你存储一个字符,那么就会占用1个字符的空间;如果是2个字符,那么就会占用2个字符的空间。
- 假设现在需要注册一个用户名username,那么这时候使用varchar会更好一些,因为对于用户名,这个用户有可能输入的是1位,有可能10位,有可能40位。即 username varchar(50)
- 假如存储性别gender,那么使用char会更好一些,因为就只会存储一个汉字,不会是个变长字符串,而且char的性能还好。即 gender char(1)
(3)日期类型

注意:倒数2个都是描述年月日时分秒,但是区别在于最后一个是一个时间戳,并且范围是到2030-01-19
所以一般比较常用的就是 date time datetime
由上图可知:date是年月日 time是时分秒 datetime是年月日时分秒
假如存储生日birthday,那么一般就使用date
++实操:++


那如果想要将上图的表格中的某些内容做出修改/删除,该怎么操作?
6.表操作的 -- 修改、删除操作
(1)添加字段

实操:
假如添加一个新的字段"昵称"为nickname,类型为varchar(20)
(2)修改旧字段的数据类型(即:只修改字段的类型)

(3)修改旧字段为新字段,旧类型为新类型(即:字段和类型都要修改!)

实操:
将emp表的nickname字段修改为username,类型为varchar(30)

那是否修改成功?来验证一下(通过desc 表名):

(4)删除字段

++实操:++
将list2表中的字段username删除

(5)修改表名

++实操:++
将list02这个表名修改成list99

(6)删除表

++注意:中括号内数据是可写 / 可不写的数据!++

(7)删除指定的表同时会重新创建该表

这个方法一般不使用!!一般使用第(6)个这种删除,这种删除在删除表的同时,数据也会被删除