您的位置:首页 > 数据库 > MySQL

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: