数据库操作

2023-05-16

增删改查:

对表结构进行修改

语法:
    1. 修改表名
        ALTER TABLE 表名
                            RENAME 新表名;
    2. 增加字段
          ALTER TABLE 表名
                              ADD 字段名  数据类型 [完整性约束条件…],
                              ADD 字段名  数据类型 [完整性约束条件…];
          ALTER TABLE 表名
                              ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
          ALTER TABLE 表名
                              ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
    3. 删除字段
          ALTER TABLE 表名
                              DROP 字段名;
    4. 修改字段
          ALTER TABLE 表名
                              MODIFY  字段名 数据类型 [完整性约束条件…];
          ALTER TABLE 表名
                              CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
          ALTER TABLE 表名
                              CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
示范:
    1. 修改存储引擎
        mysql> alter table service
            -> engine=innodb;
    2. 添加字段
        mysql> alter table student10
            -> add name varchar(20) not null,
            -> add age int(3) not null default 22;

        mysql> alter table student10
            -> add stu_num varchar(10) not null after name;                //添加name字段之后

        mysql> alter table student10
            -> add sex enum('male','female') default 'male' first;          //添加到最前面
    3. 删除字段
        mysql> alter table student10
            -> drop sex;
        mysql> alter table service
            -> drop mac;
    4. 修改字段类型modify
        mysql> alter table student10
            -> modify age int(3);
        mysql> alter table student10
            -> modify id int(11) not null primary key auto_increment;    //修改为主键
    5. 增加约束(针对已有的主键增加auto_increment)
        mysql> alter table student10 modify id int(11) not null primary key auto_increment;
        ERROR 1068 (42000): Multiple primary key defined
        mysql> alter table student10 modify id int(11) not null auto_increment;
        Query OK, 0 rows affected (0.01 sec)
        Records: 0  Duplicates: 0  Warnings: 0
    6. 对已经存在的表增加复合主键
        mysql> alter table service2
            -> add primary key(host_ip,port);
    7. 增加主键
        mysql> alter table student1
            -> modify name varchar(10) not null primary key;
    8. 增加主键和自动增长
        mysql> alter table student1
            -> modify id int not null primary key auto_increment;
    9. 删除主键
        a. 删除自增约束
        mysql> alter table student10 modify id int(11) not null;
        b. 删除主键
        mysql> alter table student10
            -> drop primary key;

对表的内容进行修改
增:insert

语法:INSERT INTO 表名(字段名1,字段名2,…) VALUES(值1,值2,…);
举例:INSERT INTO student(id,name,grade)  VALUES(1,'zhangshan',98);
语法:INSERT INTO 表名[(字段名1,字段名2,…)] VALUES (值1,值2,…),(值1,值2,…),…(值1,值2,…)
举例:INSERT INTO student VALUES (5,‘lilei’,99),(6,'hanmeimei',87),(8,'poly',76);

删:delete truncate

删除指定的部分数据,需要使用WHERE子句来指定删除记录的条件。
举例:删除student表中的id值为7的记录
命令:DELETE  FROM student WHERE id=7;

语法:TRUNCTE [TABLE ] 表名
举例:TRUNCATE TABLE student;即可删除student表
注意:
(1)DELETE 后面可以跟WHERE子句指定删除部分记录,TRUNCATE只能删除整个表的所有记录
(2)使用TRUNCATE语句删除记录后,新添加的记录时,自动增长字段(如本文中student表中的 id 字段)会默认从1开始,而使用DELETE删除记录后,新添加记录时,自动增长字段会从删除时该字段的的最大值加1开始计算(即原来的id最大为5,则会从6开始计算)。所以如果是想彻底删除一个表的记录而且不会影响到重新添加记录,最好使用TRUNCATE来删除整个表的记录。

改:update

语法:UPDATE 表名 SET 字段名1=1,,字段名2=2,… [ WHERE 条件表达式 ]
命令:UPDATE student SET name=‘caocao’,grade=50 WHERE id=1;

查:select(distinct去重复)

select  字段名 from 表名 where 条件 group by 字段名 having 条件 order by 字段名(desc、asc)

from 1 where 2 group by 3 having 4 select 5 order by 6
GROUP BY 和聚合函数一起使用,可以统计出某个或者某些字段在一个分组中的最大值、最小值、平均值等
HAVING关键字和WHERE关键字的作用相同,区别在于HAVING 关键字可以跟聚合函数,而WHERE 关键字不能。通常HAVING 关键字都和GROUP BY一起使用,用于对分组后的结果进行过滤

索引

index`

优点: 创建索引可以大大提高系统的性能。
    1):通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
    2):可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
    3):可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
    4):在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
    5):通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点: 1):创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
    2):索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
    3):当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

建立索引:
 create index 索引名 on 表名(索引字段名)
建立唯一索引:
 create unique index 索引名 on 表名(索引字段名)
建立复合索引:
create index 索引名 on 表名(索引字段名1,索引字段名2...)
查看表中索引:
show index from 表名
删除索引:
drop index 索引名 on 表名

drop index 索引名 on 表名

触发器:

trigger

定义一个触发器,一旦有满足条件的删除操作,就会执行BEGIN和END中的语句
mysql> DELIMITER ||//改变结束符
mysql> CREATE TRIGGER trig2 BEFORE DELETE
    -> ON work FOR EACH ROW
    -> BEGIN
    ->   INSERT INTO time VALUES(NOW());
    ->   INSERT INTO time VALUES(NOW());
    -> END||
mysql> DELIMITER ;

约束:

1、主键约束 primary key
主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

-- 基本模式
create table temp( 
id int primary key,
name varchar(20)
);

-- 组合模式
create table temp(
id int ,
name varchar(20),
pwd varchar(20),
primary key(id, name)
);

2、外键约束 foreign key
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系

-- 多列外键组合,必须用表级别约束语法
-- 主表
create table classes(
id int,
name varchar(20),
number int,
primary key(name,number)
);

-- 副表
create table student(
id int auto_increment primary key,
name varchar(20),
classes_name varchar(20),
classes_number int,
/*表级别联合外键*/
foreign key(classes_name, classes_number) references classes(name, number) 
);

3、 唯一约束unique
唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
唯一约束不允许出现重复的值,但是可以为多个null。
同一个表可以有多个唯一约束,多个列组合的约束。

-- 创建表时设置,表示用户名、密码不能重复
    create table temp(
    id int not null ,
    name varchar(20),
    password varchar(10),
    unique(name,password)
);

4、非空约束 not null 与 默认值 default
非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。

-- 创建table表,ID 为非空约束,name 为非空约束 且默认值为abc
create table temp(
           id int not null,
           name varchar(255) not null default  'abc',
           sex char null
)

事务:

事务控制语句
1,显式的开始一个事务:
start transaction或begin
2, 做保存点,一个事务中可以有多个保存点:
savepoint 保存点名称
3, 提交事务,并使数据库中进行的所有修改成为永久性的:
commit或commit work
4,回滚结束用户的事务,并撤销正在进行的所有未提交的修改:
rollback或rollback work
5.删除一个事务的保存点,若没有指定保存点,执行该语句操作会抛错。
release savepoint 保存点名称
6.将事务滚回标记点:
rollback to 标记点
7.设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
set transaction
事务处理方法
1.用 begin , rollback , commit 来实现事务处理。
2.用 set 来改变 MySQL 的自动提交模式。
set autocommit = 0 (禁止自动提交)。
set autocommit = 1 (开启自动提交)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库操作 的相关文章

  • 微服务架构特征

    一个典型的微服务架构 xff08 MSA xff09 通常包含以下组件 xff1a 客户端 xff1a 微服务架构着眼于识别各种不同的类型的设备 xff0c 以及在此设备上进行的各种管理操作 xff1a 搜索 构建 配置等等身份标识提供者
  • 微服务架构系列——API服务网关

    本章我们简单介绍微服务架构下的API服务网关 xff0c 本章我们将讨论以下话题 xff1a 什么是API服务网关为什么需要API服务网关API服务网关的工作机制 处理横切关注点 当我们在开发设计大型软件应用时 xff0c 我们一般都会采用
  • Java之keytool命令学习

    Java Keytool is a key and certificate management utility It allows users to manage their own public private key pairs an
  • HashMap 与 HashTable的区别

    HashMap 实现了Map接口非线程同步 xff0c 非线程安全不允许重复键键和值均允许为null HashMap lt Interger String gt employeeHashmap 61 new HashMap lt Integ
  • 如何避免敏捷失败?

    很多人都听说敏捷 xff0c 有些人知道敏捷是什么 xff0c 有些人也尝试过敏捷 xff0c 本章中将列举出一些常见的错误敏捷实践 xff0c 如果想要避免敏捷失败 xff0c 建议还是要对照下你所在的敏捷团队中有没有类似的敏捷实践 xf
  • 一个人有文化,到底有多重要?

    关于什么是文化 xff0c 我最最欣赏的回答 xff0c 是作家梁晓声的四句概括 xff1a 根植于内心的修养 xff0c 无需提醒的自觉 xff0c 以约束为前提的自由 xff0c 为别人着想的善良 01 一位叫做 Judy 的空姐 xf
  • MyBatis动态SQL中Map参数处理

    在MyBatis中 xff0c 如果我们需要传递两个参数 xff0c 有一种方式是通过Map作为传入参数 xff0c 在动态SQL中 xff0c 我们需要对传入的Map参数中的值进行判断 xff0c 然后进行动态SQL的条件拼接处理 假设我
  • MyBatis框架下防止SQL注入

    与传统的ORM框架不同 xff0c MyBatis使用XML描述符将对象映射到SQL语句或者存储过程中 xff0c 这种机制可以让我们更大的灵活度通过SQL来操作数据库对象 xff0c 因此 xff0c 我们必须小心这种便利下SQL注入的可
  • 使用android 视频解码mediaCodec碰到的几个问题

    问题1 mediaCodec dequeueInputBuffer一直返回 1 xff0c APP现象 xff1a 视屏卡屏 原因 xff1a 这是因为inputbuffer的内容有误 xff0c 导致无法解码 可通过设延时时间解决 xff
  • 云计算思维导图

    根据近期的云计算学习心得 xff0c 将云计算部分内容制作成思维导图 xff0c 方便于广大云计算学习者作为辅导讲义 xff01 思维导图内容主要包含 xff1a 1 云计算概述 2 云体系结构 3 网络资源 4 存储资源 5 硬件介绍 6
  • 路由器重温——串行链路链路层协议积累

    对于广域网接口来说 xff0c 主要的不同或者说主要的复杂性在于理解不同接口的物理特性以及链路层协议 xff0c 再上层基本都是 IP 协议 xff0c 基本上都是相同的 WAN口中的serial接口主要使用点对点的链路层协议有 xff0c
  • 路由器重温——PPPoE配置管理-2

    四 配置设备作为PPPoE服务器 路由器的PPPoE服务器功能可以配置在物理以太网接口或 PON 接口上 xff0c 也可配置在由 ADSL 接口生成的虚拟以太网接口上 1 配置虚拟模板接口 虚拟模板接口VT和以太网接口或PON接口绑定后

随机推荐