MySQL表约束

约束是一种限制,它通过对表的行或者列的数据做出限制,来确保表数据的完整性和唯一性. 在mysql当中一般有一下这几种约束:

  1. 非空约束。
  2. 唯一约束。
  3. 主键约束。
  4. 自增长。
  5. 默认约束。
  6. 外键约束。

表结构操作:

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数据列明确指定了一个数值,则会出现两种情况:

  1. 如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
  2. 如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。

添加自增长

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之表约束的更多相关文章

  1. mysql建表约束

    --mysql建表约束--主键约束它能够唯一确定一张表中的内容,也就是我们通过某个字段添加约束,就可以是的该字段唯一(不重复)且不为空.create table  user(    id int pr ...

  2. access和MySQL mssql

    Access.MSSQL.MYSQL数据库之间有什么区别?     Access数据库.MSSQL数据库.MYSQL数据库之间有什么区别?        不少企业和个人站长在网站制作时,会对数据库的概 ...

  3. 2、MYSQL 基本数据库命令及约束

    [注]sql语句注意不要忘了后面的   “  : ”,表示结束符 1.如何登陆数据库服务器 C:\Users\zhg>mysql -uroot -p Enter password: ****** ...

  4. 黑马MySQL数据库学习day03 级联 多表查询 连接和子查询 表约束

    /* 存在外键的表 删表限制: 1.先删除从表,再删除主表.(不能直接删除主表,主表被从表引用,尽管实际可能还没有记录引用) 建表限制: 1.必须先建主表,再建从表(没有主表,从表无法建立外键关系) ...

  5. Mysql 表约束 非空、唯一、主键、自增长、默认、外键约束(基础6)

    非空(not null).唯一(unique key).主键(primary key).自增长(auto_increment).默认约束(default) 准备基础环境: mysql> crea ...

  6. mysql的数据类型与表约束

    数据类型 (详细数据类型请参考:http://www.runoob.com/mysql/mysql-data-types.html) 数字 整型  tinyint int bigint 小数: flo ...

  7. mysql数据库表结构与表约束

    表结构操作: 添加单列:alter table tb_name add [column] col_name 添加一列: alter table `sudty` add `aaa` int; 添加多列: ...

  8. mysql的建表约束

    主键约束(primary key) 主键约束能够唯一确定一张表中的记录,也就是可以通过某个字段添加约束,就可以是的该字段不重复,且不为空 create table user (id int prima ...

  9. MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用

    MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: ALTER TABLE tbl_name ADD [CON ...

随机推荐

  1. Jenkins持续集成邮件发送

    jenkins下载:https://jenkins.io/downloadgeneric java package(war) 1.tomcat部署: 0.jdk环境 1.修改conf目录下的serve ...

  2. pandas 6 时间

    类 备注 创建方法 Timestamp 时刻数据 to_datetime,Timestamp DatetimeIndex Timestamp的索引 to_datetime,date_range,Dat ...

  3. SQL SERVER错误:已超过了锁请求超时时段。

    问题:远程连接数据库,无法打开视图,报错:SQL SERVER错误:已超过了锁请求超时时段. (Microsoft SQL Server,错误: 1222) 执行语句获取进程id select * f ...

  4. siameseNet网络以及信号分类识别应用

    初学siameseNet网络,希望可以用于信号的识别分类应用.此文为不间断更新的笔记. siameseNet简介 全连接孪生网络(siamese network)是一种相似性度量方法,适用于类别数目多 ...

  5. LOJ P10013 曲线 题解

    每日一题 day38 打卡 Analysis 这道题运用的是三分,就是说具有一定的单调性,找最大最小值,然后和二分基本类似,就是说特性就是说当前两个点比较,较优的点和最优点在相对了较差点的同侧,就是说 ...

  6. learning java transient 自定义序例化

    public class Person implements java.io.Serializable { private String name; private transient int age ...

  7. Windbg命令的语法规则系列(二)

    二.字符串通配符语法 一些调试器命令具有接受各种通配符的字符串参数.这些类型的参数支持以下语法功能: 星号(*)表示零个或多个字符. 问号(?)表示任何单个字符. 包含字符列表的括号([])表示列表中 ...

  8. lettcode 上的几道哈希表与链表组合的数据结构题

    目录 LRU缓存 LFU缓存 全O(1)的数据结构 lettcode 上的几道哈希表与链表组合的数据结构题 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recen ...

  9. 干货 | column generation求解VRPTW问题 java代码分享

    00 前言 经过小编不断的努力,关于column generation求解VRPTW的代码终于新鲜出炉啦. 01 运行说明 关于这部分的代码,这里提供两个版本. 第一个版本GitHub一个叫Semin ...

  10. SQL基础-操纵表及插入、查询

    一.操纵表 1.表的关键信息 2.更新表名 更新表名:使用RENAME TABLE关键字.语法如下: RENAME TABLE 旧表名 TO 新表名; 比如,生产环境投产前备份teacher表,使用如 ...