不想看知识点图解?请直接看SQL语句演示,传送门:https://blog.csdn.net/qq_43265673/article/details/98309009
JavaWeb之MySQL(3.2):MySQL创建管理表、数据的增删改查、约束和分页代码演示
学习目标
创建数据库
创建表
描述各种数据类型
修改表的定义
删除,重命名和清空表
创建数据库
创建一个保存员工信息的数据库
create database employees;
相关其他命令
show databases; 查看当前所有数据库
use employees; ”使用”一个数据库,使其作为当前数据库
命名规则
数据库名不得超过30个字符,变量名限制为29个
必须只能包含 A–Z, a–z, 0–9, _共63个字符
不能在对象名的字符间留空格
必须不能和用户定义的其他对象重名
必须保证你的字段没有和保留字、数据库系统或常用方法冲突
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里就不要变成字符型了
CREATE TABLE 语句
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);
必须具备:
CREATE TABLE权限
存储空间
必须指定:
表名
列名, 数据类型, 尺寸
创建表
常用数据类型
创建表
CREATE TABLE emp (
#int类型,自增
emp_id INT AUTO_INCREMENT,
#最多保存20个中英文字符
emp_name CHAR (20),
#总位数不超过15位
salary DOUBLE,
#日期类型
birthday DATE,
#主键
PRIMARY KEY (emp_id)
) ;
使用子查询创建表
CREATE TABLE table
[(column, column...)]
AS subquery;
使用 AS subquery 选项,将创建表和插入数据结合起来
指定的列和子查询中的列要一一对应
通过列名和默认值定义列
复制现有的表:
create table emp1 as select * from employees;
create table emp2 as select * from employees where 1=2;
--创建的emp2是空表。
使用子查询创建表举例
ALTER TABLE 语句
使用 ALTER TABLE 语句可以实现:
向已有的表中添加列
修改现有表中的列
删除现有表中的列
重命名现有表中的列
追加一个新列
修改一个列
可以修改列的数据类型, 尺寸和默认值
ALTER TABLE dept80
MODIFY (last_name VARCHAR(30));
Table altered.
对默认值的修改只影响今后对表的修改
ALTER TABLE dept80
MODIFY (salary double(9,2) default 1000);
Table altered.
重命名一个列
使用 CHANGE old_column new_column dataType子句重命名列
ALTER TABLE dept80
CHANGE department_name dept_name varchar(15);
Table altered.
删除一个列
使用 DROP COLUMN 子句删除不再需要的列.
ALTER TABLE dept80
DROP COLUMN job_id;
Table altered.
改变对象的名称
执行RENAME语句改变表, 视图的名称
ALTER table dept
RENAME TO detail_dept;
Table renamed.
必须是对象的拥有者
删除表
数据和结构都被删除
所有正在运行的相关事务被提交
所有相关索引被删除
DROP TABLE 语句不能回滚
DROP TABLE dept80;
Table dropped.
清空表
TRUNCATE TABLE 语句:
删除表中所有的数据
释放表的存储空间
TRUNCATE TABLE detail_dept;
Table truncated.
TRUNCATE语句不能回滚
可以使用 DELETE 语句删除数据,可以回滚
对比:
set autocommit = false;
delete from emp2;
select * from emp2;
rollback;
select * from emp2;
学习目标:
使用 DML 语句
向表中插入数据
更新表中数据
从表中删除数据
数据操纵语言
DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执行:
向表中插入数据
修改现存数据
删除现存数据
事务是由完成若干项工作的DML语句组成的
插入数据
INSERT 语句语法
使用 INSERT 语句向表中插入数据。
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
使用这种语法一次只能向表中插入一条数据。
插入数据
为每一列添加一个新值。
按列的默认顺序列出各个列的值。
在 INSERT 子句中随意列出列名和他们的值。
字符和日期型数据应包含在单引号中。
INSERT INTO departments(department_id, department_name,
manager_id, location_id)
VALUES (70, 'Pub', 100, 1700);
1 row created.
向表中插入空值
从其它表中拷贝数据
更新数据
UPDATE 语句语法
使用 UPDATE 语句更新数据。
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];
可以一次更新多条数据。
如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;
更新数据
更新中的数据完整性错误
删除数据
DELETE 语句
删除数据
删除中的数据完整性错误
数据库事务
事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
数据库事务由以下的部分组成:
一个或多个DML 语句
一个 DDL(Data Definition Language – 数据定义语言) 语句
一个 DCL(Data Control Language – 数据控制语言) 语句
设置提交状态:SET AUTOCOMMIT = FALSE;
以第一个 DML 语句的执行作为开始
以下面的其中之一作为结束:
COMMIT 或 ROLLBACK 语句
DDL 语句(自动提交)
用户会话正常结束
系统异常终止
COMMIT和ROLLBACK语句的优点
使用COMMIT 和 ROLLBACK语句,我们可以:
确保数据完整性。
数据改变被提交之前预览。
将逻辑上相关的操作分组。
总 结
学习目标:
描述约束
创建和维护约束
数据库分页
什么是约束
为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制。
约束是表级的强制规定
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)
有以下六种约束:
NOT NULL 非空约束,规定某个字段不能为空
UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
PRIMARY KEY 主键(非空且唯一)
FOREIGN KEY 外键
CHECK 检查约束
DEFAULT 默认值
注意: MySQL不支持check约束,但可以使用check约束,而没有任何效果;
根据约束数据列的限制,约束可分为:
单列约束:每个约束只约束一列
多列约束:每个约束可约束多列数据
根据约束的作用范围,约束可分为:
列级约束只能作用在一个列上,跟在列的定义后面
表级约束可以作用在多个列上,不与列一起,而是单独定义
NOT NULL 约束
非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
Null类型特征:
所有的类型的值都可以是null,包括int、float等数据类型
空字符串””不等于null,0也不等于null
创建 not null 约束:
CREATE TABLE emp(
id INT(10) NOT NULL,
NAME VARCHAR(20) NOT NULL DEFAULT 'abc',
sex CHAR NULL
);
增加 not null 约束:
ALTER TABLE emp
MODIFY sex VARCHAR(30) NOT NULL;
取消 not null 约束:
ALTER TABLE emp
MODIFY sex VARCHAR(30) NULL;
取消 not null 约束,增加默认值:
ALTER TABLE emp
MODIFY NAME VARCHAR(15) DEFAULT 'abc' NULL;
UNIQUE 约束
同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同。
MySQL会给唯一约束的列上默认创建一个唯一索引
CREATE TABLE USER(
id INT NOT NULL,
NAME VARCHAR(25),
PASSWORD VARCHAR(16),
#使用表级约束语法
CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);
表示用户名和密码组合不能重复
PRIMARY KEY 约束
主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值
如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。
MySQL的主键名总是PRIMARY KEY,当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
FOREIGN KEY 约束
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。
从表的外键值必须在主表中能找到或者为空。当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据。
还有一种就是级联删除子表数据。
注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列
同一个表可以有多个外键约束
FOREIGN KEY 约束的关键字
FOREIGN KEY: 在表级指定子表中的列
REFERENCES: 标示在父表中的列
ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空): 子表中相应的列置空
CHECK 约束
MySQL可以使用check约束,但check约束对数据验证没有任何作用,添加数据时,没有任何错误或警告
CREATE TABLE temp(
id INT AUTO_INCREMENT,
NAME VARCHAR(20),
age INT CHECK(age > 20),
PRIMARY KEY(id)
);
MySQL中使用limit实现分页
背景
查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?
分页原理
所谓分页显示,就是将数据库中的结果集,一段一段显示出来需要的条件
怎么分段,当前在第几段(每页有几条,当前在第几页)
前10条记录:SELECT * FROM table LIMIT 0,10;
第11至20条记录:SELECT * FROM table LIMIT 10,10;
第21至30条记录: SELECT * FROM table LIMIT 20,10;
公式:
(当前页数-1)*每页条数,每页条数
SELECT * FROM table LIMIT(PageNo - 1)*PageSize,PageSize;
注意:
limit子句必须放在整个查询语句的最后!
不想看知识点图解?请直接看SQL语句演示,传送门:https://blog.csdn.net/qq_43265673/article/details/98309009
JavaWeb之MySQL(3.2):MySQL创建管理表、数据的增删改查、约束和分页代码演示