最全MySQL8.0实战教程
长路漫漫,键盘为伴;键盘敲烂,月薪过万;SQL写的好,工作随便找
一.前言
1.计算机语言概述
- 机器语言
- 汇编语言
- 高级语言
2.SQL的概述
SQL全称:结构化查询语言,用于访问和处理数据库的标准的计算机语言
2.1 语法特点
- SQL对大小写不敏感
- SQL可以单行或者多行书写,以分号结束 ;
- SQL的注释
1.-- 单行注释 -- 后面需要空格
2.# 单行注释 #后面可不加空格
3./*
多行注释
多行注释
*/
2.2 MySQL的安装
2.2.1 方式1:解压配置方式
下载地址: mysql-8.0.28-winx64.zip
解压上述压缩包,并在解压目录下创建my.ini文件并添加内容如下
[mysqld]
# 设置3306端口
port=3306
# 服务端使用的字符集默认为utf-8
character-set-server=utf-8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf-8
[client]
# 设置mysql客户端连接服务端和默认使用的端口
port=3306
default-character-set=utf-8



2.2.2 方式2:步骤安装方式
下载地址:mysql-installer-community-8.0.28.0.msi
二.数据库DDL操作
1.DDL概念
DDL,数据定义语言,不涉及到数据外的结构操作
- 对数据库常用操作
- 对表结构的常用操作
- 修改表结构
2.对数据库常用操作
功能 | SQL |
---|---|
查看有哪些数据库 | show databases; |
创建数据库 | create database [if not exists] mybd1 [charset=utf-8]; |
切换(选择要操作的数据库) | use mydb1; |
删除数据库 | drop database [if exists] mydb1; |
修改数据库编码 | alter database mydb1 character set utf8; |
-- 一.DDL操作之数据库操作
-- 1.查看所有的数据库
show databases;
-- 创建数据库
create database mydb1;
create database if not exists mydb1;
-- 选择使用哪一个数据库
use mydb1;
-- 删除数据库
drop database mydb1;
drop database if exists mydb1;
-- 修改数据库编码
alter database mydb1 character set utf8;
-- 二.对表结构的常用操作
create table if not exists 表名(
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设计];
-- 1.创建一个数据库 mydb1
create database if not exists mydb1;
-- 2.使用刚才创建的数据库mydb1
use mydb1;
-- 创建一张表 student
create table if not exists student(
sid int,
name varchar(20),
gender varchar(10),
age int,
birth date,
address varchar(20),
score double
);

decimal(M,D) M是有效位数,包括整数位和小数位,D是小数位个数
3.对表结构进行操作
功能 | SQL |
---|---|
查看当前数据库所有表的名称 | show tables; |
指定查看某个表的创建语句 | show create table 表名; |
查看表结构 | desc 表名; |
删除表 | drop table 表名; |
-- 3.查看当前数据库所有的表
use mydb1;
show tables;
-- 4.查看指定表的创建语句
show create table student;
-- 5.查看表结构
desc student;
-- 6.删除表
drop table student;
-- 修改表结构
-- 1.添加列:alter table 表名 add 列名 类型(长度) [约束]
alter table student add dept varchar(20);
-- 2.修改列名和类型:alter table 表名 change 旧列名 新列名 类型(长度) [约束]
alter table student change dept department varchar(30);
-- 3.修改表删除列:alter table 表名 drop 列名
alter table student drop department;
-- 4.修改表名:rename table 表名 to 表名
rename table student to stu;
三.数据库DML操作
一.数据插入
-- 语法格式
-- 方式1
insert into 表名 values(值1,值2,值3……)
-- 方式2
insert into 表名(字段1,字段2,字段3……) values(值1,值2,值3……)
INSERT INTO `mydb1`.`stu` (`sid`, `name`, `gender`, `age`, `birth`, `address`, `score`) VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL);
-- DML操作
use mydb1;
-- 一.数据的插入
-- 格式1:insert into 表名(字段1,字段2,字段3,……) values(值1,值2,值3,……)
-- 插入单行数据
insert into student(sid,name,gender,age,birth,address,score)
values(1001,'张三','男',18,'2001-12-23','北京',85.5);
insert into student(sid) values(1004);
insert into student(sid,name) values(1005,'赵六')
-- 插入多行数据
insert into student(sid,name,gender,age,birth,address,score)
values(1002,'李四','男',19,'2002-09-13','上海',78.5),
(1003,'王五','女',17,'2003-11-29','深圳',66.5);
-- 格式2: insert into 表名 values(值1,值2,值三,……)
-- 插入单行数据
insert into student values(1006,'张华','女',21,'1999-01-08','广州',79);
-- 插入多行数据
insert into student values(1006,'钱博','男',21,'2005-05-07','北京',98),
(1007,'李方','男',24,'1998-05-04','武汉',89);
二.更新操作
-- 二.数据修改操作
-- 语法格式
-- 格式1: update 表名 set 字段名=值,字段名=值…… ;
-- 格式2: update 表名 set 字段名=值,字段名=值…… where 条件;
-- 1.将所有学生的地址修改为重庆
update student set address = '重庆';
-- 2.将id为1004的学生的地址修改为北京
update student set address= '北京' where sid = 1004;
-- 将id > 1004的学生地址设置为上海
update student set address= '上海' where sid > 1004;
-- 3.将id为1005的学生的地址修改为北京,成绩修改为100
update student set address = '北京',score = 100 where sid = 1005;
三.删除操作
-- 三.数据删除
-- 语法格式
delete from 表名[where 条件];
truncate table 表名 或者 truncate 表名;
-- 注意:delete和truncate原理不同,delete只删除内容,
-- 而truncate类似于drop table,可以理解为是将整个表删除后再创建该表
-- 1.删除id为1004的学生数据
delete from student where sid = 1004;
-- 2.删除表的所有数据
delete from student;
-- 3.清空表数据
truncate table student;
truncate student;
练习案例
-- 1.创建表
/*
创建员工表employee,字段如下:
id(员工编号),name(员工名字),gender(员工性别),salary(员工薪资)
*/
-- 使用mydb1数据库
-- use mydb1;
-- 添加注释
-- comment ''
create table if not exists mydb1.employee(
id int comment '员工编号',
name varchar(20) comment '员工名字',
gender varchar(10) comment '员工性别',
salary double comment '员工薪资'
);
-- 2.插入数据
/*
1,'张三','男',2000
2,'李四','男',1000
3,'王五','女',4000
*/
insert into mydb1.employee(id,name,gender,salary)
values(1,'张三','男',2000),
(2,'李四','男',1000),
(3,'王五','女',4000);
-- 3.修改数据
-- 3.1 将所有员工薪水修改为5000元
update mydb1.employee set salary = 5000;
-- 3.2 将姓名为'张三'的员工薪水修改为3000元
update mydb1.employee set salary = 3000 where name = '张三';
-- 3.3 将姓名为'李四'的员工薪水修改为4000元,gender改为女
update mydb1.employee set salary = 4000,gender = '女' where name = '李四';
-- 3.4 将王五的薪水在原有的基础上增加1000元
update mydb1.employee set salary = salary + 1000 where name = '王五';
四.MySQL约束
一.主键约束
1.创建主键
第一种:在定义字段的同时指定主键
第二种:定义完字段之后指定主键
-- 一.创建单列主键
-- 方式1: 定义字段的同时创建单列主键
use mydb1;
create table emp1(
eid int primary key,
name varchar(20),
deptId int,
salary double
);
-- 方式2:定义完字段再创建单列主键
-- 注:con