MySQL之表约束
MySQL表约束
约束是一种限制,它通过对表的行或者列的数据做出限制,来确保表数据的完整性和唯一性. 在mysql当中一般有一下这几种约束:
- 非空约束。
- 唯一约束。
- 主键约束。
- 自增长。
- 默认约束。
- 外键约束。
表结构操作:
ALTER TABLE 'tbname'
增加 :ADD
删除 :DROP
修改 :MODIFY #改列的数据类型
CHANGE #改列名和数据类型
RENAME #改表名
#ADD
mysql> ALTER TABLE `tb1`
-> ADD (`age` INT,
-> `number` INT);
#DROP
mysql> ALTER TABLE `tb1`
-> DROP `number`;
#MODIFY
mysql> ALTER TABLE `tb1`
-> MODIFY `age` VARCHAR(4);
#CHANGE
mysql> ALTER TABLE `tb1`
-> CHANGE `age` `ages` INT;
#RENAME
mysql> ALTER TABLE `tb1` RENAME `tb2`;
#表名和字段名,尽量避免修改,即便是在封装得很好的情况下也要修改代码,如果是上线的东西就更加不要修改
非空约束
就是限制数据库中某个值是否可以为空,null字段值可以为空,not null字段值不能为空

注意: 如果你的约束不生效可以先设置一下sql_modeset session sql_mode='STRICT_TRANS_TABLES'。
唯一约束
字段添加唯一约束之后,该字段的值不能重复,也就是说在一列当中不能出现一样的值。
# 添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]]
UNIQUE [INDEX|KEY] [index_name] [index_type]
(index_col_name)
# 删除唯一约束
ALTERT TABLE tbl_name DROP {INDEX|KEY} index_name
已经添加的值不能再重复的插入

主键约束
主键保证记录的唯一性,主键自动为NOT NULL 每张数据表只能存在一个主键 NOT NULL + UNIQUE KEY 一个UNIQUE KEY 又是一个NOT NULL的时候,那么它被当做PRIMARY KEY主键 当一张表里没有一个主键的时候,第一个出现的非空且为唯一的列被视为有主键。
#添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT[sysbol]]
PRIMARY KEY [index_type] (index_col_name)
#删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY

自增长AUTO_INCREMENT
AUTO_INCREMENT自动编号,且必须与主键组合使用 默认情况下,起始值为1,每次的增量为1。 当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况:
- 如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
- 如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。
添加自增长
mysql> ALTER TABLE user CHANGE id id INT NOT NULL AUTO_INCREMENT;
mysql> DESCRIBE user
mysql> SELECT * FROM user;
插入值
mysql> INSERT INTO `user`(`name`,`number`) -> VALUES('take',2), -> ('which',4) -> ;
mysql> SELECT * FROM `user`;
删除自增长
mysql> ALTER TABLE `user` CHANGE `id` `id` INT NOT NULL ; mysql> DESCRIBE `user`;
默认约束
添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
设置默认值
mysql> ALTER TABLE `user` ALTER `number` SET DEFAULT 0; mysql> DESCRIBE `user`;
插入值
mysql> ALTER TABLE `user` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT; mysql> INSERT INTO `user`(`name`) VALUES('rock'); mysql> SELECT * FROM `user`;
查找值
mysql>select * from teacher where id=(select teacher_id from students where name='twj');
外键约束
外键约束要求数据表的存储引擎只能为InnoDB
查看当前mysql服务器支持的存储引擎
SHOW ENGINES;
编辑数据表的默认存储引擎
MySQL配置文件 ->/etc/my.cnf [mysqld] default-storage-engine=INNODB
改完配置文件要重启服务
sudo service mysqld restart

MySQL之表约束的更多相关文章
- mysql建表约束
--mysql建表约束--主键约束它能够唯一确定一张表中的内容,也就是我们通过某个字段添加约束,就可以是的该字段唯一(不重复)且不为空.create table user( id int pr ...
- access和MySQL mssql
Access.MSSQL.MYSQL数据库之间有什么区别? Access数据库.MSSQL数据库.MYSQL数据库之间有什么区别? 不少企业和个人站长在网站制作时,会对数据库的概 ...
- 2、MYSQL 基本数据库命令及约束
[注]sql语句注意不要忘了后面的 “ : ”,表示结束符 1.如何登陆数据库服务器 C:\Users\zhg>mysql -uroot -p Enter password: ****** ...
- 黑马MySQL数据库学习day03 级联 多表查询 连接和子查询 表约束
/* 存在外键的表 删表限制: 1.先删除从表,再删除主表.(不能直接删除主表,主表被从表引用,尽管实际可能还没有记录引用) 建表限制: 1.必须先建主表,再建从表(没有主表,从表无法建立外键关系) ...
- Mysql 表约束 非空、唯一、主键、自增长、默认、外键约束(基础6)
非空(not null).唯一(unique key).主键(primary key).自增长(auto_increment).默认约束(default) 准备基础环境: mysql> crea ...
- mysql的数据类型与表约束
数据类型 (详细数据类型请参考:http://www.runoob.com/mysql/mysql-data-types.html) 数字 整型 tinyint int bigint 小数: flo ...
- mysql数据库表结构与表约束
表结构操作: 添加单列:alter table tb_name add [column] col_name 添加一列: alter table `sudty` add `aaa` int; 添加多列: ...
- mysql的建表约束
主键约束(primary key) 主键约束能够唯一确定一张表中的记录,也就是可以通过某个字段添加约束,就可以是的该字段不重复,且不为空 create table user (id int prima ...
- MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: ALTER TABLE tbl_name ADD [CON ...
随机推荐
- Java.io.tmpdir介绍
System.getproperty(“java.io.tmpdir”)是获取操作系统缓存的临时目录,不同操作系统的缓存临时目录不一样, 在Windows的缓存目录为:C:\Users\登录用户~1\ ...
- 格式化字符串——初级% 和format
print '{a},{b}'.format(a='hello',b='word') st='a %s %s x y z' st1=('b','c') print st%st1 print '%s % ...
- Echo团队Alpha冲刺随笔 - 第八天
项目冲刺情况 进展 程序基本完成,根据实际,添加完善新接口 问题 根据功能对接出现的问题继续进行改进 心得 放假了放松下 今日会议内容 黄少勇 今日进展 测试小程序,添加异常和错误操作的处理 存在问题 ...
- Sql 数据库 用户密码MD5加密
直接给代码先 DECLARE @TAB TABLE( NAEM VARCHAR(50) ) DECLARE @PA VARCHAR(50) DECLARE @A VARCHAR(10) SET @A= ...
- 转载:ubuntu系统启动顺序,常见系统服务说明
Ubuntu运行级别Linux 系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作. 运 ...
- IntelliJ IDEA 2019.2破解
IntelliJ IDEA 2019.2破解 我是参考这个激活的,使用的激活码的方式,需要在百度云盘下载压缩包 https://zhile.io/2018/08/25/jetbrains-licens ...
- 对于模块加载:ES6、CommonJS、AMD、CMD的区别
运行和编译的概念 编译包括编译和链接两步. 编译,把源代码翻译成机器能识别的代码或者某个中间状态的语言. 比如java只有JVM识别的字节码,C#中只有CLR能识别的MSIL.还简单的作一些比如检查有 ...
- junit3和junit4的区别总结
先来看一个例子: 先用junit3来写测试用例,如下: junit3测试结果: 从上面可看出: 1.junit3必须要继承TestCase类 2.每次执行一个测试用例前,junit3执行一遍setup ...
- hibernate的持久化类、主键生成策略
一.hibernate的持久化类 1.什么是持久化类: 持久化:将数据存储到关系型数据库. 持久化类:与数据库中的数据表建立了某种关系的java类.(持久化类=javabean+映射配置文件) 2.持 ...
- 2-STM32+W5500+GPRS(2G)基础篇-(W5500-学习说明)
https://www.cnblogs.com/yangfengwu/p/11220042.html 定版: 这一节先直接说明怎么把官方的源码应用在我做的这块开发板上 https://www.w550 ...