MySQL必知必会读书笔记19-21章
2017-09-10 15:11
295 查看
第19章 插入数据
INSERT是用来插入(或添加)行到数据库表的。插入可以用几种方式使用:- 插入完整的行
- 插入行的一部分
- 插入多行
- 插入某些查询的结果
插入完整的行
INSERT INTO customers VALUES (NULL, 'Pep E. LaPew', '100 Main Street', 'Los Angeeles', 'CA', '90046', 'USA', NULL, NULL );
此例子插入一个新客户到customers表。
存储到每个表列中的数据在VALUES子句中给出,对每个列必须提供一个值。
各个列必须以它们在表定义中出现的次序填充。
上面的SQL语句高度依赖于表中列的定义次序,所以并不推荐使用。
INSERT INTO customers (cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email) VALUES ( 'Pep E. LaPew', '100 Main Street', 'Los Angeeles', 'CA', '90046', 'USA', NULL, NULL );
此例子完成与前一个INSERT语句完全相同的工作,但在表名后的括号里明确地给出了列名。
因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现在实际表中的次序。
也可以插入多条数据:
此技术可以提高数据库处理的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。
INSERT还存在另一种形式,可以利用它将一条SELECT语句的结果插入表中:
INSERT INTO customers_new (cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email) SELECT cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email FROM customers;
第20章 更新和删除数据
更新数据
为了更新(修改)表中的数据,可使用UPDATE语句。可采用两种方式使用UPDATE:
- 更新表中特定行
- 更新表中所有行
UPDATE语句由以下三部分组成:
- 要更新的表
- 列名和它们的新值
- 确定要更新行的过滤条件
UPDATE customers SET cust_email = 'abc@qq.com' WHERE cust_id = 10005;
更新多个列:
UPDATE customers SET cust_email = 'abc@qq.com', cust_name = 'The Fudds' WHERE cust_id = 10005;
在更新多个列时,只需要使用单个SET命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)。
UPDATE也支持子查询
UPDATE customers, ( SELECT cust_name FROM customers WHERE cust_id = 10004 ) temp SET customers.cust_name = temp.cust_name WHERE cust_id = 10005;
为了删除某个列的值,可设置它为NULL(假如表定义允许NULL值)
UPDATE customers SET cust_email = NULL WHERE cust_id = 10005;
删除数据
为了从一个表中删除(去掉)数据,使用DELETE语句。可以两种方式使用DELETE:- 从表中删除特定的行
- 从表中删除所有行
从customers表中删除一行:
DELETE FROM customers WHERE cust_id = 10006;
DELETE FROM要求指定从中删除数据的表名。WHERE子句过滤要删除的行。
DELETE不需要列名或通配符。DELETE删除整行而不是删除列。
为了删除指定的列,请使用UPDATE语句。
更新和删除的指导原则
第21章 创建和操纵表
为利用CREATE TABLE创建表,必须给出下列信息:新表的名字,在关键字CREATE TABLE之后给出
表列的名字和定义,用逗号分隔
CREATE TABLE语句也可能会包括其他关键字或选项,但至少要包括表的名字和列的细节。
create table customers ( cust_id int auto_increment primary key, cust_name char(50) not null, cust_address char(50) null, cust_city char(50) null, cust_state char(5) null, cust_zip char(10) null, cust_country char(50) null, cust_contact char(50) null, cust_email char(255) null ) ;
如果你仅想在一个表不存在时创建它,应该在表名后给出
IF NOT EXISTS。这样做不检查已有表的模式是否与你打算创建
的表模式相匹配。它只是查看表名是否存在,并且仅在表名不
存在时创建它。
NULL值就是没有值或缺值。
允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行,换句话说,在插入或更新行时,该列必须有值。
为创建由多个列组成的主键,应该以逗号分隔的列表给出各列名:
create table orderitems ( order_num int not null, order_item int not null, prod_id char(10) not null, quantity int not null, item_price decimal(8,2) not null, primary key (order_num, order_item), ) ;
AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量,每执行一次插入操作可以使用
SELECT last_insert_id()来获得自增主键的值。
数据引擎:
InnoDB:支持事务处理但是不支持全文本搜索。
MyISAM:支持全文本搜索但是不支持事务处理。
外键不能跨引擎,即使用一个引擎的表不能引用具有使用不同引擎的表的外键。
更新表:
给表添加一个列:
ALTER TABLE vendors ADD vend_phone CHAR(20);
删除刚刚添加的列:
ALTER TABLE vendors DROP COLUMN vend_phone;
ALTER TABLE的一种常见用途是定义外键:
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCES orders (order_num); ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_products FOREIGN KEY (prod_id) REFERENCES products (prod_id); ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (cust_id) REFERENCES customers (cust_id); ALTER TABLE products ADD CONSTRAINT fk_products_vendors FOREIGN KEY (vend_id) REFERENCES vendors (vend_id);
复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:
- 用新的列布局创建一个新表
- 使用INSERT SELECT语句从旧表复制数据到新表。如果有必要,可使用转换函数和计算字段;
- 检验包含所需数据的新表
- 重命名旧表(如果确定,可以删除它);
- 用旧表原来的名字重命名新表;
- 根据需要,重新创建触发器、存储过程、索引和外键
重命名表:
RENAME TABLE customers_new TO customers;
删除表:
DROP TABLE customers_new;
相关文章推荐
- MYSQL必知必会1-8读书笔记
- MYSQL必知必会读书笔记 第十五和十六章 联结表
- MYSQL必知必会读书笔记 第二十二章 使用视图
- MySQL必知必会读书笔记9-14章
- MYSQL必知必会读书笔记第十和十一章之使用函数处理数据
- MYSQL必知必会读书笔记 第九章 使用正则表达式过滤数据
- MYSQL必知必会读书笔记 第十和十一章 使用函数处理数据
- MYSQL必知必会读书笔记 第二十六章 管理事务处理
- MYSQL必知必会读书笔记 第一章(基础)
- MySQL必知必会读书笔记--分析
- MySQL具体解释(19)----------海量数据分页查询优化
- MySQL运维内参_ MySQL、Galera、Inception核心原理与最佳实践 读书笔记
- mysql必知必会
- MySQL详解(19)----------海量数据分页查询优化
- 《MySQL技术内幕——InnoDB存储引擎》读书笔记(一)——MySQL体系结构和存储引擎
- mysql innodb 引擎内幕读书笔记2
- mysql学习--mysql必知必会
- MySQL必知必会之5-9
- Mysql Innodb 技术内幕读书笔记
- 19,MySQL 8.0参考手册 4.6.8.4指定mysqlbinlog服务器ID