数据类型

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 数据类型和约束(外键是重点🙄)的更多相关文章

  1. MySQL (六)--外键、联合查询、子查询

    1 外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称为外键. 1.1 增加外键 外键可以在创建表的时候或创建表之后增 ...

  2. 备忘:MySQL中修改表中某列的数据类型、删除外键约束

    -- MySQL中修改表中某列的数据类型 ALTER TABLE [COLUMN] 表名 MODIFY 列名 列定义; -- 删除外键约束 SHOW CREATE TABLE 表名; -- 复制CON ...

  3. mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)

    在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint f ...

  4. 总结mysql的三种外键约束方式

    如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常 ...

  5. mysql 启动和关闭外键约束

    在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint f ...

  6. mysql常用命令添加外键主键约束存储过程索引

    数据库连接 mysql -u root -p123456 查看表 show databases 创建数据库设置编码 create table books character set utf8; 创建用 ...

  7. MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束

    /* MySQL进阶13 常见六大约束: 1.not null 非空 2.default :默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primary key : 主键,用 ...

  8. mysql数据库中表的外键约束

    一.外键约束 1.什么是外键? 外键指的是其他表中的主键,当做该表的外键. 2.创建外键. 2.1 可在创建表的时候直接创建外键,如图所示: create table table_name  (字段名 ...

  9. MySQL 如何删除有外键约束的表数据

    今天删除数据库中数据,提示因为设置了foreign key,无法修改删除 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS=0; 删除 ...

随机推荐

  1. 探究PHP底层

    探究PHP底层 1.PHP是什么?   PHP 指的是我们从外面看到的一套完整的系统.这听起来有点糊涂,但其实并不复杂(PHP4 内部结构图).从功能上来分:我们可以分为三部分: 1. 解释器部分(Z ...

  2. Cs Round#56 D Find Path Union

    题意:有一棵如下的完全二叉树,求所有给定结点到根节点的路径的并有多少条边. 一开始联想到线段树,发现结点的排布很像线段树的标号.于是模仿线段树敲了一下,交上去发现3个点MLE了... 无心优化,跑去看 ...

  3. Spark之搜狗日志查询实战

    1.下载搜狗日志文件: 地址:http://www.sogou.com/labs/resource/chkreg.php 2.利用WinSCP等工具将文件上传至集群. 3.创建文件夹,存放数据: mk ...

  4. Solr集群搭建详细教程(一)

    一.Solr集群的系统架构 注:欢迎大家转载,非商业用途请在醒目位置注明本文链接和作者名dijia478,商业用途请联系本人dijia478@163.com. SolrCloud(solr 云)是So ...

  5. django序列化时使用外键的真实值

    展示: 普通情况下序列化得到的外键的内容仅仅是id: ... { fields: { uat_date: "2015-07-25", statu: "CG", ...

  6. 高版本号chrome安装flashplayer debuger后无法使用的问题

    起因应该是苹果公司指出flash player的安全问题,还有各种原因导致google将在未来取消NPAPI的支持,所以fp们就悲剧了在高版本号chrome(42以上)默认是关闭外部安装的插件使用的, ...

  7. logstash 向elasticsearch写入数据,怎样指定多个数据template

    之前在配置从logstash写数据到elasticsearch时,指定单个数据模板没有问题.可是在配置多个数据模板时候,总是不成功,后来找了非常多资料,最终找到解决的方法,就是要多加一个配置项: te ...

  8. NYOJ15-括号匹配(二)-区间DP

    pid=15">http://acm.nyist.net/JudgeOnline/problem.php? pid=15 dp[i][j]表示从i到j至少须要加入多少个括号才干满足匹配 ...

  9. USACO Section 2.1 Healthy Holsteins

    /* ID: lucien23 PROG: holstein LANG: C++ */ #include <iostream> #include <fstream> #incl ...

  10. idea svn 的使用----转载,挺好的

    Intellij IDEA svn的使用记录 这里的忽略一直灰色的,可以进入 这里的版本控制里进行忽略选择 或者 这里进行添加 这里有三个选择 按照顺序 1.忽略指定的文件 2.忽略文件夹下所有文件 ...