JavaWeb之MySQL(3.2):MySQL创建管理表、数据的增删改查、约束和分页代码演示

不想看SQL语句演示?请直接看知识点图解,传送门:https://blog.csdn.net/qq_43265673/article/details/98249808
JavaWeb之MySQL(3.1):MySQL创建管理表、数据的增删改查、约束和分页图解

创建和管理表

显示已有的数据库

SHOW DATABASES;
在这里插入图片描述
#使用指定的数据库
USE test;
USE myemployees;
在这里插入图片描述
#创建数据库
CREATE DATABASE temp;
在这里插入图片描述

查看以后的数据库中的表

SHOW TABLES;
在这里插入图片描述

常见的数据库对象都有哪些?

#表(table)/ 视图(view) / 索引(index) / 序列(sequence) / 存储过程(procedure)
#函数(function) / 触发器(trigger)

1.创建数据表(table)

两种方式:

方式一:“白手起家”

CREATE TABLE emp(
id INT,
NAME VARCHAR(15),
salary DOUBLE(10,2),
hire_date DATE
);

SELECT * FROM emp;

DESC emp;
在这里插入图片描述

方式二:基于现有的表

CREATE TABLE emp1
AS
SELECT employee_id,last_name
FROM employees;
在这里插入图片描述
#此种方式,会同步的将原表中的数据拷贝过来。但是部分约束不会拷贝过来
SELECT * FROM emp1;
在这里插入图片描述

emp1表中字段的数据类型和数据长度,也与原表保持一致

DESC emp1;
在这里插入图片描述
DESC employees;
在这里插入图片描述
#创建新表,指定新的列的名字
CREATE TABLE emp2
AS
SELECT employee_id emp_id,last_name NAME
FROM employees
WHERE department_id IN (10,20,30,40);
在这里插入图片描述
SELECT * FROM emp2;
在这里插入图片描述
#复制一个employees表(包括数据):
CREATE TABLE employees_copy
AS
SELECT * FROM employees;
在这里插入图片描述

SELECT * FROM employees_copy;
在这里插入图片描述
DESC employees_copy;
在这里插入图片描述
DESC employees;
在这里插入图片描述
#复制一个employees表(不包括数据):
CREATE TABLE employees_blank
AS
SELECT *
FROM employees
WHERE 1=2;
在这里插入图片描述
SELECT * FROM employees_blank;
在这里插入图片描述

2.修改表(alter table)

① 新增一个列

ALTER TABLE emp
ADD email VARCHAR(25);
在这里插入图片描述
DESC emp;
在这里插入图片描述

② 删除一个列

ALTER TABLE emp
DROP COLUMN email;
在这里插入图片描述
DESC emp;
在这里插入图片描述

③ 修改列的数据类型、数据长度

ALTER TABLE emp
MODIFY salary DOUBLE(15,2); #修改数据长度
在这里插入图片描述
DESC emp;
在这里插入图片描述
ALTER TABLE emp
MODIFY salary VARCHAR(15);
在这里插入图片描述

一般情况下,我们不会修改数据表的列的数据类型。

ALTER TABLE emp1
MODIFY last_name DOUBLE(15,2);
在这里插入图片描述
ALTER TABLE emp1
MODIFY employee_id VARCHAR(15); #使用了double 到 varchar的自动类型转化
在这里插入图片描述
DESC emp1;
在这里插入图片描述

④ 重命名列

ALTER TABLE emp
CHANGE id emp_id INT; # oracle: rename id to emp_id.
在这里插入图片描述
DESC emp;
在这里插入图片描述

3. 重命名表 # rename emp to myemp;

ALTER TABLE emp
RENAME TO myemp;
在这里插入图片描述
DESC emp;#Table ‘myemployees.emp’ doesn’t exist
在这里插入图片描述

4.删除表

DROP TABLE myemp;
在这里插入图片描述

5. 清空表 (truncate table):会将表中的所有数据清空,但是不会删除表结构

SELECT * FROM emp1;
在这里插入图片描述

对比 清空表(truncate table)和删除表数据(delete from …)

#清空表操作一旦执行,不能回滚
#删除表数据的操作执行完后,还可以回滚

#前提:设置不允许自动提交数据
SET autocommit = FALSE;
在这里插入图片描述
DELETE FROM emp1;
在这里插入图片描述
SELECT * FROM emp1;
在这里插入图片描述

回滚数据

ROLLBACK; # DCL中的操作
在这里插入图片描述
#********************

TRUNCATE TABLE emp1; # 不可回滚。或者理解为:每次执行以后,会自动提交数据。
在这里插入图片描述
ROLLBACK; # 会回滚到最近的一次commit的位置。
在这里插入图片描述

#DCL:commit / rollback***
SET autocommit = FALSE;
在这里插入图片描述
SELECT * FROM employees_copy;
在这里插入图片描述
DELETE FROM employees_copy;
在这里插入图片描述
ROLLBACK;
在这里插入图片描述
COMMIT; # 数据一旦提交,就不可回滚。
在这里插入图片描述
ROLLBACK;
在这里插入图片描述

数据库事务:一组逻辑操作单元(一条或多条DML操作),使数据从一种状态变换到另一种状态。

#举例:

AA 给 BB 转账 100.

#过程:① 从AA账户中减100 ② 向BB账户中加100
#第一步:
#SET autocommit = FALSE;
#try{
#第二步:
#① 从AA账户中减100

#可能存在异常

#② 向BB账户中加100

#第三步:提交数据
#commit;

#}catch(){
第四步:回滚数据
#rollback;
#}

数据处理之增删改

1. 插入数据( insert into …)

方式一:一条一条的添加

CREATE TABLE emp3(
id INT,
NAME VARCHAR(15),
salary DOUBLE(10,2),
hire_date DATE
);
在这里插入图片描述
SELECT * FROM emp3;
在这里插入图片描述
INSERT INTO emp3
VALUES(1,‘Tom’,4500,‘2018-04-17’);
在这里插入图片描述
INSERT INTO emp3
VALUES(2,‘Tom1’,4600,NULL);
在这里插入图片描述
#最常用的写法。
#没有声明的字段,会自动赋值为 null
#此语句能够执行的前提是,剩下没有赋值的字段允许赋值为null
INSERT INTO emp3(id,salary)
VALUES(3,4000);
在这里插入图片描述
插入结果
在这里插入图片描述

方式二:基于现有的表,导入数据

#要求现有的表的字段的数据类型要与要导入到的表的数据类型一致
#同时,现有的表的字段的数据不长于要导入到的表的字段的数据的长度
INSERT INTO emp3(id,salary,NAME)
SELECT employee_id,salary,last_name
FROM employees
WHERE department_id IN (20,30,40);
在这里插入图片描述
SELECT * FROM emp3;
在这里插入图片描述
DESC emp3;
在这里插入图片描述
DESC employees;
在这里插入图片描述

2.更新数据( update … set … where …)

UPDATE emp3
SET NAME = ‘Jerry’
WHERE id = 3;
在这里插入图片描述
SELECT * FROM emp3;
在这里插入图片描述
#更新数据,也有可能会出现更新不成功的情况
SELECT * FROM departments;
在这里插入图片描述
#失败
UPDATE employees
SET department_id = 2000
WHERE employee_id = 110;
在这里插入图片描述
#成功
UPDATE employees
SET department_id = 200
WHERE employee_id = 110;
在这里插入图片描述
#3. 删除数据(delete from … where …)
DELETE FROM emp3
WHERE id < 5;
在这里插入图片描述
SELECT * FROM emp3;
在这里插入图片描述
DELETE FROM emp3
WHERE id = 201;
在这里插入图片描述

有些时候,会导致删除数据失败

#查询所有部门的人数
SELECT d.department_id, COUNT(employee_id)
FROM departments d LEFT JOIN employees e
ON d.department_id = e.department_id
GROUP BY d.department_id;
在这里插入图片描述
#删除失败
DELETE FROM departments
WHERE department_id = 30;
在这里插入图片描述
#删除成功
DELETE FROM departments
WHERE department_id = 190;
在这里插入图片描述

约束和分页

1. 约束(constraint)

#约束:对表中列(或字段)的强制规定

常见的约束:

#非空约束(not null)
#唯一性约束(unique)
#主键约束(primary key)
#外键约束(foreign key)
#检查约束(check)
#默认值约束(default)

约束的分类:

①根据约束数据列的限制:单列约束 vs 多列约束
②约束的作用范围:列级约束 vs 表级约束

#通常,我们都是在create table的时候,给相应的列声明约束。
#同时,我们还可以通过alter table 的方式,删除或添加列的约束

1.1 非空约束(not null)

#非空约束只能使用列级约束的方式声明

CREATE TABLE myemp1(
id INT NOT NULL, # 列级约束
NAME VARCHAR(15) NOT NULL,
email VARCHAR(25),
salary DOUBLE(10,2)
);

DESC myemp1;
在这里插入图片描述
INSERT INTO myemp1(id,NAME,salary,email)
VALUES(1,‘Tom’,3400,NULL);

SELECT * FROM myemp1;
在这里插入图片描述
#失败
INSERT INTO myemp1(id,NAME,salary,email)
VALUES(2,NULL,3400,NULL);
在这里插入图片描述
#失败
INSERT INTO myemp1(NAME,salary,email)
VALUES(‘Jerry’,3400,NULL);
在这里插入图片描述

删除非空约束

ALTER TABLE myemp1
MODIFY NAME VARCHAR(15) NULL;
在这里插入图片描述
DESC myemp1;
在这里插入图片描述
#添加非空约束
ALTER TABLE myemp1
MODIFY salary DOUBLE(15,2) NOT NULL;
在这里插入图片描述

已经存在null值的字段,不允许添加非空约束

ALTER TABLE myemp1
MODIFY email VARCHAR(15) NOT NULL;
在这里插入图片描述

1.2 唯一性约束(unique)

CREATE TABLE myemp2(
id INT UNIQUE, #列级约束
NAME VARCHAR(15),
email VARCHAR(25),
salary DOUBLE(10,2),
#表级约束
CONSTRAINT myemp2_email_uk UNIQUE(email)
);

INSERT INTO myemp2(id,NAME,email,salary)
VALUES(1,‘Tom’,‘tom@126.com’,3400);
#添加失败
INSERT INTO myemp2(id,NAME,email,salary)
VALUES(1,‘Tom’,‘tom1@126.com’,3400);
在这里插入图片描述
#添加失败
INSERT INTO myemp2(id,NAME,email,salary)
VALUES(2,‘Tom’,‘tom@126.com’,3400);
在这里插入图片描述
INSERT INTO myemp2(id,NAME,email,salary)
VALUES(3,‘Tom’,NULL,3400);
在这里插入图片描述

可以向声明为unique的列中多次添加空值

INSERT INTO myemp2(id,NAME,email,salary)
VALUES(4,‘Tom’,NULL,3400);
在这里插入图片描述
SELECT * FROM myemp2;
在这里插入图片描述
#删除唯一性约束 (我们会给声明为unique的列自动添加索引。删除unique约束时,

可以使用删除索引的方式)

ALTER TABLE myemp2
DROP INDEX myemp2_email_uk;

1.3 主键约束(primary key):非空约束 + 唯一性约束

#可以通过有主键约束的列,唯一的确定表中的一条记录。
#一个表中只能声明一个主键约束

CREATE TABLE myemp3(
id INT ,
NAME VARCHAR(15),
salary DOUBLE(10,2),
email VARCHAR(25),
CONSTRAINT myemp3_id_pk PRIMARY KEY(id)
);

DESC myemp3;
在这里插入图片描述
INSERT INTO myemp3(id,NAME)
VALUES(1,‘Tom’);
在这里插入图片描述
#失败
INSERT INTO myemp3(id,NAME)
VALUES(1,‘Tom1’);
#失败
INSERT INTO myemp3(id,NAME)
VALUES(NULL,‘Tom2’);

#通常创建主键约束的方式:添加AUTO_INCREMENT
CREATE TABLE myemp4(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(15)
);
在这里插入图片描述
INSERT INTO myemp4(NAME)
VALUES(‘Tom’);
在这里插入图片描述
INSERT INTO myemp4(NAME)
VALUES(‘Tom1’);
在这里插入图片描述
SELECT * FROM myemp4;
在这里插入图片描述

1.5 外键约束(foreign key)

#外键约束作用表A的列a,在赋值时,必须要求其赋的值是表A所关联的表B中相应列b中出现过的值。
#添加外键的要求:要求表B的列b必须声明过主键约束或唯一性约束
CREATE TABLE mydept(
dept_id INT,
dept_name VARCHAR(15)
);
在这里插入图片描述

CREATE TABLE myemp5(
id INT,
NAME VARCHAR(15),
dept_id INT,
#表级约束
CONSTRAINT myemp5_deptid_fk FOREIGN KEY(dept_id) REFERENCES mydept(dept_id)
);

#给mydept添加主键约束或唯一性约束
ALTER TABLE mydept
ADD CONSTRAINT mydept_deptid_uk UNIQUE(dept_id);
在这里插入图片描述
#演示外键约束的作用
#错误的
INSERT INTO myemp5(id,NAME,dept_id)
VALUES(1,‘Tom’,10);

INSERT INTO mydept(dept_id,dept_name)
VALUES(10,‘IT’);
在这里插入图片描述
#正确的
INSERT INTO myemp5(id,NAME,dept_id)
VALUES(1,‘Tom’,10);
在这里插入图片描述
#错误的
UPDATE mydept
SET dept_id = 20
WHERE dept_id = 10;
在这里插入图片描述

1.5 check约束

#在mysql中check约束失效,oracle中是有效的。
CREATE TABLE myemp6(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(15),
salary DOUBLE(10,2) CHECK(salary >= 2000)
);
在这里插入图片描述
#mysql:执行成功。 oracle:执行失败
INSERT INTO myemp6(NAME,salary)
VALUES(‘Tom’,1500);
在这里插入图片描述
SELECT * FROM myemp6;
在这里插入图片描述

1.6 默认值约束(default)

CREATE TABLE myemp7(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(15),
salary DOUBLE(10,2) DEFAULT 2000
);
在这里插入图片描述
INSERT INTO myemp7(NAME)
VALUES(‘Tom’);
在这里插入图片描述
SELECT * FROM myemp7;
在这里插入图片描述
INSERT INTO myemp7(NAME,salary)
VALUES(‘Tom1’,2500);
在这里插入图片描述

2.分页

题目:查询工资最高的20个人 (第一页:每页20条)

SELECT employee_id,salary
FROM employees
ORDER BY salary DESC
LIMIT 0,20;
在这里插入图片描述
#查询第三页的数据:41 - 60
SELECT employee_id,salary
FROM employees
ORDER BY salary DESC
LIMIT 40,20;
在这里插入图片描述
#统一的公式:查询第pageNo页的数据,其中每页显示pageSize条数据
LIMIT (pageNo - 1) * pageSize,pageSize;

不想看SQL语句演示?请直接看知识点图解,传送门:https://blog.csdn.net/qq_43265673/article/details/98249808
JavaWeb之MySQL(3.1):MySQL创建管理表、数据的增删改查、约束和分页图解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值