表
1.表的创建:
1.1DDL语句:create、drop、alter
create table 表名(
字段1 数据类型,
字段名2 数据类型
);
数据类型总结:
varchar(最长255):
可变长度的字符串;(10)
比较智能,会根据长度自动分配空间jack就直会分配4个;优缺点:节省空间,动态分配效率低
char(最长255):
定长字符串
不管诗句的数据长度是多少。分配固定长度的空间爱哪去存储数据,会导致空间浪费,但是效率高;
选择条件:每个数据的格式不一致,定长选择char;
int(最长11):
数组中的整数型。等同于java的int
bigint:
数字当中的长整型,等同于java中的long;
float:
单精度浮点型数据
double
双精度浮点型数据
date
短日期类型
datetime
长日期类型
clob
字符大对象
最多可以存储4G的字符串。
比如:存储一篇文章,存储一个说明(超过255)。
blob
二进制大对象
专门用来存储照片、视频、声音等流媒体数据。
往BLOb类型的字段上插入数据的时候,例如:视频等,需要使用IO流才可以。
模拟案例:
t_movie电影表(专门存储电源信息的)
编号 名字 描述信息 上市日期 时长 海报(图片) 种类
no(bigInt) name(varchar) description(clob) playtime(date) time(double) image(blob) type(char)
1000 随便 ...... 2019-10-11 2.5 ... 惊悚;
创建学生表
删除学生表
CREATE TABLE b_student( id int , sName VARCHAR(32), sex char(1), age int(3), email VARCHAR(255) );
-- DROP TABLE IF EXISTS b_student;
7.4、插入数据insert(DML)
语法格式:
insert into 表名(字段名1,字段名2,...)values(值1,值2...);
注意:字段名和值要一一对应;
insert执行必然会多一条数据;
案例:插入两条语句;
-- INSERT into b_student VALUES(111,'x下','男',23,'sjude@111.com'); -- INSERT into b_student (id,sName,sex,age,email) VALUES(112,'xx','女',20,'jude@333.com'); -- SELECT *FROM b_student;
INSERT into b_student (id,sName,sex,email) VALUES(113,'xa','女','acde@233.com');
注意:插入的数据必须符合要求,前面不写字段名的时候,后面的默认全部都会插入(必须补充完整);
案例:
可以在建表的时候设置默认值;
7.5insert插入日期:
数字格式化format
格式化数:format(数字,‘格式’)
select bName,format(bSalary,’$999,999’) as sal from b_user;//加入千分位‘$999,999’
str_to_date:将字符串varchar类型转换成date类型;日期转换方式;
date_format:将date类型转换成具有一定格式的varchar字符串类型;
drop table if exists t_user;
create table t_user(
id int,
name varchar(32),
birth date
)
str_to_date的语法格式:
str_to_date(‘字符串日期’,‘日期格式’)
mysql的日期格式:
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
插入日期数据: insert into t_user(id,name,birth) values(1,’zhangsan’,str_to_date(‘2002-01-07’,’%Y-%m-%d’));
date_format函数怎么用?
date_format(日期类型数据,‘日期格式’)
select id,name,date_format(brith,’%Y/%m/%d’) as birth from t_user;
2、date 和datetime两个类的区别:
date短日期:只有年月日 datetime长日期: 年月日和时分秒,性能好
DROP TABLE if EXISTS t_user; CREATE TABLE t_user( id int, name varchar(32), birth date, create_time datetime );
now()函数获取当前时间,时间是datetime类型;拥有时分秒;
3.update修改
格式:update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3...where条件;
注意:没有条件限制会导致所有的数据全部更新;
update
4.delete删除数据
delete from 表名 where 条件;
注意:没有条件就会删除整个表的数据;
delete from t_user where id=1;
5.insert 一次插入多条记录
语法:insert into 表名(字段1,字段2,...) values(),
(),
();
insert INTO t_user VALUES (2,'xiao','2023-02-12',NOW()), (3,'xx','2132-3-2',NOW()), (4,'dad','1222-3-4',NOW()); SELECT *from t_user;
3.快速创建表?
create table emp2 as select * from t_student;
在查询的时候顺便将信息创建出来;
4.快速插入表中的数据;
查询再插入;
4.delete 删除表中的数据(属于DML语句)
语法格式:delete from 表名
删除表中的数据,删除语句效率太低;
DELETE FROM emp2; SELECT *from emp2;
表中的数据被删除了,但是硬盘的数据空间还是存在的。
缺点是:删除效率低;
优点:删除的数据支持回滚;可以再恢复数据;
5、trancate语句删除数据的原理?(属于DDL语句)(表被截断不能删除单行信息)
这种删除效率比较高,表被一次截断,物理删除。
优缺点和delete刚好相反;
语法:trancate table emp2;
6.对表结构的增删改(DDL语句 使用alter关键字)
添加一个字段,删除一个字段,修改一个字段;
操作很少;(可以借助工具);
7.约束(非常重要 ***)
7.什么是约束?
约束对应的英语单词:constraint
在创建表的时候我们会给表中的字段加上一些约束,来保证这个表中的数据的完整性、有效性!!!
约束的作用:就是为了保证表中的数据有效;
1. 2约束包括哪些?
非空约束:not null唯一约束:unique
主键约束:primary key(PK)
外键约束:foreign key(FK) 检查约束:check(mysql不支持,oracle支持)
重点学习前四个
7.3非空约束 not null;
7.4唯一性约束:unique不能有重复;唯一性的信息;
可以为null(不算重复)内部字段都为null是可以的;
分类:
• 列级约束:添加在列后面的约束
• 表级约束:多个字段联合起来的,约束没有添加在列后面的约束;
案例:
1. 两个字段联合起来具有唯一性;
2. 但是单独是可以插入的,张三和张三可以重复;
3. 联和起来唯一的操作:
4. unique(name,email)
-- drop table if EXISTS emp2; -- CREATE table emp2( -- id INT, -- name VARCHAR(32), -- email VARCHAR(255), -- UNIQUE(name,email) -- ); -- INSERT into emp2(id,name,email) VALUE -- (1,'zhangsan','2132@sina.com'), -- (2,'zhangsan','13231@line.com'); SELECT *from emp2;
//数据是可以插入进去的,两个同时相同才可以。
8.not null 和unique可以同时使用在一个列上面;
在MySQL当中一个字段同时使用not null 和unique同时修饰的话,该字段自动变成主键(注意:oracle不一样!)
案例:
CREATE table emp2( id INT, name VARCHAR(255) not null UNIQUE );
DESC emp2;//desc查看表结构
7.5主键约束(primary key 简称:pk)
主键约束的相关术语:
主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段;
主键值: 主键字段中的每一个值都叫做:主键值。
主键的作用:
主键是每一行记录的唯一标识。
主键值类似于每一行记录的身份证号;
注意:任何一张表都应该有主键,没有主键就没有约束,表无效;
主键:not null +unqiue()
怎么给一张表添加主键?(也可以使用表级约束)
表级约束主要是给多个元素添加为主键;(叫复合主键)
drop table if exists t_vip;
create table t_vip(
id int(11) ,
name varchar(33) ,
primary key(id, name) //符合主键
);
在实际开发中一般使用的是单一主键;
一个表的主键约约束能加两个嘛?
drop table if exists t_vip;
create table t_vip(
id int primary key,
name varchar(33) primary key
);
结论:报错,不能,一张表的单一主键设置只能有一个主键约束;
主键值:建议使用:int bigint char类型;不建议vachar,是固定的;
主键除了:单一主键和复合主键之外,还能这样分:
自然主键:主键值是一个自然数,和业务没关系,
业务主键:主键值和业务紧密相连,例如:拿着银行账号做主键值。这就是业务主键!
实际开发中:尽量使用自然主键,业务主键不太经常使用,业务和数据挂钩容易更改信息,不太稳定;
在mysql当中,有一种机制,可以帮助我们去自动维护主键值?
案例:
drop table if exists t_vip;
create table t_vip(
id int primary key auto_increment,
name varchar(33)
);
insert into t_vip(name) values
(‘zaizai1’),
(‘djans1’),
(dwq);
auto_increment //自动递增生成主键的信息
9. 外键约束(foreign key, 简称FK) 【非常重要】***
外键约束涉及到的相关术语:
外键约束:一种约束(foreign key);
外籍字段:该字段上添加外键约束;
外键值 :外键字段当中的每一个值;
业务背景:
请设计数据库表,来描述“班级和学生”的信息?
第一种:班级学生写一张表会造成数据的冗余;
no(pk)
name
classno
classname
1
jack
101
甘肃省武威市凉州区第一中学高三1班
2
tom
101
甘肃省武威市凉州区第一中学高三1班
3
aaa
101
甘肃省武威市凉州区第一中学高三1班
4
bbb
102
甘肃省武威市凉州区第一中学高三2班
5
cc
102
甘肃省武威市凉州区第一中学高三2班
6
ans
102
甘肃省武威市凉州区第一中学高三2班
7
black
102
甘肃省武威市凉州区第一中学高三2班
第二种:班级和学生两张表
t_class 班级表
classno(PK)
classname
101
甘肃省武威市凉州区第一中学高三1班
102
甘肃省武威市凉州区第一中学高三2班
t_student 学生表
no(pk)
name
classno(FK--引用t_class的classno字段)
1
jack
101
2
tom
101
3
aaa
101
4
bbb
102
5
cc
102
6
an
102
7
black
102
外键约束才能保障数据有效;
被引用的表叫做父表,引用的表叫做子表;
注意: 删除表的顺序:
先删除子,再删除父(没人用你再删)
创建表的顺序:
先创建父,再删除子
删除数据的顺序:
先删除子,再删除父
插入数据的顺序:
先插入父,再插入子;
添加外键语法:
foreign key(cno) reference t_class(clsasno);
案例实现:
drop table if exists t_student;
drop table if exists t_class;
create table t_class(
classno int primary key;
classname varchar(32)
);
insert into t_class(classno,classname) values
(101,’甘肃省武威市凉州区第一中学高三1班’),
(102,’甘肃省武威市凉州区第一中学高三2班’);
create table t_student(
no int primary key auto_increment,
name varchar(33),
foreign key(cno) reference t_class(classno)
);
insert into t_vip(name) values
(jack),(tom),(aaa),(bbb),(cc),(an)(black);
思考:子表的外键引用父表中的属性的时候,是不是一定是主键?
不一定,但是子表的外键对应父表的属性必须具有唯一性unique;
其二,外键可以为空;mysql alter table 非空 mysql非空怎么设置
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java使用JsonNode判断实体类非空
使用jsonNode去判断实体类的参数是否为空
jsonnode java hutool -
《动手学深度学习》4.6暂退法
在4.5节,我们通过权重衰减来减少模型的过拟合。本节将会介绍另外一种方法,也能达到很好的效果,也就是本节的标题,暂退法。
#深度学习 #人工智能 全连接 H2 随机数
















