2 .2.2 alter:修改表
修改数据表:
- 修改表名: ALTER TABLE 表名 RENAME TO 新的表名;
- 修改列名和数据类型: ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
- 添加一列: ALTER TABLE 表名 ADD 列名 数据类型;
- 删除列 : ALTER TABLE 表名 DROP 列名
- 修改数据类型: ALTER TABLE 表名 MODIFY 列名 新数据类型;
2.2.3 drop:删除表
语法:
DROP TABLE 表名
DROP TABLE IF EXISTS 表名 -- 存在就删除
快速删除表
- 语法
truncate table 表名;
- 特点:物理删除,删除效率高,不可以恢复
- 删除数据,表结构保留
- 不能删除单条数据
删除数据表:
- 删除表:DROP TABLE 数据表名;
- drop 表TABLE if exists 表名;
2.3DML
- 对表中的数据进行修改
2.3.1插入 insert
- 语法
insert into 表名(字段名1,字段名2,字段名3,...) values(值1,值2,值3,...)
- 字段名和值要一一对应:数量对应,数据类型要对应。
插入实列: insert into t_student(sno,name,age,sex,eamil) values(1,'张三',15,'女','1234567@qq.com') -- 按照顺序 insert into t_student(name,sno,age,sex,eamil) values('张三',1,15,'女','1234567@qq.com') -- 字段顺序可以调整,但是字段名和值一定要对应 insert into t_student(sno,name) values('张4',2) -- 只要某些字段,插入数据后其他的字段就会是null insert into t_student() values(1,'李4',12,'女','123456744@qq.com') -- 省略字段名,就必须写上所有的字段名
- 插入多条记录
INSERT INTO 表名 (列名1,列名2.…) VALUES (值1,值2...), (值1,值2...), (值1,值2…);
- insert插入日期
格式化:format() - 将查询结果插入到一张表中( 少 用 )
insert into 表名 select * from 表名 ; select * into 新表名 from 表名;
2.3.2修改 Update
- 语法格式
update 表名 set 字段名1 = 值1, 字段名2 = 值2, 字段名3 = 值3, 字段名n = 值n where 条件;
- 没有条件将会将整个表更改
2.3.3删除 delete
- 表中的数据被删除了,但是数据在硬盘上的真实存储空间不会被释放
- 删除效率低,可回滚
- 语法格式
delete
from
表名
where
条件
- 没有条件将会把整个表内的数据进行删除
- 删除大表(删除表中的全部数据)
2.4 表
2.4.1 表结构的增删改查
- 一旦设计好表,就很少会对表进行修改
- 修改成本高,就要对java代码进行修改
- 使用工具(navicat)修改
2.4.2约束 (constraint)
- 给字段添加约束,保证表中数据的完整性,有效性!!!
- 保证表中的数据有效
- 列约束:直接在列后面添加约束
- 表级约束:约束没有添加在列的后面
- 非空约束:not null
- 唯一约束:unique
- 主键约束:primary ley(PK)
- 外键约束:foreign key(FK)
- 级联更新
- 检查约束:check(mysql不支持)
1 非空约束 (not null)
- 约束的字段不嫩改为null
CREATE TABLE t_student ( sno int(10) not null, name varchar(22) not null, age int(3), sex char(5), email varchar(255) );
2 唯一性约束 (unique)
- 可以为null ,但是不可以重复
drop table if exists t_student CREATE TABLE t_student ( sno int(10) unique, -- 列级约束 name varchar(22), age int(3), sex char(5), email varchar(255) ); insert into t_student() values(1,'李4',12,'女','123456744@qq.com') insert into t_student() values(2,'李4',12,'女','123456744@qq.com') -- 在插入数据的时候,sno的值,则不能重复
- 多个字段字段联合起来具有唯一性
CREATE TABLE t_student ( sno int(10), name varchar(22), unique(sno,name) -- sno ,name 联合起来唯一。表 ); insert into t_student() values(1,'李4',12,'女','123456744@qq.com') insert into t_student() values(2,'李武',12,'女','123456744@qq.com') -- 分开的sno,name可以重复,但是(sno,name) 联合起来就不可以重复
- not null 和unique联合使用
CREATE TABLE t_student ( sno int(10) not null unique, -- sno变成主键 name varchar(22) );
3 主键约束 (primary key :PK)
- 主键约束:一个表只能有一个主键
- 主键字段:字段添加主键约束
- 主键值:每一行记录的唯一标识。
- 建议使用:int 、bigint、char等类型
- 不建议使用:varchar来做主键,主键值定长的。
- 特征
- not null + unique (主键值不能为空,不能重复)
- 任何每一张表都要有主键,没有就是非法的
drop table if exists t_student CREATE TABLE t_student ( sno int primary key , name varchar(22) ); -- 表级约束添加主键约束 drop table if exists t_student CREATE TABLE t_student ( sno int , name varchar(22), primary key(sno) ); -- 一个字段做主键:单一主键 -- 多个字段做主键:复合主键 (不要使用) drop table if exists t_student CREATE TABLE t_student ( sno int , name varchar(22), primary key(sno,name) );
- 自然主键:自然数(使用多)
- 业务主键:主键值与业务紧密关联。(使用少,业务变动会影响到业务会改变)
-- 自动维护主键值
drop table if exists t_student CREATE TABLE t_student ( sno int primary key auto_increment, -- 使sno自增:auto_increment name varchar(22) );
4 外键约束(foreign key :FK)
- 术语:
- 外键约束:
- 外键字段:字段添加上外键约束
- 外键值:外键字段中的每一个值。可以为null
- 父表:被引用的表
- 子表:引用的表
顺序: (理解,不要死记)
- 删除表:
- 先删除子表,再删除父表
- 创建表
- 先创建父表,再创建子表
- 删除数据
- 先删除子数据,再删除父数据
- 插入数据
- 先插入父,再插入子
CREATE TABLE t_calss -- 父表 ( classno int primary key , -- 使sno自增:auto_increment classname varchar(22) ); CREATE TABLE t_student -- 子表 ( sno int primary key auto_increment, name varchar(22), classcno int foreign key(classno) references t_class(classno) );
2.5 数据处理函数
- 又称为:单行处理处理函数
2.2.1 单行处理函数
- 一个输入,对应一个输出
函数名 |
说明 |
lower |
大写变成小写 |
upper |
小写变成大学 |
substr |
取子串(被截取的字符串,起始下标,截取的长度) |
length |
取长度 |
trim |
去前后空格 |
str_to_date |
将字符串转换成日期 |
date_fromat |
格式化日期 |
round |
四舍五入 |
rand |
生成随机数 |
ifnull |
将null转换成一个具体值 |
SELECT loser(name),age FROM student -- name 内容变成小写
SELECT round(123456.123,0) FROM studnet ; -- round(参数1,参数2) 参数1:要四舍五入的数;参数2:保留多少位小数
2.2.2 多行处理函数
- 多个输入,对应一个输出
分组函数 / 聚合函数 / 多行处理函数 在上面的分组查询中查看 这里的内容
3 存储引擎
(了解)
- 表存储 / 组织
- 建表时:指定存储引擎
engine -- 指定存储引擎
CHARSET -- 指定表的字符编码
- MySQL支持的搜索引擎
show engines \G -- 显示目前数据库版本支持的数据库引擎
- MyISAM
- MyISAM的表具有以下的特征:
- 格式文件一存储表结构的定义(mytable.frm)
- 数据文件―存储表行的内容(mytable.MYD )
- 索引文件–存储表上索引(mytable.MYI):索引是一本书的目录,缩小扫描范围,提高效率
- InnoDB:
- MySQL默认存储引擎,重量级引擎
- 支持事务,保证数据库的安全,支持事务回滚
- 服务器崩溃了,支持自动恢复
- 表和索引存储在一个表空间内
- MEMORY:
- 数据存储在内存当中,断电就没有
- 表数据及索引被存储在内存中,查询快,效率高,不需要与硬盘交互。
4 事务
transaction
- 事务:完整的业务逻辑。
事务的DML语句
insert
update
delete
- 数据的增删改查要考虑安全
- 多条DML语句共同来联合完成
- 多条语句同时成功,或者同时失败!
4.1 实现事务
4.1.1 提交事务 (commit)
- 清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中
- 提交事务标志着,事务的结束。全部成功的结束。
mysql 默认情况下是自动提交事务
- 自动提交不符合我们开发的业务,必须多条同时执行成功才进行提交业务。
-- 关系自动提交机制,先执行
start transaction
4.1.2 回滚事务 (rollback)
- 将之前所有的DML 操作全部撤销,并且清空事务性活动的日志文件
- 回滚事务标志着,事务的结束。全部失败的结束。
-- 在经过一系列的增删改查之后
rollback ;
回滚到上一次的提交