1、数据库的基本概念
(1)数据
所谓数据(Data)是指对客观事物进行描述并可以鉴别的符号,这些符号是可识别的、抽象的。它不仅仅指狭义上的数字,而是有多种表现形式:字母、文字、文本、图形、音频、视频等。现在计算机存储和处理的数据范围十分广泛,而描述这些数据的符号也变得越来越复杂了。
(2)数据库
数据库(Database,DB)指的是以一定格式存放、能够实现多个用户共享、与应用程序彼此独立的数据集合。
(3)数据库管理系统
数据库管理系统(Database Management System,DBMS)是用来定义和管理数据的软件。如何科学的组织和存储数据,如何高效的获取和维护数据,如何保证数据的安全性和完整性,这些都需要靠数据库管理系统完成。目前,比较流行的数据库管理系统有:Oracle、MySQL、SQL Server、DB2等。
(4)数据库应用程序
数据库应用程序(Database Application System,DBAS)是在数据库管理系统基础上,使用数据库管理系统的语法,开发的直接面对最终用户的应用程序,如学生管理系统、人事管理系统、图书管理系统等。
(5)数据库管理员
数据库管理员(Database Administrator,DBA)是指对数据库管理系统进行操作的人员,其主要负责数据库的运营和维护。
(6)最终用户
最终用户(User)指的是数据库应用程序的使用者。用户面向的是数据库应用程序(通过应用程序操作数据),并不会直接与数据库打交道。
(7) 数据库系统
数据库系统(Database System,DBS)一般是由数据库、数据库管理系统、数据库应用程序、数据库管理员和最终用户构成。其中DBMS是数据库系统的基础和核心。
2、数据库类型和常见的关系型数据库
1、 非关系型数据库NOSQL
NOSQL(Not Only SQL)泛指非关系型数据库。关系型数据库在超大规模和高并发的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题。NOSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。常见的非关系型数据库管理系统有Memcached、MongoDB,redis,HBase等。
2、常见的关系型数据库
虽然非关系型数据库的优点很多,但是由于其并不提供SQL支持、学习和使用成本较高并且无事务处理,所以本书的重点是关系型数据库。下面我们将介绍一下常用的关系型数据库管理系统。
1.Oracle
Oracle数据库是由美国的甲骨文(Oracle)公司开发的世界上第一款支持SQL语言的关系型数据库。经过多年的完善与发展,Oracle数据库已经成为世界上最流行的数据库,也是甲骨文公司的核心产品。
Oracle数据库具有很好的开放性,能在所有的主流平台上运行,并且性能高、安全性高、风险低;但是其对硬件的要求很高、管理维护和操作比较复杂而且价格昂贵,所以一般用在满足对银行、金融、保险等行业大型数据库的需求上。
2. DB2
DB2是IBM公司著名的关系型数据库产品。DB2无论稳定性,安全性,恢复性等等都无可挑剔,而且从小规模到大规模的应用都可以使用,但是用起来非常繁琐,比较适合大型的分布式应用系统。
3. SQL Server
SQL Server是由Microsoft开发和推广的关系型数据库,SQL Server的功能比较全面、效率高,可以作为中型企业或单位的数据库平台。SQL Server可以与Windows操作系统紧密继承,无论是应用程序开发速度还是系统事务处理运行速度,都能得到大幅度提升。但是,SQL Server只能在Windows系统下运行,毫无开放性可言。
4. MySQL
MySQL是一种开放源代码的轻量级关系型数据库,MySQL数据库使用最常用的结构化查询语言(SQL)对数据库进行管理。由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个人需要对其缺陷进行修改。
由于MySQL数据库体积小、速度快、成本低、开放源码等优点,现已被广泛应用于互联网上的中小型网站中,并且大型网站也开始使用MySQL数据库,如网易、新浪等。
3、SQL语言入门
(1)SQL语言入门
我们都知道,数据库管理人员(DBA)通过数据库管理系统(DBMS)可以对数据库(DB)中的数据进行操作,但具体是如何操作的呢?这就涉及到我们本节要讲的SQL语言。
SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,同时也是目前使用最广泛的关系型数据库操作语言。在数据库管理系统中,使用SQL语言来实现数据的存取、查询、更新等功能。SQL是一种非过程化语言,只需提出“做什么”,而不需要指明“怎么做”。
SQL是由IBM公司在1974~1979年之间根据E.J.Codd发表的关系数据库理论为基础开发的,其前身是“SEQUEL”,后更名为SQL。由于SQL语言具有集数据查询、数据操纵、数据定义和数据控制功能于一体,类似自然语言、简单易用以及非过程化等特点,得到了快速的发展,并于1986年10月,被美国国家标准协会(American National Standards Institute,ANSI)采用为关系数据库管理系统的标准语言,后为国际标准化组织(International Organization for Standardization,ISO)采纳为国际标准。
(2)SQL语言分为五个部分:
1、数据查询语言(Data Query Language,DQL):
DQL主要用于数据的查询,
其基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据。
2、数据操作语言(Data Manipulation Language,DML):
DML主要用于对数据库中的数据进行增加、修改和删除的操作
其主要包括:
1) INSERT:增加数据
2) UPDATE:修改数据
3) DELETE:删除数据
3、数据定义语言(Data Definition Language,DDL):
DDL主要用针对是数据库对象(数据库、表、索引、视图、触发器、存储过程、函数)进行创建、修改和删除操作
其主要包括:
1) CREATE:创建数据库对象
2) ALTER:修改数据库对象
3) DROP:删除数据库对象
4、 数据控制语言(Data Control Language,DCL):
DCL用来授予或回收访问 数据库的权限
其主要包括:
1) GRANT:授予用户某种权限
2) REVOKE:回收授予的某种权限
5、事务控制语言(Transaction Control Language,TCL):
TCL用于数据库的事务管理
其主要包括:
1) START TRANSACTION:开启事务
2) COMMIT:提交事务
3) ROLLBACK:回滚事务
4) SET TRANSACTION:设置事务的属性
4、数据库表列类型
1.整数类型
MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示
主键自增:不使用序列,通过auto_increment,要求是整数类型
2.浮点数类型
需要注意的是与整数类型不一样的是,浮点数类型的宽度不会自动扩充。 score double(4,1)
score double(4,1)–小数部分为1位,总宽度4位,并且不会自动扩充。
3.字符串类型
CHAR和VARCHAR类型相似,均用于存于较短的字符串,主要的不同之处在于存储方式。CHAR类型长度固定,VARCHAR类型的长度可变。
因为VARCHAR类型能够根据字符串的实际长度来动态改变所占字节的大小,所以在不能明确该字段具体需要多少字符时推荐使用VARCHAR类型,这样可以大大地节约磁盘空间、提高存储效率。
CHAR和VARCHAR表示的是字符的个数,而不是字节的个数
4.日期和时间类型
TIMESTEMP类型的数据指定方式与DATETIME基本相同,两者的不同之处在于以下几点:
(1) 数据的取值范围不同,TIMESTEMP类型的取值范围更小。
(2) 如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了NULL值,MySQL会自动将该字段赋值为系统当前的日期与时间。
(3) TIMESTEMP类型还可以使用CURRENT_TIMESTAMP来获取系统当前时间。
(4) TIMESTEMP类型有一个很大的特点,那就是时间是根据时区来显示的。例如,在东八区插入的TIMESTEMP数据为2017-07-11 16:43:25,在东七区显示时,时间部分就变成了15:43:25,在东九区显示时,时间部分就变成了17:43:25。
5、创建数据库表
1、创建数据库表(DDL_、DML_)
##单行注释
-- 单行注释
/*
多行注释
多行注释
*/
/*
建立一张用来存储学生信息的表
字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息
学号是主键 = 不能为空 + 唯一
姓名不能为空
性别默认值是男
Email唯一
*/
##创建数据库表
create table t_student(
sno int(6), -- 6显示长度 ,中间用英文逗号隔开,最后用英文分号结尾。
sname varchar(5), -- 5个字符
sex char(1),
age int(3),
enterdate date,
classname varchar(10),
email varchar(15)
);
-- 查看表的结构:展示表的字段详细信息
desc t_student;
-- 查看表中数据:
select * from t_student;
-- 查看建表语句:
show create table t_student;
/*
CREATE TABLE `t_student` (
`sno` int DEFAULT NULL,
`sname` varchar(5) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`age` int DEFAULT NULL,
`enterdate` date DEFAULT NULL,
`classname` varchar(10) DEFAULT NULL,
`email` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
*/
2、添加数据(DML_)
注意事项
1)int 宽度是显示宽度,如果超过,可以自动增大宽度 int底层都是4个字节
2)时间的方式多样 ‘1256-12-23’ “1256/12/23” “1256.12.23”
3)字符串不区分单引号和双引号
4)如何写入当前的时间 now() , sysdate() , CURRENT_DATE()
5)char varchar 是字符的个数,不是字节的个数,可以使用binary,varbinary表示定长和不定长的字节个数。
6)如果不是全字段插入数据的话,需要加入字段的名字
##查看记录
select * from t_student;
-- 在t_student数据库表中插入数据:
insert into t_student values(1,'霏霏','女',18,'2021.3.4','java1','12345@123.com');
insert into t_student values(2,'小刚','男',18,now(),'java1','12345@123.com');
insert into t_student (sno,sname,enterdate)values(3,'小明','2021.4.6')
3、修改,删除数据(DML_)------->操作的是表里的数据
注意事项
1)关键字,表名,字段名不区分大小写
2)默认情况下,内容不区分大小写
3)删除操作from关键字不可缺少
4)修改,删除数据别忘记加限制条件
-- 修改表中数据
update t_student set sex = '男' where sno = 2; -- 要用where条件限制
UPDATE T_STUDENT SET AGE = 20 WHERE SNO = 2;
update t_student set CLASSNAME = 'JAVA6' where sno = 4;
update t_student set age = 21 where classname = 'java6';
update t_student set enterdate = '2021.5.6' where classname = 'java6';
-- 删除表中数据操作
delete from t_student where email = '12345@123.com';-- from一定不能省略
delete from t_student where enterdate = '2021-4-6';
4、修改,删除数据库表(DDL_)------->操作的是表
-- 查看记录
select * from t_student;
-- 修改表的结构
-- 增加一列
alter table t_student add score double(5,2);-- 5:总位数 2:小数位数
-- 修改表中数据
update t_student set score = 110.12 where sno = 3;
-- 注:如果出现 Out of range value for column 'score' at row 3错误就删除从新增加一遍
-- 增加一列(放在最前面)
alter table t_student add score double(5,2) first;
-- 增加一列(放在sex列的后面)
alter table t_student add score double(5,2) after sex;
-- 删除一列
alter table t_student drop score;
-- 修改一列
alter table t_student modify score float(4,1);-- modify修改是列的类型的定义,但是不会改变列的名字
alter table t_student change score score1 double(5,1); -- change修改列名和列的类型的定义
-- 删除表
drop table t_student;-- 如果查看记录就是报错的形式
5、表的完整性约束
为防止不符合规范的数据存入数据库,在用户对数据进行插入、修改、删除等操作时,MySQL提供了一种机制来检查数据库中的数据是否满足规定的条件,以保证数据库中数据的准确性和一致性,这种机制就是完整性约束。
MySQL中主要支持以下几种种完整性约束,如表所示。 其中Check约束是MySQL8中提供的支持。
注:黄色标记的即可表级约束也可列级约束
约束条件 | 约束描述 |
---|---|
PRIMARY KEY | 主键约束,约束字段的值可唯一地标识对应的记录 |
NOT NULL | 非空约束,约束字段的值不能为空 |
UNIQUE | 唯一约束,约束字段的值是唯一的 |
CHECK | 检查约束,限制某个字段的取值范围 |
DEFAULT | 默认值约束,约束字段的默认值 |
AUTO_INCREMENT | 自动增加约束,约束字段的值自动递增 |
FOREIGN KEY | 外键约束,约束表与表之间的关系 |
1)非外键约束
【1】第一种约束:列级约束
/*
建立一张用来存储学生信息的表
字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息
学号是主键 = 不能为空 + 唯一 主键的作用:可以通过主键查到唯一的一条记录如果主键是整数类型,那么需要自增
姓名不能为空
性别默认值是男
性别只能是男女
年龄只能在18-50之间
Email唯一
*/
##创建数据库表
create table t_student(
sno int(6)primary key auto_increment,
sname varchar(5)not null,
sex char(1)default '男' check(sex='男'||sex='女'),
age int(3)check (age>=18 and age<=50),
enterdate date,
classname varchar(10),
email varchar(15)unique
);
-- 查看表中数据
select * from t_student;
-- 添加数据
insert into t_student values (1,null,'有',17,now(),'java1','xm@123.com');-- 错误案列
-- 第一个错误提示 the right syntax to use near ';' at line 1
-- 第二个错误提示 Check constraint 't_student_chk_1' is violated.违反检查约束---》sex
-- 第三个错误提示 Check constraint 't_student_chk_2' is violated.违反检查约束---》age
-- 第四个错误提示 Column 'sname' cannot be null.不能为空
insert into t_student values (1,'小明','男',19,now(),'java1','xm@123.com');
insert into t_student values (2,'小刚','男',33,now(),'java1','xm@123.com');-- 错误案列
-- 第一个错误提示 Duplicate entry 'xm@123.com' for key 't_student.email'.违反唯一约束----》email
insert into t_student values (2,'小刚','男',33,now(),'java1','xg@123.com');
insert into t_student values (3,'小花','男',24,now(),'java1','xh@123.com');
insert into t_student values (null,'小菲','女',26,sysdate(),'java1','xf@123.com');
-- 如果主键没有设定值,或者用null.default都可以完成主键自增的效果
insert into t_student values (default,'小菲','女',26,sysdate(),'java1','xh@123.com');-- 错误案列
-- 如果sql报错,可能主键就浪费了,后续插入的主键是不连号的,我们主键也不要求连号的
-- 修改表中数据
update t_student set sex = '女'where sno = 3;
【2】第二种约束:列级约束 + 表级约束
约束从作用上可以分为两类:
(1) 表级约束:可以约束表中任意一个或多个字段。与列定义相互独立,不包含在列定义中;与定义用‘,’分隔;必须指出要约束的列的名称;
(2) 列级约束:包含在列定义中,直接跟在该列的其它定义之后 ,用空格分隔;不必指定列名;
-- 删除表
drop table t_student ;
-- 创建数据库表
create table t_student(
sno int(6) auto_increment,
sname varchar(5)not null,
sex char(1) default '男',
age int(3),
enterdate date,
classname varchar(10),
email varchar(15),
constraint ky_stu primary key(sno),
constraint ck_stu_sex check(sex='男'||sex='女'),
constraint ck_stu_age check(age>=18 and age<=50),
constraint uq_stu_email unique(email)
);
-- 查看表中数据
select * from t_student;
-- 添加数据
insert into t_student values(1,'小明','男',19,now(),'java1','xm@123.com' )
insert into t_student values(1,'小刚','我',60,now(),'java1','xm@123.com' )-- 错误案列
-- 第一个错误提示 Duplicate entry '1' for key 't_student.
-- 第二个错误提示 PRIMARY'Check constraint 'ck_stu_age' is violated.
-- 第三个错误提示 Check constraint 'ck_stu_sex' is violated.
-- 第三个错误提示 Duplicate entry 'xm@123.com' for key 't_student.uq_stu_email'
insert into t_student values(3,'小花','女',19,now(),'java1','xh@123.com' )
【3】在创建表以后添加约束:
-- 删除表
drop table t_student ;
-- 创建数据库表
create table t_student(
sno int(6) ,
sname varchar(5)not null,
sex char(1) default '男',
age int(3),
enterdate date,
classname varchar(10),
email varchar(15)
);
-- 查看表中数据
select * from t_student;
-- > 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
-- 错误的解决办法:就是auto_increment去掉
-- 添加约束
alter table t_student add constraint pk_stu primary key (sno);-- 主键约束
alter table t_student modify sno int(6) auto_increment;-- 修改自增条件
alter table t_student add constraint ck_stu_sex check (sex='男'||sex='女');
alter table t_student add constraint ck_stu_age check (age>=18 and age<=50);
alter table t_student add constraint uq_stu_email unique (email);
-- 创建表的结构
desc t_student;
验证约束添加成功:查看表结构:
2)外键约束
【1】什么是外键约束?
外键约束(FOREIGN KEY,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。
外键是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须具有主键约束或者唯一约束。被依赖的表我们通常称之为父表或者主表,设置外键约束的表称为子表或者从表。
举个例子:如果想要表示学生和班级的关系,首先要有学生表和班级表两张表,然后学生表中有个字段为stu_clazz(该字段表示学生所在的班级),而该字段的取值范围由班级表中的主键cla_no字段(该字段表示班级编号)的取值决定。那么班级表为主表,学生表为从表,且stu_clazz字段是学生表的外键。通过stu_clazz字段就建立了学生表和班级表的关系。
主表(父表):班级表 - 班级编号 - 主键
从表(子表):学生表 - 班级编号 - 外键
-- 先创建父表:班级表
create table t_class(
cun int(6) primary key auto_increment,
classname varchar(8)not null,
room char(5)
);
-- 增添班级数据
insert into t_class values(null,'java1','101教室');
insert into t_class values(null,'java2','102教室');
insert into t_class values(null,'java3','103教室');
insert into t_class values(null,'大数据1','104教室');
-- 可以一次性添加多条记录:
insert into t_class values(null,'java1','101教室'),(null,'java2','102教室'),(null,'java3','103教室'),(null,'大数据1','104教室');
-- 查看父表记录
select * from t_class;
-- 删除表
drop table t_student;
-- 创建子表:学生表
create table t_student(
sun int(6)primary key auto_increment,
sname varchar(9)not null,
classun int(6)-- 取值参考t_class表中的cun字段,不要求字段名字完全重复,但是类型长度定义 尽量要求相同。
);
-- 添加学生数据
insert into t_student values(null,'小明',1),(null,'小刚',1),(null,'小花',2),(null,'小飞',3),(null,'小华',4);
-- 查看学生记录
select * from t_student;
-- 出现问题:
-- 1.添加一个学生对应的班级编码为5:
insert into t_student values (null,'丽丽',5);
-- 2.删除班级2:
delete from t_class where cun= 2;
-- 出现问题的原因:
-- 因为你现在的外键约束,没用语法添加进去,现在只是逻辑上认为班级编号是外键,没有从语法上定义
-- 解决办法,添加外键约束:
-- 注意:外键约束只有表级约束,没有列级约束:
create table t_student(
sun int(6)primary key auto_increment,
sname varchar(9)not null,
classun int(6),
constraint fk_stu_classun foreign key (classun) references t_class(cun)
);
-- 在创建表以后添加外键约束:
alter table s_student add constraint fk_stu_classun foreign key (classun) references t_class(cun);
-- 上面的两个问题都解决了:
-- 添加学生信息:
insert into t_student values (null,'小明',1),(null,'小刚',1),(null,'小花',2),(null,'小飞',3),(null,'小华',4);-- 错误案例
-- > 1452 - Cannot add or update a child row: a foreign key constraint fails (`mytestsql`.`t_student`, CONSTRAINT `fk_stu_classun` FOREIGN KEY (`classun`) REFERENCES `t_class` (`cun`))
insert into t_student values (null,'小明',1),(null,'小刚',1),(null,'小飞',3),(null,'小华',4);
-- 删除班级1:
delete from t_class where cno = 1;
-- > 1451 - Cannot delete or update a parent row: a foreign key constraint fails (`mytestsql`.`t_student`, CONSTRAINT `fk_stu_classun` FOREIGN KEY (`classun`) REFERENCES `t_class` (`cun`))
delete from t_class where cun = 3;
3)外键策略
-- 删除从表
drop table t_student;
-- 删除主表
drop table t_class;
-- 先删从表再删主表
-- 先创建父表:班级表
create table t_class(
cun int(6) primary key auto_increment,
classname varchar(8)not null,
room char(5)
);
-- 一次性增添班级数据
insert into t_class values(null,'java1','101教室'),(null,'java2','102教室'),(null,'java3','103教室'),(null,'大数据1','104教室');
-- 创建子表:学生表:添加外键约束:
-- 注意:外键约束只有表级约束,没有列级约束:
create table t_student(
sun int(6)primary key auto_increment,
sname varchar(9)not null,
classun int(6),
constraint fk_stu_classun foreign key (classun) references t_class(cun)
);
-- 添加学生数据
insert into t_student values(null,'小明',1),(null,'小刚',1),(null,'小花',2),(null,'小飞',3),(null,'小华',4);
-- 查看父表记录
select * from t_class;
-- 查看学生记录
select * from t_student;
-- 删除班级:如果直接删除的话肯定不行因为有外键约束:
-- 加入外键策略:
-- 策略1:no action 不允许操作
-- 通过操作sql来完成:
-- 先把班级2的学生对应的班级 改为null
update t_student set classun= null where classun = 2;
-- 然后再删除班级2:
delete from t_class where cun = 2;
-- 策略2:cascade 级联操作:操作主表的时候影响从表的外键信息:
-- 先删除之前的外键约束:
alter table t_student drop foreign key fk_stu_classun;
-- 重新添加外键约束:
alter table t_student add constraint fk_stu_classun foreign key (classun) references t_class(cun) on update cascade on delete cascade;
-- 试试更新:
update t_class set cun = 5 where cun = 3;
-- 试试删除:
delete from t_class where cun = 5;
-- 策略3:set null 置空操作:
-- 先删除之前的外键约束:
alter table t_student drop foreign key fk_stu_classun;
-- 重新添加外键约束:
alter table t_student add constraint fk_stu_classun foreign key (classun) references t_class(cun) on update set null on delete set null;
-- 试试更新:
update t_class set cun = 8 where cun = 1;
-- 注意:
-- 1. 策略2 级联操作 和 策略2 的 删除操作 可以混着使用:
alter table t_student add constraint fk_stu_classun foreign key (classun) references t_class(cun)on update cascade on delete set null;
-- 2.应用场合:
-- (1)朋友圈删除,点赞。留言都删除 -- 级联操作
-- (2)解散班级,对应的学生 置为班级为null就可以了,-- set null
4)DDL和DML的补充
【1】delete和truncate的区别:
从最终的结果来看,虽然使用TRUNCATE操作和使用DELETE操作都可以删除表中的全部记录,但是两者还是有很多区别的,其区别主要体现在以下几个方面:
(1)DELETE为数据操作语言DML;TRUNCATE为数据定义语言DDL。
(2) DELETE操作是将表中所有记录一条一条删除直到删除完;TRUNCATE操作则是保留了表的结构,重新创建了这个表,所有的状态都相当于新表。因此,TRUNCATE操作的效率更高。
(3)DELETE操作可以回滚;TRUNCATE操作会导致隐式提交,因此不能回滚(在第十章中会讲解事务的提交和回滚)。
(4)DELETE操作执行成功后会返回已删除的行数(如删除4行记录,则会显示“Affected rows:4”);截断操作不会返回已删除的行量,结果通常是“Affected rows:0”。DELETE操作删除表中记录后,再次向表中添加新记录时,对于设置有自增约束字段的值会从删除前表中该字段的最大值加1开始自增;TRUNCATE操作则会重新从1开始自增。
-- 创建表:
create table t_student(
sno int(6) primary key auto_increment,
sname varchar(5) not null,
sex char(1) default '男' check(sex='男' || sex='女'),
age int(3) check(age>=18 and age<=50),
enterdate date,
classname varchar(10),
email varchar(15) unique
);
-- 添加数据:
insert into t_student values (null,'张三','男',21,'2023-9-1','java01班','zs@126.com');
insert into t_student values (null,'李四','男',21,'2023-9-1','java01班','ls@126.com');
insert into t_student values (null,'露露','男',21,'2023-9-1','java01班','ll@126.com');
-- 查看学生表:
select * from t_student;
-- 添加一张表:快速添加:结构和数据跟t_student 都是一致的
create table t_student2
as
select * from t_student;
select * from t_student2;
-- 快速添加,结构跟t_student一致,数据没有:
create table t_student3
as
select * from t_student where 1=2;
select * from t_student3;
-- 快速添加:只要部分列,部分数据:
create table t_student4
as
select sno,sname,age from t_student where sno = 2;
select * from t_student4;
-- 删除数据操作 :清空数据
delete from t_student;
truncate table t_student;