> 文档中心 > 面试官 求求别再问我MySQL了<一>

面试官 求求别再问我MySQL了<一>

目录

引言

SQL分类

 一. DDL操作

1.DDl操作数据

2.DDl操作数据库表

3.DDL查看数据库表

4.DDL删除数据库表

5.DDL修改数据库表

(1)修改表名

(2)向表中添加字段 关键字 add

(3)修改表中字段 关键字 modify | change

二. DML操作表中数据

1.插入数据

2.更改数据

3.删除数据

三.表的约束

1.约束

2.主键约束

3.测试主键的唯一 非空约束

4.删除主键约束

5.主键自增

(1) 创建主键自增的emp表

(2) 测试主键自增

6.非空约束

7.唯一约束

8.默认值约束

9.检查约束

附加:思维导图


引言

相关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 实现

-- 切换到数据库 bjsxt01use 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班","xx@xx.com");

方式2: 插入全部字段,可以不写字段名

insert into stu values(2,"ls","男",29,"1991-11-11","10班","xx@xx.com");

方式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() 都为获取当前的时间

注意事项

  1. 值与字段必须要对应,个数相同&数据类型相同
  2. 值的数据大小,必须在字段指定的长度范围内
  3. varchar char date类型的值必须使用单引号,或者双引号包裹。
  4. 如果要插入空值,可以忽略不写,或者插入null(0和空值不一样的哦)
  5. 如果插入指定字段的值,必须要上写列名
  6. 字符串日期类型支持  "1256-12-23"   "1256/12/23"  "1256.12.23"

2.更改数据

语法格式

update 表名 set 字段名=值 where 条件(如: 字段名=值)update 表名 set 字段名=值 -- 慎重: 不加条件更改所有

需求: sid1的学生 ssex改为女

SQL实现

update stu set ssex='女' where sid = 1;

需求: sid2的学生 性别改为女 sage改为30 班级改为11

SQL实现

update stu set ssex="女", sage=30, sclazz="11班" where sid=2;

3.删除数据

语法格式

delete from 表名 where 条件(如: 字段名=值)delete from 表名     -- 慎重: 删除表中所有的数据truncate table 表名;  -- 慎重: 删除表中所有的数据

需求1: 删除sid5的学生信息

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  表示自增长(字段类型必须为整数类型)

需求: empeid字段添加主键约束, 并设置为自增

(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

需求: empeid 主键约束,自增  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

需求: empeid 主键约束,自增  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 ''

需求: empeid 主键约束,自增  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 字段n and 字段<m)

需求: empeid 主键约束, 自增  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