首页 / MYSQL / mysql基础知识之数据类型与约束
mysql基础知识之数据类型与约束
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql基础知识之数据类型与约束,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6921字,纯文字阅读大概需要10分钟。
内容图文
![mysql基础知识之数据类型与约束](/upload/InfoBanner/zyjiaocheng/920/479342c42e194ed6916d1c5a76f1db27.jpg)
一.约束
作用: 保证数据的完整性和一致性
表的设计
1.not null 和 default
not null 是放在最后用来约束 前面 数据类型的
(在原有基础上本来可以主键后面可以为空,但是一旦在后面约束,则当输出的values()为空的时候会出错)
default 是放在后面约束 前面数据类型 如 default 1
(在原有基础上本来可以主键后面可以为空,一旦加上后面约束 ,则输出values()为空的时候,不会报错,会显示default后面的值)
在同时存在 not null 和 default 的时候 输出values()不会出错 ,显示fault的值
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 mysql> create table student2( 2 -> id int not null, 3 -> name varchar(50) not null, 4 -> age int(3) unsigned not null default 18, 5 -> sex enum('male','female') default 'male', 6 -> fav set('smoke','drink','tangtou') default 'drink,tangtou' 7 -> ); 8 Query OK, 0 rows affected (0.01 sec) 9 10 # 只插入了not null约束条件的字段对应的值 11 mysql> insert into student2(id,name) values(1,'mjj'); 12 Query OK, 1 row affected (0.00 sec) 13 14 # 查询结果如下 15 mysql> select * from student2; 16 +----+------+-----+------+---------------+ 17 | id | name | age | sex | fav | 18 +----+------+-----+------+---------------+ 19 | 1 | mjj | 18 | male | drink,tangtou | 20 +----+------+-----+------+---------------+ 21 row in set (0.00 sec)学生约束练习
2.unique 不同的
应用举例: 创建公司部门表 (每一个表都是唯一的)
单列唯一:
就是再原有基础上用来限制 每一个数据结构只能是惟一的
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 create table dep(id int not null,name varchar(20) unique); 2 insert into dep(id,name) values(1,'alex'); 3 insert into dep(id,name) values(2,'alex');单列唯一
多列唯一:
就是在原有基础上用来限制多个数据结构
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 create table dep2(id int unique,name varchar(20) unique); 2 3 insert into dep2(id,name) values(1,'alex')多列唯一
组合唯一 :
相当于or ,两个一样才算错
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 create table dep3( 2 id int, 3 name varchar(20), 4 unique(id,name) 5 ); 6 insert into dep3(id,name) values(1,'alex'); 7 insert into dep3(id,name) values(1,'alex2'); 8 insert into dep3(id,name) values(2,'alex'); 9 10 不能插入的格式 11 insert into dep3(id,name) values(1,'alex');组合唯一
3.primary key
在进行约束后 key会为 PRI
一个表中可以:
单列做主键
多列做主键(复合主键)
约束:等价于 notnull unique,字段中的值不为空且唯一
存储引擎默认是(innodb):对于innodb存储引擎来说,一张表必须有一个主键。
单列主键
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 # 创建t14表,为id字段设置主键,唯一的不同的记录 2 create table t14( 3 id int primary key, 4 name char(16) 5 ); 6 7 insert into t14 values 8 (1,'xiaoma'), 9 (2,'xiaohong'); 10 11 mysql> insert into t14 values(2,'wxxx'); 12 ERROR 1062 (23000): Duplicate entry '6' for key 'PRIMARY' 13 14 15 # not null + unique的化学反应,相当于给id设置primary key 16 create table t15( 17 id int not null unique, 18 name char(16) 19 ); 20 mysql> create table t15( 21 -> id int not null unique, 22 -> name char(16) 23 -> ); 24 Query OK, 0 rows affected (0.01 sec) 25 26 mysql> desc t15; 27 +-------+----------+------+-----+---------+-------+ 28 | Field | Type | Null | Key | Default | Extra | 29 +-------+----------+------+-----+---------+-------+ 30 | id | int(11) | NO | PRI | NULL | | 31 | name | char(16) | YES | | NULL | | 32 +-------+----------+------+-----+---------+-------+ 33 rows in set (0.02 sec)单列主键
多列主键
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 create table t16( 2 ip char(15), 3 port int, 4 primary key(ip,port) 5 ); 6 7 insert into t16 values 8 ('1.1.1.2',80), 9 ('1.1.1.2',81); 10 11 验证复合主键的使用多列主键
4.auto_increment
约束:约束字段为自动增长,约束的字段必须同时被key约束
不指定id,则自动增长id
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 # 创建student 2 create table student( 3 id int primary key auto_increment, 4 name varchar(20), 5 sex enum('male','female') default 'male' 6 ); 7 8 mysql> desc student; 9 +-------+-----------------------+------+-----+---------+----------------+ 10 | Field | Type | Null | Key | Default | Extra | 11 +-------+-----------------------+------+-----+---------+----------------+ 12 | id | int(11) | NO | PRI | NULL | auto_increment | 13 | name | varchar(20) | YES | | NULL | | 14 | sex | enum('male','female') | YES | | male | | 15 +-------+-----------------------+------+-----+---------+----------------+ 16 rows in set (0.17 sec) 17 18 #插入记录 19 mysql> insert into student(name) values ('老白'),('小白'); 20 Query OK, 2 rows affected (0.01 sec) 21 Records: 2 Duplicates: 0 Warnings: 0 22 23 mysql> select * from student; 24 +----+--------+------+ 25 | id | name | sex | 26 +----+--------+------+ 27 | 1 | 老白 | male | 28 | 2 | 小白 | male | 29 +----+--------+------+ 30 rows in set (0.00 sec) 31 32 不指定id,则自动增长不指定id 自动增长
也可以指定id
指定后如果没有指定id 则会继续增长id
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 mysql> insert into student values(4,'asb','female'); 2 Query OK, 1 row affected (0.00 sec) 3 4 mysql> insert into student values(7,'wsb','female'); 5 Query OK, 1 row affected (0.01 sec) 6 7 mysql> select * from student; 8 +----+--------+--------+ 9 | id | name | sex | 10 +----+--------+--------+ 11 | 1 | 老白 | male | 12 | 2 | 小白 | male | 13 | 4 | asb | female | 14 | 7 | wsb | female | 15 +----+--------+--------+ 16 rows in set (0.00 sec) 17 18 # 再次插入一条不指定id的记录,会在之前的最后一条记录继续增长 19 mysql> insert into student(name) values ('大白'); 20 Query OK, 1 row affected (0.00 sec) 21 22 mysql> select * from student; 23 +----+--------+--------+ 24 | id | name | sex | 25 +----+--------+--------+ 26 | 1 | 老白 | male | 27 | 2 | 小白 | male | 28 | 4 | asb | female | 29 | 7 | wsb | female | 30 | 8 | 大白 | male | 31 +----+--------+--------+ 32 rows in set (0.00 sec) 33 34 也可以指定id可以指定id
删除后重头再来
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103793.jpg)
![mysql基础知识之数据类型与约束 - 文章图片](/upload/getfiles/0001/2021/5/9/20210509040103871.jpg)
1 mysql> delete from student; 2 Query OK, 5 rows affected (0.00 sec) 3 4 mysql> select * from student; 5 Empty set (0.00 sec) 6 7 mysql> select * from student; 8 Empty set (0.00 sec) 9 10 mysql> insert into student(name) values('ysb'); 11 Query OK, 1 row affected (0.01 sec) 12 13 mysql> select * from student; 14 +----+------+------+ 15 | id | name | sex | 16 +----+------+------+ 17 | 9 | ysb | male | 18 +----+------+------+ 19 row in set (0.00 sec) 20 21 #应该用truncate清空表,比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它 22 mysql> truncate student; 23 Query OK, 0 rows affected (0.03 sec) 24 25 mysql> insert into student(name) values('xiaobai'); 26 Query OK, 1 row affected (0.00 sec) 27 28 mysql> select * from student; 29 +----+---------+------+ 30 | id | name | sex | 31 +----+---------+------+ 32 | 1 | xiaobai | male | 33 +----+---------+------+ 34 row in set (0.00 sec) 35 36 mysql> 37 38 对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长自动增长的字段删除后从头来
内容总结
以上是互联网集市为您收集整理的mysql基础知识之数据类型与约束全部内容,希望文章能够帮你解决mysql基础知识之数据类型与约束所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。