MySQL总结(4)

insert

数据的插入mysql

INSERT插入数据sql

😀 插入完整的行; 😀 插入行的一部分; 😀 插入多行; 😀 插入某些查询的结果。数据库

INSERT into Customers
values(NULL,
'Pep E. LaPew',
      '100 Main Street'
      'Los Angeles'
      'CA'
      '90046'
      'USA'
      NULL,
      NULL)
INSERT LOW_PRIORITY INTO Customers(#priority 下降优先级
cust_name.
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email
)
values(
'Pep E. LaPew',
      '100 Main Street'
      'Los Angeles'
      'CA'
      '90046'
      'USA'
      NULL,
      NULL)

插入多条行函数

INSERT LOW_PRIORITY INTO Customers(#priority 下降优先级
cust_name.
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email
)
values(
'Pep E. LaPew',
      '100 Main Street'
      'Los Angeles'
      'CA'
      '90046'
      'USA'
      NULL,
      NULL),
      (
      'Pep E. LaPew',
      '100 Main Street'
      'Los Angeles'
      'CA'
      '90046'
      'USA'
      NULL,
      NULL
      )

INSERT SELECT工具

这个例子把一个名为 custnew 的表中的数据导入 customers 表中。为了试验这个例子,应该首先建立和填充 custnew 表custnew 表的结构与附录B中描述的 customers表的相同。在填充 custnew 时,不该该使用已经在 customers中使用过的cust_id 值(若是主键值重复,后续的 INSERT 操做将会失败)或仅省略这列值让MySQL在导入数据的过程当中产生新值。性能

INSERT INTO customers(
	cust_id,
	cust_contact,
	cust_email,
	cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country)
SELECT cust_id,
	cust_contact,
	cust_email,
	cust_name,
	cust_address,
	cust_city,
	cust_state,
	cust_zip,
	cust_country
FROM custnew;

INSERT SELECT 中的列名 为简单起见,这个例子在 INSERT 和SELECT 语句中使用了相同的列名。可是,不必定要求列名匹配。事实上,MySQL甚至不关心 SELECT 返回的列名。它使用的是列的位置,所以 SELECT 中的第一列(无论其列名)将用来填充表列中指定的第一个列,第二列将用来填充表列中指定的第二个列,如此等等。这对于从使用不一样列名的表中导入数据是很是有用的。测试

更新和删除数据

更新数据 UPDATE

😋 更新表中特定行; 😋 更新表中全部行。spa

the first examplecode

UPDATE IGNORE customers # ignore 忽略错误 继续更新
SET cust_email = NULL,
	cust_name = 'The Fudds'
WHERE cust_id = 10005; # 注意不要忘了where 不然可能更新所有

删除数据 DELETE

DELETE FROM customers
WHERE cust_id = 10006;

DELETE 不须要列名或通配符。 DELETE 删除整行而不是删除列。为了删除指定的列,请使用 UPDATE 语句。事务

删除表的内容而不是表 DELETE 语句从表中删除行,甚至是删除表中全部行。可是, DELETE 不删除表自己。

更快的删除 若是想从表中删除全部行,不要使用DELETE 。可以使用 TRUNCATE TABLE 语句,它完成相同的工做,但速度更快( TRUNCATE 实际是删除原来的表并从新建立一个表,而不是逐行删除表中的数据)。truncate table

😘 除非确实打算更新和删除每一行,不然绝对不要使用不带 WHERE 子句的 UPDATE 或 DELETE 语句。 😘 保证每一个表都有主键(若是忘记这个内容,请参阅第15章),尽量 像 WHERE 子句那样使用它(能够指定各主键、多个值或值的范围)。 😘 在对 UPDATE 或 DELETE 语句使用 WHERE 子句前,应该先用 SELECT 进行测试,保证它过滤的是正确的记录,以防编写的 WHERE 子句不正确。 😘 使用强制实施引用完整性的数据库(关于这个内容,请参阅第15 章),这样MySQL将不容许删除具备与其余表相关联的数据的行。

建立和操纵表

为了用程序建立表,可以使用SQL的 CREATE TABLE 语句。值得注意的 是,在使用交互式工具时,实际上使用的是MySQL语句。可是,这些语 句不是用户编写的,界面工具会自动生成并执行相应的MySQL语句(更 改现有表时也是这样)。

create table

CREATE TABLE customers IF NOT EXISTS 
#if not exists不存在的时候建立该表
(
	cust_id		 int	 	  NOT NULL AUTO_INCREMENT,
    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,
    PRIMARY KEY (cust_id) #primary key 主键
)ENGINE=InnoDB;
# auto_increment

肯定 AUTO_INCREMENT 值 让MySQL生成(经过自动增量)主 键的一个缺点是你不知道这些值都是谁。 考虑这个场景:你正在增长一个新订单。这要求在 orders 表中建立一行,而后在 orderitms 表中对订购的每项物品建立一行。order_num 在 orderitems 表中与订单细节一块儿存储。这就是为何 orders 表和 orderitems 表为相互关联的表的缘由。这显然要求你在插入 orders 行以后,插入 orderitems 行以前知道生成的 order_num 。那么,如何在使用AUTO_INCREMENT 列时得到这个值呢?可以使用 last_insert_id() 函数得到这个值,以下所示: SELECT last_insert_id() 此语句返回最后一个 AUTO_INCREMENT 值,而后能够将它用于 后续的MySQL语句。

指定默认值

CREATE TABLE orderitems
(
	order_num	int			 NOT NULL,
    order_item	int 		 NOT NULL,
    prod_id		char(10)	 NOT NULL,
    quantity	int 		 NOT NULL DEFAULT 1,#default
    item_price	decimal(8,2) NOT NULL,
    PRIMARY KEY (order_num,order_item)
)	ENGINE=InnoDB; #选择引擎 engine =

😄 InnoDB 是一个可靠的事务处理引擎(参见第26章),它不支持全文本搜索; 😄 MEMORY 在功能等同于 MyISAM ,但因为数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表); 😄 MyISAM 是一个性能极高的引擎,它支持全文本搜索(参见第18章),但不支持事务处理。

更新表

ALTER TABLE

ALTER TABLE vendors #alter table
ADD vend_phone CHAR(20);
ALTER TABLE vendors
DROP COLUMN vend_phone; # drop column

定义外键

ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREING KEY (order_num) REFERENCES orders (order_num);
#add constraint 约束 foreing 外来物 refernces 参考文献
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_products
FOREING KEY (order_id) REFERENCES orders (order_id);

ALTER TABLE orders
ADD CONSTRAINT fk_orderitems_customers
FOREING KEY (order_id) REFERENCES orders (order_id);

ALTER TABLE products
ADD CONSTRAINT fk_orderitems_vendors
FOREING KEY (order_id) REFERENCES orders (order_id);

删除表

DROP TABLE customers2;

重命名表

RENAME TABLE customers2 TO customers;
相关文章
相关标签/搜索