插入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO customers VALUES(NULL, 'Fang');

-- 推荐更安全、扩展性更好的方式
INSERT INTO customers(cust_id, cust_name) VALUES(NULL, 'Fang');

-- 进一步,无需插入 AUTO_INCREMENT 属性的列
INSERT INTO customers(cust_name) VALUES('Fang');

-- 插入多条数据,单条语句插入比多次语句性能更高
INSERT INTO customers(cust_name) VALUES('Fang'), ('Quan');

-- 插入检索出的数据
INSERT INTO customers(cust_id, cust_name) SELECT cust_id, cust_name FROM custnew;

更新数据

1
2
-- 不要忘记 WHERE
UPDATE customers SET cust_email = 'aa@aa.com' WHERE cust_id = 10005;

Tips

  • 更新多行数据时,某一行出现一个错误,则整个操作会被取消;使用 IGNORE 关键字,则会在发生错误的情况下继续更新操作。

删除数据

Tips

  • 同样不要忘记 WHERE
  • TRUNCATE TABLE 可以做到更快地删除,实际上是删除原来的表再重新创建一个
  • 执行更新/删除之前,先用SELECT进行测试,保证要操作的数据无误。

创建表

1
2
3
4
5
6
7
8
CREATE TABLE orders
(
order_num int NOT NULL AUTO_INCREMENT,
order_date datetime NOT NULL,
cust_id int NOT NULL,
price int NOT NULL DEFAULT 1,
PRIMARY KEY (order_num)
) ENGINE=InnoDB

Tips

  • 使用 SELECT last_insert_id() 可以确定 AUTO_INCREMENT
  • MySQL的默认值只支持常量,不允许使用函数

引擎类型

  • InnoDB 是一个可靠的失误处理引擎,它不支持全文本搜索
  • MEMORY 在功能等同于 MyISAM,但由于数据存储在内存中,速度很快(适合创建临时表)
  • MyISAM 是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理
  • 引擎可以混用,但外键不能跨引擎

更新表

1
2
3
4
5
6
7
8
9
10
-- 添加列
ALTER TABLE vendors ADD vend_phone CHAR(20);

-- 删除列
ALTER TABLE vendors DROP COLUMN vend_phone;

-- 定义外键
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREIGN KEY (order_num) REFERENCES orders (order_num);

删除表

1
DROP TABLE customers;

Tips

  • 更新/删除表之前最好做一个完整的备份,应该数据库表的更改不能撤销

重命名表

1
RENAME TABLE customers TO customers;