十九、插入数据
在之前的文章中,select一直是我们学习的重点,接下来我们讲学习其他的SQL语句,第一个就是insert
数据插入
insert是用来插入(或添加)行到数据库表中。插入有一下几种方式:
- 插入完整的行
- 插入行的一部分
- 插入多行
- 插入某些查询的结果
插入完整的行
insert into 表名 values (列表值)
这样的编写依赖特定列次序的SQL语句是不安全的,编写安全的insert语句
insert into customers(列名) value (列名值)
省略列: 如果表的定义允许,则可以在insert操作中省略某些列。省略的列必须满足一下某个条件:
- 该列定义为允许null值(无值或空值)。
- 在表定义中给出默认值。这表示如果不给出值,将使用默认值
提高整体性能: 数据库经常被多个客户访问,对处理什么请求以及什么次序处理管理是MySQL的任务。insert操作可能很耗时,而且可能降低等待处理的select语句的性能。
通过在insert 和into之间添加关键字low_priority,指示降低insert语句的优先级。
插入多个行
insert可以插入一行到一个表中,可以使用多条insert语句,甚至一次提交它们,每个语句用一个分号结束:
提高insert的性能: 此技术可提高数据库处理的性能,因为MySQL用单条insert语句处理多个插入比使用多条insert语句块。
插入检索出的数据
insert一般用来给表插入一个指定列值的 行,还可以利用它将一条select语句的结果插入表中。将另一个表中列表合并到另一个表的,不需要读取一行,再将它用Insert插入。
insert select中的列名: 不一定要求两个表的列名匹配。
二十、更新和删除数据
更新数据
更新表中数据,使用update,采用两种方式使用update:
- 更新表中特定行(不要省略where子句)
- 更新表中的所有行
update 表名 set 列名='新值' where 条件
update的使用条件:
- 要更新的表
- 列名和他们的新值
- 确定要更新行的过滤条件
ingore关键字: 在使用update语句更新多行,当出现一行或多行出现一个错误,可使用ingore关键字,忽略继续进行更新。
删除数据
从一个表中删除数据,。使用delete语句,有两种使用delete:
- 从表中删除特定的行(不要省略where子句)
- 从表中删除所有的行
delete from 表名 where 条件
delete删除表的内容而不是表,可以删除表中的所有行,但是不删除表本身。truncate语句完成相同的工作但是速度更快。truncate实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据。
更新和删除的指导原则
使用update或delete所遵循的习惯:
- 除非确实要删除一行或者更新一行,否则绝对不要使用不带where子句的update或delete语句
- 保证每个表都有主键,尽可能像where子句那样使用它(可以指定各主键、多个值或值的范围)
- 在对update或delete语句使用where子句前,应该先用select进行测试,保证它过滤的是正确的记录,以防编写的where子句不正确。
- 使用强制实施引用完整性的数据库,这样MySQL将不允许删除具有与其他表相关联的数据数据的行。
MySQL没有撤销按钮。应该非常小心使用update或delete,否则会发现自己更新或删除了错误的数据。
二十一、创建或操纵表
创建表
创建表的方法有两种:
- 使用具有交互式创建和管理表的工具
- 表也可以直接使用MySQL语句操纵
表创建基础
利用MySQL的create table语句创建表
- 新表的名字,在关键字create table之后给出
- 表列的名字和定义, 用逗号分隔
使用null值
null值就是没有值或者缺值。允许null值的列也允许在插入行时不给出该列的值;不允许null值的列不接受该列没有值的行。
主键再介绍(primary key)
主键值必须唯一,即表中的每个行必须具有唯一的主键值,如主键使用单个列,则它的值必须唯一。
使用auto_increment
自动增量
指定默认值
使用default关键字指定
与DBMS不一样,MySQL不允许使用函数作为默认值,只支持常量。我们平时开发习惯使用默认值而不是null值,特别是对用于计算或数据分组的列更是如此。
引擎类型
MySQL与其他DBMS不一样,具有多种引擎,打包多个引擎,都隐藏在MySQL服务器内。了解几个引擎:
- InnoDB是一个可靠的事务处理引擎,不支持全文本搜索
- MEMORY在功能上等同于MyISAM,但由于数据存储在内存中,速度很快;
- MyISAM是一个性能极高的引擎,支持全文本搜索,但不支持事务处理
外键不能跨引擎,混用引擎类型有一个大缺陷,外键不能跨引擎,即使用一个引擎的表不能引用具有不同引擎的表的外键
更新表
使用alter table更新表
- 在alter table之后给出要更改的表名
- 所做更改的列表
复杂的表结构更改一般需要手动删除过程:
- 用新的列布局创建一个新表
- 使用insert select语句从旧表复制数据到新表,如有必要,可使用转换函数和计算字段
- 检验包含所需数据数据的新表
- 重命名旧表
- 用旧表原来的名字重命名新表
- 根据需要,重新创建触发器、存储过程、索引和外键
删除表
drop table
完成删除表
重命名表
rename table
重命名表