目录
前言
在学习javaSE的时候,需要完成一些项目,运用到增删改查的操作。那么在学习数据库阶段,我们是否要运用到这些操作呢,答案是肯定的。接下来就让我们一起去了解并运用有关数据库的增删改操作吧!
DML语言
DML 数据操作语言,对表记录的操作(增,删,改)
插入数据(insert)
方法一:
语法:insert into 表名(列名1,列名2...) values(值1,值2,...);
【特点】
- 字段和值的个数必须一致
- 字段可以省略,默认所有列
- 不可以为null的列必须插入值
- 插入的值的类型要与列的类型一致或兼容
- 字段的个数和顺序不一定和原始表中的字段个数和顺序一致
- 假如表中有可为null的字段,可以通过两种方式插入null值(1.字段和值都省略 2.字段写上,值使用null)
方法二:
语法:insert into 表名 set 列名=值,列名=值,...;
#eg:
INSERT INTO beauty
SET id=17,NAME='刘涛',phone='18523022886';
方法一PK方法二
1.方法一支持插入多行,方法二不支持
语法:insert into 表名【(字段名,...)】 values(值,...),(值,...),...;
2.方法一支持子查询,方法二不支持
语法:insert into 表名 查询语句;
修改数据(update)
【修改单表】
语法:update 表名 set 列=新值,列=新值,... where 筛选条件;
#案例.修改boys表中id号为2的名称为帅比华,魅力值为100
UPDATE boys SET boyname='帅比华',usercp=100
WHERE id=2;
【修改多表】
sql99语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值
where 筛选条件;
#案例.修改单身狗女神的男朋友的编号为2号
UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id` = b.`boyfriend_id`
SET b.`boyfriend_id` = 2
WHERE bo.`id` IS NULL;
删除数据(delete、truncate)
方法一:使用delete
【单表的删除】
语法:delete from 表名 where 筛选条件 【limit 条目数】; limit 条目数 若需用到则加
【多表的删除】
sql99语法:
delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
方法二:使用truncate
语法:truncate table 表名;
方法一PK方法二【面试题】
- truncate效率较高
- truncate不能回滚, delete可以回滚
- delete可以添加筛选条件, truncate不能加
- truncate没有返回值, delete可以返回受影响的行数
- truncate删除后,如果再插入,标识列从1开始;delete删除后,如果再插入,表示列从断点开始
DDL语言
操作数据库
库的管理:创建-->create database、修改-->alter database、删除-->drop database
创建库:create database [if not exists] 库名;
修改库:修改库名得去改文件名 ,得先停止mysql,改了之后再打开
删除库:drop database 【if exists】 库名
操作表
表的管理:创建-->create table、修改-->alter table、删除-->drop table
修改表:
添加列:alter table 表名 add column 列名 类型;
注:(默认添加到最后) 通过【first|after 字段名】可改变插入的位置 first表示添加到第一列
修改列的类型或约束:alter table 表名 modify column 列名 新类型 【新约束】;
修改列名:alter table 表名 change column 旧列名 新列名 类型;
删除列:alter table 表名 drop column 列名;
修改表名:alter table 表名 rename 【to】 新表名
删除表:drop table 【if exists】 表名;
复制表:
复制表的结构:create table 表名 like 旧表;
复制表的结构+数据:create table 表名 select 查询列表 from 旧表【where 筛选】;
注:+【where 0】表示只复制某些字段 不要数据
数据类型
数值型
【整数】
tinyint 1、smallint 2、mediumint 3、int/integer 4、bigint 8 #1、2、3、4、8表示所占字节数
特点:
- 如果不设置长度,会有默认的长度
- 如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
- 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
【小数】
定点数:decimal(M,D)
浮点数:float(M,D) 4、double(M,D) 8
特点:
- M-->整数部位+小数部位 D-->小数部位
- 定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用decimal
- M和D都可以省略:如果是decimal,则M默认为10,D默认为0 (10,0);如果是float和double,则会根据插入的数值的精度来决定精度
注:如果超过范围,则报out or range异常并插入临界值 例如整数最大3位数,给出4位,999
字符型
char、varchar
特点:
其他:
binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
日期型
year 只保存年、date 只保存日期、time 只保存时间
datetime保存日期+时间
timestamp保存日期+时间
注:timestamp比较容易受时区、语法模式、版本的影响,更能反映当前时区的真实时间
特点:
常见约束
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
六大限制:
1.NOT NULL:非空约束,用于保证该字段的值不能为空
2.DEFAULT:默认约束,用于保证该字段有默认值
3.PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
4.UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
5.CHECK:检查约束【mysql中不支持】
6.FOREIGN KEY:用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值
约束的添加分类:
列级约束:六大约束语法上都支持,但外键约束没有效果
表级约束:除了非空、默认,其他的都支持
添加约束的时机:
创建表时:
添加列级约束:直接在字段名和类型后面追加约束类型即可,只支持 默认、非空、主键、唯一
添加表级约束:在各个字段的最下面 【constraint 约束名】 约束类型(字段名)
修改表时:
添加列级约束:alter table 表名 modify column 字段名 字段类型 新约束;
添加表级约束:alter table 表名 add 【constraint 约束名】约束类型(字段名) 【外键的应用】
外键
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key(一般是主键或唯一)
4、插入数据时,先插入主表,再插入从表;删除数据时,先删除从表,再删除主表
主键和唯一的比较
标识列(自增长列)
含义:可以不用手动的插入值,系统提供默认的序列值
特点:
- 标识列的类型只能是数值型
- 一个表可以有几个标识列?至多一个
- 标识列必须和主键搭配吗?不一定,但要求是一个键
- 标识列可以通过SET auto_increment_increment=3;设置步长 可以通过手动插入值,设置起始值