一、增操作
1. 增加数据库及表
CREATE DATABASE IF NOT EXISTS crashcourse; -- 创建数据库,若存在则不创建
USE crashcourse; -- 使用数据库crashcourse
customers
CREATE TABLE IF NOT EXISTS customers -- 在crashcourse数据库中创建表,并定义列属性
(
cust_id int NOT NULL AUTO_INCREMENT, -- SELECT last_insert_id()返回
-- 最后那个auto_increment的值
cust_name char(50) NOT NULL, -- 见范例简述
cust_address char(50) NOT NULL DEFAULT ‘china’,-- 见范例简述(含默认值,且只可为常量,字符串要有引号)
PRIMARY KEY (cust_id) -- 定义主键,后面没逗号
) ENGINE=InnoDB; -- 引擎指定
注意:
- NULL是空,不是0,不是空格,是未填
- 此处涉及到数据类型,参见菜鸟教程
- 存在组合主键PRIMARY KEY (order_num,order_item),只要其组合唯一,就可以作为主键
- 引擎:不同的引擎有不同的优势;类别: 事物处理引擎InnoDB; 临时表引擎:MEMORY; 全文本搜索引擎:MYISAM
2. 增加列、行
ALTER TABLE customers -- 新增cust_phone列,尽量不要用,创建表时规划好
ADD cust_phone char(11) AFTER cust_name; -- 可由FIRST或者不写(默认追加在尾部)替换,表示列位置
INSERT INTO customers (cust_name,cust_address) -- 插入多行数据,手动填充表数据,未填数据采用默认值
VALUES -- 列可不按顺序,但列出的列名,必须配值
('chuck','东北')('peter','西方'),('lily','南方'); -- 注意整条语句的逗号和字符串的分号
注意:
- 用语句
SELECT * FROM customers;
查看结果,*为通配符 - 日期的增加:若数据类型为DATE时,则values(‘2020-03-04’),(‘2020.03.04’)都可以
3. 增加外键
属性:外键需选取本表(子表)一列,如同一个快捷方式连接到另一个表(父表)上的一列,系统会从子表拿出数据跟父表那一列做比对,若父表中不存在,则根据约束做相应动作,子表的那一列就是外键
原则:父表对应的那一列需满足取值唯一,二者数据类型要一致
方法1:适用于在创建表时就添加外键约束
CREATE TABLE IF NOT EXISTS orders
(
order_num INT NOT NULL AUTO_INCREMENT,
cust_id INT NOT NULL,
order_date DATE NOT NULL, -- 日期参见前一节
PRIMARY KEY(order_num),
FOREIGN KEY(cust_id) REFERENCES customers(cust_id) -- 此句为定义外键
) ENGINE=InnoDB;
方法2:适用于后添加外键约束
ALTER TABLE orders
ADD CONSTRAINT fk_orders_customers -- 添加insert约束,约束名fk_orders_customers
FOREIGN KEY(cust_id) REFERENCES customers(cust_id); -- 本表(子表)cust_id列------->customers表(父表)cust_id列
注意:
- fk_orders_customers为用户命名,此处“fk_子表_父表”,在可视化MySQL客户端里会显示成fk_orders_customers :orders(cust_id)–customers(cust_id),此约束constraint表示在子表orders(cust_id)插入数据时,若父表customers(cust_id)没有,则插入失败(还有其他约束类型)
- 增加后,
DESC customers;
显示KEY栏有MUL标识,外键仅在InnoDB引擎有效
二、 删操作
DROP DATABASE crashcourse; -- 删除数据库
DROP TABLE customers; -- 删除表
ALTER TABLE customers DROP cust_phone; -- 删除列
DELETE FROM table_name [where语句]; -- 删除行,若无where语句,则删除全部行
ALTER TABLE orderitems DROP FOREIGN KEY prod_id; -- 删除外键约束
注意:
- 用语句
SELECT * FROM customers;
查看结果,*为通配符
三、 改操作
RENAME TABLE customers TO new_customers; -- 表重命名
ALTER TABLE customers MODIFY cust_phone INT NOT NULL DEFAULT 100; -- 修改列类型、是否可为空和默认值
UPDATE customers SET cust_name=‘Lucy’, cust_address='USA' [where语句]; -- 修改指定行数据,where筛选定位行(必填)
注意:
- where语句筛选必须慎重,否则就全表更新了
- 用语句
SELECT * FROM customers;
查看结果,*为通配符 - 数据库重命名:新建空数据库,备份老数据库表,还原在新数据库内(巨麻烦,起名需谨慎)