要对数据表进行增删改查,我们先建立两张测试表:
1. 部门表
CREATE TABLE `tb_dept` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(15) DEFAULT NULL,
`description` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
2. 员工表
DROP TABLE IF EXISTS `tb_emp`;
CREATE TABLE `tb_emp` (
`id` INT(11) PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(8) NOT NULL, # not null,
`sex` VARCHAR(2) DEFAULT NULL CHECK(sex='男' OR sex='女'),
`age` INT(11) DEFAULT NULL CHECK(age>18 AND age<50),
`address` VARCHAR(200) DEFAULT NULL,
`email` VARCHAR(100) UNIQUE,
dept_id INT,
# 定义外键
CONSTRAINT FOREIGN KEY tb_emp_fk(dept_id) REFERENCES tb_dept(id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
3. 向插入tb_dept表插入数据
#插入数据必须先插入tb_dept数据,因为tb_emp有外键约束
#INSERT INTO table[(column[,column...])] VALUES(value[,value...])
INSERT INTO tb_dept(NAME,loc,description) VALUES('开发部',"广州","负责Android软件研发");
# 指明的字段和值数量和类型应该相互匹配
#INSERT INTO tb_dept(NAME,loc,description) VALUES('开发部',"广州"); 会报错,因为字段数和插入的数据个数不一致
INSERT INTO tb_dept(NAME,loc,description) VALUES('财务部',"广州","负责财务工作");
#一次插入多条记录(mysql特有)
INSERT INTO tb_dept(NAME,loc,description)
VALUES('财务部','广州','负责财务工作'),
('运维部',"广州","负责产品的运维工作"),
('销售部',"广州","负责产品的销售");
# 可以从一张表中插入数据
# 通过这种方式建表,只是复制表结构,不复制约束
DROP TABLE IF EXISTS `tb_dept2`;
CREATE TABLE tb_dept2
SELECT * FROM tb_dept WHERE id=90; # 故意写了一个不可实现的where语句,才能只赋值表结构,表中无数据
# 从一张表中插入数据(只要插入的类型和select选择的类型一致即可)
INSERT INTO tb_dept2(id,NAME,loc,description)
SELECT id,NAME,loc,description FROM tb_dept;
操作emp表
# 插入数据,要记住email表的唯一性约束,dept_id的外键约束
INSERT INTO tb_emp(NAME,sex,age,address,email,dept_id
VALUES('Lining','男',25,'广州',"lining@163.com",1);
4. 更新表数据
#更新数据
#where的时候,建议使用主键或者是unique,主键最好,因为他本身要与业务无关
UPDATE tb_emp SET age=25 WHERE id=4;
5. 删除表数据
#删除数据
DELETE FROM tb_emp;
DELETE FROM tb_emp WHERE id=4;
6. 截断表
#截断语句
#truncate 完全清空一个表,包括auto_increment的自动增长
TRUNCATE TABLE tb_dept2;
7. 比较delete、truncate、drop的执行效率