更新和删除数据
更新数据
使用UPDATE语句可进行更新数据。
不要忽略WHERE子句,在update时一定要注意细心,不然就更新表中的全部行了。
update三要素:
- 要更新的表
- 列名和他们的新值
- 确定要更新行的过滤条件
UPDATE customers
SET cust_email = 'dianxin@.com'
WHERE cust_id = 10005
更新多个列(逗号隔开,最后一列之后不用逗号)
UPDATE customers
SET cust_email = 'dianxin@.com' ,
cust_name = 'dainxin'
WHERE cust_id = 10005
删除数据
使用delete语句删除数据
不要忽略WHERE子句,在delete时一定要注意细心,不然就删除表中的全部行了。
DELETE FROM customers
WHERE cust_id = 10006;
mysql是没有撤销按钮的,所以我们要非常小心update和delete操作。
CREATE TABLE customers
(
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)
) ENGINE=InnoDB;
创建和操作表
创建表
我们使用CREATE TABLE语句
CREATE TABLE customers
(
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)
) ENGINE=InnoDB;
使用null值
上面的null就是值允许空,NOT null就是不允许空值。
:dagger:''这样两个单引号,之间没有字符的叫空串,这在NOT 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)
) ENGINE=InnoDB;
使用 AUTO_INCREMENT
cust_id int NOT NULL AUTO_INCREMENT
AUTO_INCREMENT告诉mysql,本列每当增加一行时自动增量。每次执行一个INSERT操作时,mysql自动对该列增量,给该列赋予下一个可用的值。这样每个行都会分配一个cust_id ,从而可以用作主键值。
:dark_sunglasses:每个表只允许一个AUTO_INCREMENT列。而且它必须被索引。(如:通过使他成为主键)
SELECT last_insert_id()
此语句返回最后一个AUTO_INCREMENT值,然后可以去利用它。
指定默认值
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,
item_price decimal(8,2) NOT NULL ,
PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB;
DEFAULT关键字指定默认值。
:radio:MySQL与大多数DBMS不同,不允许使用函数作为默认值。
引擎类型
你可能注意到了创建表的最后一个语句,ENGINE=InnoDB。
mysql默认引擎 mysql-5.1版本之前默认引擎是MyISAM,之后是innoDBInnoDB是一个可靠的事务处理引擎,它不支持全文本搜索
MEMORY在功能上等同于MyISAM。但由于数据存储在内存中,速度很快
MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
在一个数据库实例里,不同的表是可以使用不同的引擎。
:ice_cream:混用引擎还有一个大问题,那就是外键不能跨引擎。换句话说就是,使用一个引擎的表不能引用具有使用不同引擎的表的外键。
更新表
使用ALTER TABLE语句。
ALTER TABLE vendors
ADD vend_phone CHAR(20);
ALTER TABLE 一种常用的用途是定义外键。
ALTER TABLE 从表
ADD [CONSTRAINT] [外键约束名称]
FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
删除表
使用DROP TABLE语句
DROP TABLE customers2
重命名表
RENAME TABLE 语句可以重命名一个表
RENAME TABLE customers2 TO customers;
重命名多个表:
RENAME TABLE customers2 TO customers,
customers3 TO customers5,
customers4 TO customers6;