引言
相关JDBC的在之前的博客已经更新过,这里就不直接细说了,SSM框架就已经整合了JDBC的代码,解决的代码冗杂的问题,所以要细看的可以看我之前更新的思维导图,应该是比较早之前了,这个系列的话我打算先花三篇整体过一遍MySQL语句的书写例子,然后之后再每天更一下自己对MySQL运行原理的理解,我感觉的话可能要花两个月的时间,也当是对自己的一种要求和对知识的巩固,因为都是自己看视频和相关文档自学的,可能也存在一些问题,所大家有兴趣的话可以一起交流呀,努力,加油哦~
MySQL数据库的基本知识别的博主说的都很好,咱不献丑了,不逼Bi赖Lai直接单刀直入说操作
因为工作,看书,可能排版会有一些问题啥的,但是我相信那都不是问题,你们肯定看的懂嘿嘿嘿
SQL分类
数据查询语言(Data Query Language,DQL):
DQL主要用于数据的查询,其基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据
数据操作语言(Data Manipulation Language,DML):
DML主要用于对数据 增加、修改和删除的操作
主要包括: INSERT:增加数据 UPDATE:修改数据 DELETE:删除数据
数据定义语言(Data Definition Language,DDL):
DDL主要用针对是数据库对象(数据库、表、索引、视图)进行创建, 修改和删除操作
主要包括: CREATE:创建 ALTER:修改 DROP:删除
数据控制语言(Data Control Language,DCL):DCL用来授予或回收访问数据库的权限
主要包括: GRANT:授予用户某种权限 REVOKE:回收授予的某种权限
事务控制语言(Transaction Control Language,TCL):TCL用于数据库的事务管理。
主要包括: START TRANSACTION:开启事务 SET TRANSACTION:设置事务的属性
COMMIT:提交事务 ROLLBACK:回滚事务
一. DDL操作
1.DDl操作数据库
# 查看所有的数据库
show databases;
# 创建数据库
create database 55kai;
# 删除数据库
drop database 55kai;
2.DDl操作数据库表
使用语法:
create table 表名(
字段一 数据类型,
字段二 数据类型(长度)
);
# 注意: 最后一列不要加 , 号
# 需要长度的类型必需添加 不需要忽略
需求一: 创建商品分类表
表名:category
表中字段:
分类id :cid ,为整型
分类名称:cname,为字符串类型,指定长度20
SQL 实现
-- 切换到数据库 bjsxt01
use 55kai;
-- 创建表
create table category(
cid int,
cname varchar(20)
);
需求二: 创建一张学生表
表名: student
表中字段:
学号: sid, 整数类型
姓名: sname, 字符串类型(长度10)
性别: ssex, 字符串类型固定长度(1)
年龄: sage, 整数类型
入学日期: sdate, 日期类型
班级: sclazz, 字符串类型(长度15)
Email: semail, 字符串类型(长度25)
SQL实现
-- 创建表
create table student(
sid int,
sname varchar(10),
ssex char(1),
sage int,
sdate date,
sclazz varchar(15),
semail varchar(25)
);
3.DDL查看数据库表
-- 显示当前数据库的所有数据库表
show tables;
-- 显示当前数据表的结构 desc 表名
desc category;
-- 查看完整的建表语句 show create table 表名
show create table category;
4.DDL删除数据库表
-- 删除当前数据库中的表 drop table 表名;
drop table category;
5.DDL修改数据库表
(1)修改表名
语法格式
rename table 旧表名 to 新表名
需求: 修改学生表名为stu
SQL实现
rename table student to stu;
show tables;
(2)向表中添加字段 关键字 add
语法格式
alert table 表名 add 字段名称 字段类型
需求: 向学生表添加saddr字段 长度为20
SQL实现
alter table stu add saddr varchar(20); -- 默认添加到最后
alter table stu add saddr1 varchar(20) first; -- 添加到第一个
alter table stu add saddr2 varchar(20) after sage; -- 在sage字段后添加
-- 查看表结构
desc stu;
(3)修改表中字段 关键字 modify | change
**Modify: **修改字段类型, 字段类型长度
语法格式
alert table 表名 modify 字段名称 字段类型;
需求: 修改学生表中的字段saddr, 修改为scity 长度为10
SQL实现
alter table stu change saddr scity varchar(10);
**(4) ****删除表中字段 关键字 **drop
语法格式
alter table 表名 drop 列名;
需求: 删除学生表 saddr1字段 scity字段 saddr2字段
SQl实现
alter table stu drop saddr1;
alter table stu drop scity;
alter table stu drop saddr2;
二. DML操作表中数据
1.插入数据
语法格式
-- 插入部分字段或全部字段
insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);
-- 插入全部的字段
insert into 表名 values(字段值1,字段值2...);
向学生表中插入数据
方式1: 插入全部字段, 将所有字段名都写出来
insert into stu(sid, sname, ssex, sage, sdate, sclazz, semail)
values(1,"zs","男",30,"1990-10-10","10班","[email protected]");
方式2: 插入全部字段,可以不写字段名
insert into stu values(2,"ls","男",29,"1991-11-11","10班","[email protected]");
方式3:插入指定字段的值
insert into stu(sid, sname, sage, sdate) values(3,"ww",1,NOW());
insert into stu(sid, sname, sdate) values(4,"wl",SYSDATE());
insert into stu(sid, sdate) values(5,CURRENT_DATE());
-- NOW() SYSDATE() CURRENT_DATE() 都为获取当前的时间
注意事项:
- 值与字段必须要对应,个数相同&数据类型相同
- 值的数据大小,必须在字段指定的长度范围内
- varchar char date类型的值必须使用单引号,或者双引号包裹。
- 如果要插入空值,可以忽略不写,或者插入null(0和空值不一样的哦)
- 如果插入指定字段的值,必须要上写列名
- 字符串日期类型支持 "1256-12-23" "1256/12/23" "1256.12.23"
2.更改数据
语法格式
update 表名 set 字段名=值 where 条件(如: 字段名=值)
update 表名 set 字段名=值 -- 慎重: 不加条件更改所有
需求: 将sid为1的学生 ssex改为女
SQL实现
update stu set ssex='女' where sid = 1;
需求: 将sid为2的学生 性别改为女 sage改为30 班级改为11班
SQL实现
update stu set ssex="女", sage=30, sclazz="11班" where sid=2;
3.删除数据
语法格式
delete from 表名 where 条件(如: 字段名=值)
delete from 表名 -- 慎重: 删除表中所有的数据
truncate table 表名; -- 慎重: 删除表中所有的数据
需求1: 删除sid为5的学生信息
SQL实现
delete from stu where sid = 5;
需求2: 将 stu表数据全部删除
SQL实现
delete from stu;
truncate table stu; -- 推荐使用
TRUNCATE和DELETE的区别(这个可以记一下,我找工作笔试一道题目就是她)
(1)DELETE为数据操作语言DML;TRUNCATE为数据定义语言DDL。
(2) DELETE操作是将表中所有记录一条一条删除直到删除完;TRUNCATE操作 则是保留了表的结构,重新创建了这个表,所有的状态都相当于新表。因此,TRUNCATE操作的效率更高。
(3)DELETE操作可以回滚;TRUNCATE操作会导致隐式提交,因此不能回滚(后 面会讲解事务的提交和回滚)。
(4)DELETE操作执行成功后会返回已删除的行数(如删除4行记录,则会显示“Affected rows:4”);截断操作不会返回已删除的行量,结果通常是“Affected rows:0”。DELETE操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;TRUNCATE操作会重新从1开始自增
三.表的约束
1.约束
约束名
关键字
作用
主键
primary key
不可重复, 不能为空
唯一 + 非空
唯一
unique
不可重复
非空
not null
不能为空
默认值
default
赋予默认值
检查(Mysql8提供)
check
取值范围
外键
foreign key
表与表之间的关系
2.主键约束
语法格式
字段名 字段类型 primary key
需求1: 创建一个带有主键的emp表 字段 eid int ename varchar(10) esex char(1)
SQl实现: 方式一
create table emp(
eid int primary key, -- 设置主键 非空唯一
ename varchar(10),
esex char(1)
);
-- 查看表结构
desc emp;
SQl实现: 方式二
-- 删除emp表
drop table emp;
create table emp(
eid int,
ename varchar(10),
esex char(1),
primary key(eid) -- 指定主键为eid字段
);
SQl实现: 方式三
-- 删除emp表
drop table emp;
create table emp(
eid int primary key,
ename varchar(10),
esex char(1)
);
-- 创建表时不指定主键, 然后通过DDL语句进行设置
alter table emp add primary key(eid);
3.测试主键的唯一 非空约束
-- 插入正常数据
insert into emp values(1,"宋江","男");
-- 插入一条数据, 主键为空
insert into emp values(null,"李逵","男");
-- Column 'eid' cannot be NULL 主键不能为空
-- 插入一条数据, 主键重复
insert into emp values(1,"孙二娘","女");
-- Duplicate entry '1' for key 'emp.PRIMARY' 主键冲突
4.删除主键约束
-- 使用DDL 删除表中的主键约束
alter table emp drop primary key;
-- 查看表结构
desc emp;
-- 删除唯一约束(了解)
-- 添加了唯一约束为 eid int not null, 通过设置字段属性删除唯一约束
alter table emp modify eid int;
5.主键自增
语法格式
关键字
auto_increment
表示自增长(字段类型必须为整数类型)
需求: 为emp表eid字段添加主键约束, 并设置为自增
*(1) 创建主键自增的emp*表
drop table emp;
create table emp(
eid int primary key auto_increment,
ename varchar(10),
esex char(1)
);
**(2) **测试主键自增
insert into emp values(null,'zs','n');
insert into emp values(default,'ls','n');
insert into emp(ename, esex) values('ww', 'n');
6.非空约束
语法格式
字段名 字段类型 not null
需求: emp表 eid 主键约束,自增 ename 非空约束
SQL实现
-- 删除存在的emp表
drop table emp;
create table emp(
eid int primary key auto_increment,
ename varchar(10) not null,
esex char(1)
);
-- 查看emp表结构
desc emp;
-- 测试非空约束
insert into emp values(default,null,'n');
-- Column 'ename' cannot be null ename不能为空
7.唯一约束
语法格式
字段名 字段类型 unique
需求: emp表 eid 主键约束,自增 ename 非空约束 esex唯一约束
SQL实现
-- 删除存在的emp表
drop table emp;
create table emp(
eid int primary key auto_increment,
ename varchar(10) not null,
esex char(1) unique
);
-- 测试唯一约束 添加两个性别为男
insert into emp values(default,'zs','男');
insert into emp values(default,'lisi','男');
-- Duplicate entry 'n' for key 'emp.esex' esex重复
8.默认值约束
语法格式
字段名 字段类型 default '值'
需求: emp表 eid 主键约束,自增 ename 非空约束 esex默认值'男'
SQL实现
-- 删除存在的emp表
drop table emp;
create table emp(
eid int primary key auto_increment,
ename varchar(10) not null,
esex char(1) default '男'
);
-- 查看emp表结构
desc emp;
-- 测试默认值约束
insert into emp values(default,'zs',default);
-- 错误用法
insert into emp values(default,'zs',null);
9.检查约束
语法格式
字段名 字段类型 check(字段='值' or 字段='值')
字段名 字段类型 check(字段>n or 字段<m)
字段名 字段类型 check(字段>n and 字段<m)
需求: emp表 eid 主键约束,自增 ename 非空约束 esex默认值'男'并检查 男|女
SQL实现
-- 删除存在的emp表
drop table emp;
create table emp(
eid int primary key auto_increment,
ename varchar(10) not null,
esex char(1) default '男' check(esex='男' or esex='女')
);
-- 查看emp表结构
desc emp;
-- 测试检查约束
insert into emp values(default,'lisi','n');
-- Check constraint 'emp_chk_1' is violated 不符合字段要求
附加:思维导图
MySQL:关系型数据库管理系统(1) | 八九. | 思维导图(新) | ProcessOn
密码:p3eo
版权归原作者 腊Rou单车 所有, 如有侵权,请联系我们删除。