MySQL 数据类型和约束(外键是重点🙄)
数据类型
1. 数字(默认都是由符号,宽度表示的是显示宽度,与存储无关).tinyint 括号里指定宽度
七位2进制数最大数就是2**7 -1=127 最小是-128
验证:
create tabel t1(id tinyint)
create tabe t2(id int)
浮点数
float
double
decimal
测试
create table t2(salary float)
float(6,2) 第一参数,代表宽度. 第二个参数代表小数点后面的位数.
2.字符串类型
char 与 varchar
char 类型:定长,浪费空间,存取速度快
不够就用空格补,
字符长度范围: 0 ~ 255
create table t6(name char(4));
insert into t6('aigen')#存不进去
insert into t6('能不能存') #能存进去
####varchar:变长,精准,节省空间,存取速度慢
字符长度范围:0 ~ 65535
**char 和 varchar 区别: char(5), 存不够5个,用空格补齐. varhar(5), 你是几个它就存几个.**
char_length : 查看的是字符的长度
'abc'和'你好啊' 都是三个字符.
但是前面是3个字节,后面 char(5)的length话,是11个字节.
length : 查看字节.
一个英文字符算一个 bytes
一个中文字符算3个 bytes
insert into t7 values('abc','abc ')
select * from t6 where y= 'abc '
3.日期类型
create table student(
id int,
name char(5),
born_date date,#'2017-09-06',
born_year year, #'2017',
res_time datetime, #'2017-09-06 10:53:23'
class_time time #'10:53:23'
);
insert into student values(1,'ff',now(),now(),now(),now());
insert into student values(2,'ff2',,now(),now(),now());
4.枚举和集合
enum 枚举: 规定一个范围,可有多个值,但是为该字段传值时,只能取规定范围内的一个值.
set 集合: 规定一个范围,但是为该字段传值时,能取规定范围中的一个值或多个值.
create table person(
id int primary key auto_increment,
name char(10),
sex enum('male','female'),
hobbies set('music','read','swimming','learning English')
);
insert into person (name,sex enum,hobbies set) values('ff','male','read,swimming');
约束
1.not null和 default...
create table student( id int primary key auto_increment, name char(5), sex enum('male','female') not null default 'femela' );
insert into student (name) values('egon');
2.unique 唯一
主键就是不为空且唯一.
2.1单列唯一
create table teacher( id int not null unique, name char(10));
insert into teacher values(1,'go');
insert table teacher values(1,'alex');
2.2多列唯一
create table service( id int primary key autoincrement, name char(10), host char(15), port int, /#constraint hostport unique(host,port) );
2.3偏移量: autoincremenoffset
create table dep( id int primary key autoincrement, name char(10) )autoincrement=10;
insert into dep(name) values ('it'),('hr');
2.4步长 autoincrementincrement
create table dep( id int primary key auto_increment, name char(10) );
insert into dep(name) values ('it'),('hr');
set session autoincrementincrement=10;#会话级,只对当前回话有效.
set global autoincrementincrement=2;#全局,对所有的会话都有效.
autoincrementoffset#偏移量(也就是从几开始) + autoincrementincrement#步长
set session autoincrementoffset=5; set session autoincrementincrement=2;
!!!如果偏移量的值大于步长的值,则偏移量的值会被忽略!
set session autoincrementoffset=2;
set session autoincrementincrement=3;
2.5show variables like '%auto_in%'; #查看变量
primary key字段的值不为空且唯一... 一个表中可以,一般都加在 id 字段上. ```
3.foreign key(附练习) #外键
关联
关联 自己的字段 references(关联) 要关联的地方(字段) dep(id);
foreign key (dep_id) references dep(id)
如果想指定名字 constraint fk_depid_id
先建被关联的表,先建被关联的表,要保证被关联的那个表示不为空且唯一的表. 关联: 多的关联那个1, 多本书关联一个出版社,那么被关联的就是出版社.
create table dep(
id int,
name varchar(50),
comment varchar(100)
);
然后建需要关联的表: create into emp_info(
id int primary key auto_increment,
name varchar(20),
dep_id int,
foreign key(dep_id) references dep(id)
on delete cascade
on update cascade
);
delete from dep where id=2;
update dep set id = 301 where id=3;
以上就是一条记录对应另一个表的多条记录.
先给被关联的表插入初始化记录
一个作者可以属于多个出版社
一本书只能属于一个出版社
书(两本书的信息)
出版社(1设,2设)
多本书属于一个出版社,那么就是多对1, 1就是需要被关联的那个表
书这张表 foreign key了出版社那张表的 id 字段.
出版社是需要被关联的那个1.
create table press(
id int primary key auto_increment,
name varchar(20) not null
);
create table book(
id int primary key auto_increment,
name varchar(20),
press_id int not null,
foreign key(press_id) references press(id)
on delete cascade
on update cascade
insert into press(name) values('人出版社'),('民出版社');
insert into book(name,press_id) values ('pyjy',1),('ons',2),('go',2),('python',2),('java',3);
一个作者可以写多本书,一本书可以有多个作者,他俩相互对应
create table author(
id int primary key auto_increment,
name varchar(20)
);
create table book2author(
id int not null unique auto_increment,
book_id int not null,
author_id int not null,
foreign key(book_id) references book(id)
on delete cascade
on update cascade,
foreign key(author_id) references author(id)
on delete cascade
on update cascade,
primary key (book_id,author_id)
);
insert into author(name) values('ff'),('jm'),('by');
insert into book2author(book_id,author_id) values(1,1),
(1,2),
(1,3),
(1,4),
(1,5),
(1,6),
(2,1),
(2,6),
(3,4),
(3,5),
(3,6),
(4,1);
每个作者与自己的代表作如下
1 ff:
1 九阳神功
2 九阴真经
3 九阴白骨爪
4 独孤九剑
5 降龙十巴掌
6 葵花宝典
2 jm:
1 九阳神功
6 葵花宝典
3 by:
4 独孤6剑
5 降龙7巴掌
6 玫瑰花花宝典
MySQL 数据类型和约束(外键是重点🙄)的更多相关文章
- MySQL (六)--外键、联合查询、子查询
1 外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称为外键. 1.1 增加外键 外键可以在创建表的时候或创建表之后增 ...
- 备忘:MySQL中修改表中某列的数据类型、删除外键约束
-- MySQL中修改表中某列的数据类型 ALTER TABLE [COLUMN] 表名 MODIFY 列名 列定义; -- 删除外键约束 SHOW CREATE TABLE 表名; -- 复制CON ...
- mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint f ...
- 总结mysql的三种外键约束方式
如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常 ...
- mysql 启动和关闭外键约束
在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint f ...
- mysql常用命令添加外键主键约束存储过程索引
数据库连接 mysql -u root -p123456 查看表 show databases 创建数据库设置编码 create table books character set utf8; 创建用 ...
- MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束
/* MySQL进阶13 常见六大约束: 1.not null 非空 2.default :默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primary key : 主键,用 ...
- mysql数据库中表的外键约束
一.外键约束 1.什么是外键? 外键指的是其他表中的主键,当做该表的外键. 2.创建外键. 2.1 可在创建表的时候直接创建外键,如图所示: create table table_name (字段名 ...
- MySQL 如何删除有外键约束的表数据
今天删除数据库中数据,提示因为设置了foreign key,无法修改删除 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS=0; 删除 ...
随机推荐
- form表单提交引发的血案
最近,公司某条产品线上的一个功能出了问题:点击查询的时候,该页面在IE上直接卡死,chrome上会卡顿一段时间候提交表单进行查询.拿到这个bug单子以后,简单重现了下,基本上定位到是查询操作中的问题, ...
- XSS攻击原理及防御措施
概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联系 ...
- 自动化构建工具—gulp的简单配置
把之前用到的gulp总结整理下,有时候说不出来的,就写出来吧,做个笔记,以后也可以慢慢补充 cnpm i --save-dev gulp 把nodejs模块写到package.json配置文件中,当保 ...
- 关于Switch case条件语句中无break的用法
关于Switch case条件语句的另类用法 今天在拜读一位前辈的程序时,遇到了这样一段程序: /***************************/ switch(operation ...
- 关于xshell:Connection closed by foreign host
因为原来系统网有时掉,有时卡(同局域网别人没事),重新做了系统. 装了xmanager3,在用xshell连接linux服务器时,提示:服务器发送了一个无效的密钥,然后输出:Connection cl ...
- Golang中的信号处理
信号类型 个平台的信号定义或许有些不同.下面列出了POSIX中定义的信号. Linux 使用34-64信号用作实时系统中. 命令 man 7 signal 提供了官方的信号介绍. 在POSIX.1-1 ...
- 《Pro Android Graphics》读书笔记之第六节
Android UI Layouts: Graphics Design Using the ViewGroup Class Android ViewGroup Superclass: A Founda ...
- Matlab人脸检測方法(Face Parts Detection)具体解释
今天同学让我帮忙制作一个人脸表情识别的样本库,当中主要是对人脸进行裁剪,这里用到了一个相对较新的Matlab人脸检測方法Face Parts Detection.网上百度了一下发现关于Matlab人脸 ...
- django+Echarts实现数据可视化
1.实时异步加载(从mysql读取数据) 2.scatter散点图 3.雷达图(参数选择要注意) time_1 time_2 time_3 4.面积图 我上传的源码请到github下载:https:/ ...
- 插入光盘,创建挂载点,挂载设备,安装rpm包,升级rpm包,卸载rpm包,查询rpm包是否安装,查询rpm包信息、安装位置,查询系统文件名属于哪个安装包
插入光盘: 创建挂载点: 创建挂载点. 挂载设备:或者mount /dev/sr0 /mnt/cdrom 安装rpm包: [root@localhost Packages]# rpm -ivh mys ...