数据库基础三
数据库
二十五、insert语句插入数据
语法格式:
insert into 表名(字段名1,字段名2,字段名3,.........)values(值1,值2,值3,............)
要求:字段的数量和值的数量相同,并且数据类型要对应相同。
insert into t_student(no,name,sex,classno,birth) values(1,'zhangsan','1','gaosan1ban','1950-10-12');
注意:
当一条insert语句执行成功之后,表格当中必然会多一行记录。
即使多的这一行记录中某些字段是NULL,后期也没办法在执行
insert语句插入数据了,只能使用update进行更新。
注意:
字段可以省略,但是后面的values对数量和顺序都有要求。
一次插入多行数据:
insert into t_student
(no,name,sex,classno,birth)
values
(3,'rose','1','gaosan2ban','1952-12-14'),(4,'laotie','1','gaosan2ban','1953-11-15');
二十六、表的复制以及插入
表的复制:
语法
create table 表名 as select语句;
将查询结果当做表创建出来。
将查询结果插入到一张表中:
insert into dept1 select * from dept;
二十七、修改数据:update
语法格式:
update 表名 set 字段名1=值1,字段名2=值2....where 条件;
注意:没有条件整张表数据全部更新。
将部门10的LOC修改为SHANGHAI,将部门名称修改为RENSHIBU
update dept1 set loc ='SHANGHAI',dname = 'RENSHIBU',where deptno =10;
更新所有记录
update dept1 set loc ='x',dname ='y';
二十八、删除数据
语法格式:
delete from 表名 where 条件;
注意:没有条件全部删除
删除10部门数据
delete from dept1 where deptno=10;
删除所有记录
delete from dept1;
怎么删除大表中的数据?
truncate table 表名; //表被截断,不可回滚。永久丢失。
删除表
drop table 表名;
drop table if exists 表名;//Oracle不支持这种写法。
增删改查有一个术语:CRUD操作
Create(增) Retrieve(检索) Update(修改) Delete(删除)
二十九、约束
1、什么是约束?常见的约束有哪些?
在创建表的时候,可以给表的字段添加相应的约束,添加相应约束的目的是为了保证表中数据的合法性、有效性、完整性。
常见的约束有
非空约束(not null):约束的字段不能为NULL
唯一约束(unique):约束的字段不能重复
主键约束(primary key):约束的字段既不能为NULL,也不能重复
外键约束(foreign key):........(简称为FK)
检查约束(check):注意Oracle数据库有check约束,但是mysql没有,目前mysql不支持。
2、非空约束 not null
drop table if exists t_user;
create table t_user(
id int;
useame varchar(255) not null,
password varchar(255)
);
insert into t_user(id,password) values(1,'123');
ERROR 1364(HY000):Field 'useame' doesn't have a default value //报错
insert into t_user(id,useame,password) values(1,'lisi','123');
3、唯一性约束(unique)
唯一约束修饰的字段具有唯一性,不能重复。但可以为NULL。
给一列添加unique
drop table if exists t_user;
create table t_user(
id int,
useame varchar(255) unique
);
insert into t_user values(1,'zhangsan');
insert into t_user values(2,'zhangsan');
ERROR 1062(23000):Duplicate entry 'zhangsan' for key 'useame' //报错
insert into t_user(id) values(2);
insert into t_user(id) values(3);
insert into t_user(id) values(4);
给两个列或多个列添加约束
drop table if exists t_user;
create table t_user(
id int,
usercode varchar(255),
useame varchar(255) ,
unique(usercode,useame) //多个字段联合起来添加一个约束
);
4、主键约束
drop table if exists t_user;
create table t_user(
id int primary key,
useame varchar(255) ,
email varchar(255),
);
//此表中的id不能为null,也不能重复
主键的特点:不能为NULL,也不能重复
主键相关术语:
主键约束:primary key
主键字段:id字段添加primary key之后,id叫做主键字段
主键值:id字段中的每一个值都是主键值
主键有什么用?
表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键
主键的作用:主键值是这行记录在这张表中的唯一标识。(就像一个人的身份证号)
主键的分类:
根据主键字段的字段数量来划分:
单一主键(推荐的,常用的)
复合主键(多个字段联合起来添加一个主键约束;不建议使用,因为复合主键违背三范式)
根据主键性质来划分:
自然主键:主键值最好就是一个和业务没有任何关系的自然数
业务主键:主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿身份证号做主键(不推荐使用)
最好不要拿着和业务挂钩的字段作为主键,因为以后的业务一旦发生改变的时候,主键值可能也随着发生变化。但有的时候没有办法变化,因为变化可能会导致主键值重复。
一张表的主键约束只能有1个
mysql提供主键值自增:
drop table if exists t_user;
create table t_user(
id int primary key auto_increment, //id字段自动维护一个自增的数字,从1开始,以1递增。
useame varchar(255) ,
);
insert into t_user(useame) values('a');
insert into t_user(useame) values('b');
insert into t_user(useame) values('c');
insert into t_user(useame) values('d');
提示:Oracle当中也提供了一个自增机制,叫做:序列(sequence)对象。
5、外键约束
外键约束相关术语:
外键约束:foreign key
外键字段:添加有外键约束的字段
外键值:外键字段中的每一个值
请设计数据库表,用来维护学生和班级的信息
两张表(班级表和学生表)
t_class 班级表
cno(pk) cname
------------------------------------------------------------------------------------
101 北京大兴区经济技术开发区亦庄二中高三1班
102 北京大兴区经济技术开发区亦庄二中高三2班
t_student 学生表
sno(pk) sname classno(该字段添加外键约束fk)
-------------------------------------------------------------------------------------
1 zs1 101
2 zs2 101
3 zs3 102
4 zs4 102
t_student中的classno字段引用t_class表中的cno字段,此时t_student表叫做子表,t_class表叫做父表。
顺序要求:
删除数据的时候,先删除子表,再删除父表。
添加数据的时候,先添加父表,再添加子表。
创建表的时候,先创建父表,在创建子表。
删除表的时候,先删除子表,再删除父表。
建表代码:
drop table if exists t_student;
drop table if exists t_class;
create table t_class(
cno int,
cname varchar(255),
primary key(cno)
);
create table t_student(
sno int,
sname varchar(255),
classno int,
foreign key(classno) references t_class(cno)
);
外键可以为NULL
外键引用的字段不一定是主键,但至少具有unique约束
三十、存储引擎(了解内容)
1、完整的建表语句
CREATE TABLE t_x(
id int(11) DEFAULT NULL,
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
建表的时候可以指定存储引擎,也可以指定字符集。
mysql默认使用的存储引擎是InnoDB方式。
默认采用的字符集是UTF8
2、什么是存储引擎?
存储引擎这个名字只有在mysql中存在。(Oracle中有对应的机制,但是不叫做存储引擎。就是‘表的存储方式’)
mysql支持很多存储引擎,每一个存储引擎都对应了一种不同的存储方式。
每一个存储引擎都有自己的优缺点,需要在合适的时机选择适合的存储引擎。
3、查看当前mysql支持的存储引擎
show engines \G
5.7一共有九个。
4、常见的存储引擎
MyISAM这种存储引擎不支持事务。
MyISAM是mysql最常用的存储引擎,但是这种引擎不是默认的
MyISAM采用三个文件组织一张表
xxx.frm(存储格式的文件)
xxx.MYD(存储表中数据的文件)
xxx.MYI(存储表中索引的文件)
优点:可被压缩,节省存储空间。并且可以转换为只读表,提高检索效率。
缺点:不支持事务。
-------------------------------------------------------------------------------
表的结构存储在xxx.frm文件中
数据存储在tablespace这样的表空间中(逻辑概念),无法被压缩,无法转换成只读。
这种InnoDB存储引擎在mysql数据库崩溃之后提供自动恢复机制
InnoDB支持级联删除和级联更新。
优点:支持事务。这种存储引擎数据的安全得到保障。
-----------------------------------------------------------------------------------
缺点:不支持事务。数据容易丢失。因为所有数据和索引都是存储在内存当中的。
优点:查询速度最快
以前叫HEPA索引。
作者:飞翔奥尔良烤翅
来源链接:https://www.cnblogs.com/webclub/p/14696301.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。