mysql 约束条件 primary key 主键
primary key字段的值不为空且唯一
约束:not null unique
存储引擎:innodb
对于innodb来说,一张表内必须有一个主键
单列做主键
多列做主键(复合主键)
通常都是id字段 设置主键
单列主键
mysql> create table t17(id int primary key,name char(16));
Query OK, 0 rows affected (0.01 sec) mysql> desc t17;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(16) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
验证 重复了
primary 相当于 unique
mysql> insert into t17 values(1,'mike'),(2,'jack');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t17;
+----+------+
| id | name |
+----+------+
| 1 | mike |
| 2 | jack |
+----+------+
2 rows in set (0.00 sec) mysql> insert into t17 values(2,'ben');
ERROR 1062 (23000): Duplicate entry '' for key 'PRIMARY'
只传name字段,没有传id
默认有个 default id 设置0 不为空
mysql> insert into t17(name) values('ben');
Query OK, 1 row affected, 1 warning (0.00 sec) mysql> select * from t17;
+----+------+
| id | name |
+----+------+
| 0 | ben |
| 1 | mike |
| 2 | jack |
+----+------+
3 rows in set (0.00 sec)
再插入一次 id 0 重复了
mysql> insert into t17(name) values('tom');
ERROR 1062 (23000): Duplicate entry '' for key 'PRIMARY
总结:如果不设置主键 ,mysql的存储引擎又是innodb ,mysql会找一个字段设置为主键
会找一个不为空not null 且唯一的字段 unique 设置为主键 primary key,
如果都没有找到,整张表扫描完以后,所有字段都找不到一个符合条件的字段, 会找一个字段 设置一个隐藏的主键
mysql是innodb,建立一张表,应该自己建立一个主键。
创建一张表 id字段 设置not null unique,不设置主键
为主键了id
mysql> create table t18(id int not null unique,name varchar(16));
Query OK, 0 rows affected (0.01 sec) mysql> desc t18;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
在所有字段后单独定义primary key
mysql> create table department3(id int,name varchar(16),primary key(name));
Query OK, 0 rows affected (0.01 sec) mysql> desc department3;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | NO | PRI | | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> create table department4(id int,name varchar(16),constraint primary key(name));
Query OK, 0 rows affected (0.01 sec) mysql> desc department4;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(16) | NO | PRI | | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
==================多列做主键================
复合主键,就是多个字段联合唯一
primary key(ip,port)
mysql> create table t19(ip varchar(16),port char(16),primary key(ip,port));
Query OK, 0 rows affected (0.02 sec) mysql> desc t19;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ip | varchar(16) | NO | PRI | | |
| port | char(16) | NO | PRI | | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
要求ip相同 端口不同
mysql> insert into t19 values('192.168.1.1',80),('192.168.1.1',81);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t19;
+-------------+------+
| ip | port |
+-------------+------+
| 192.168.1.1 | 80 |
| 192.168.1.1 | 81 |
+-------------+------+
2 rows in set (0.00 sec) mysql> insert into t19 values('192.168.1.1',81);
ERROR 1062 (23000): Duplicate entry '192.168.1.1-81' for key 'PRIMARY'
mysql 约束条件 primary key 主键的更多相关文章
- MySql -- primary key主键约束
4.primary key主键约束 在一张表中: 1) 主键约束是 NOT NULL.UNIQUE唯一的记录. 2) 主键约束必须是唯一的值. 3) 主键约束列不能包含 NULL 值. 注意:每个表都 ...
- FOREIGN KEY 外键约束; UNIQUE和PRIMARY KEY 主键约束、CREATE INDEX建立索引的使用
1)foreign key 是个约束,意思是说如果你给A字段设置了外键约束,以后你要往A字段插入数据,这个数据一定是要在foreign key 后面跟的那个字段中存在的值.这个的意义就是约束了数据的完 ...
- 关于数据库主从表、主键PRIMARY KEY 外键约束 FOREIGN KEY 约束----NOT NULL,DEFAULT,CHECK
如果由两个列共同组成主键,而且一个子表将主键作为可为空值的外键来继承,就可能得到错误的数据.可在一个外键列中插入有效的值,但在另一个外键列中插入空值.然后,可添加一个数据表检查约束,在可为空的外键中检 ...
- MySQL为什么需要一个主键
主键 表中每一行都应该有可以唯一标识自己的一列(或一组列). 一个顾客可以使用顾客编号列,而订单可以使用订单ID,雇员可以使用雇员ID 或 雇员社会保险号. 主键(primary key) 一列(或一 ...
- (转)MyBatis+MySQL 返回插入的主键ID
MyBatis+MySQL 返回插入的主键ID 需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如 ...
- mybatis+mysql返回插入的主键,参数只是提供部分参数
mybatis+mysql返回插入的主键,参数只是提供部分参数 <insert id="insertByChannelIdOpenid" useGeneratedKeys=& ...
- JDBC 复习5 mysql 的自增长主键 auto_increment
MySQL 自增长主键 (1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号.编号从1开始,并1为基数递增. (2)把0插入AUTO_INCRE ...
- MYSQL获取自增主键【4种方法】
通常我们在应用中对mysql执行了insert操作后,需要获取插入记录的自增主键.本文将介绍java环境下的4种方法获取insert后的记录主键auto_increment的值: 通过JDBC2.0提 ...
- Mysql对自增主键ID进行重新排序
Mysql数据库表的自增主键ID号经过一段时间的添加与删除之后乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name ...
随机推荐
- Xcode 5.0 编译低版本app
Xcode 5.0 默认的编译环境是iOS7,编译出来的app,安装到iOS7.0版本以上的手机上,会表现出iOS7.0的风格.兼容不太好的应用,布局上可能会因此乱八七糟. 如果还不想让app升级到i ...
- js 使用事件委托
想象一下,如果你有一个无序列表,里面有一堆<li>元素,每一个<li>元素都会在点击的时候触发一个行为.这个时候,你通常会在每一个元素上添加一个事件监听,但是如果当这个元素或者 ...
- Android 下使用 JSON 实现 HTTP 请求
不得不说,JSON 格式的确是非常美妙的,速度快而且简化了很多操作在 Android 下,Android SDK 已经为我们封装好了整个与 JSON 有关的操作,使用非常方便 以下就是一个标准的 JS ...
- css文字超出自动显示省略号
只针对单行文本有效: 01.针对块状元素 ul li{ width: 180px; text-overflow: ellipsis; white-space: nowrap;/*禁止自动换行*/ ov ...
- layui时间,table,大图查看,弹出框,获取音频长度,文件上传
1.引入: <link href="../../Scripts/layui-v2.3.0/css/layui.css" rel="stylesheet" ...
- HQL的执行过程
解释器.编译器.优化器完成HQL查询语句从词法分析.语法分析.编译.优化以及查询计划(Plan)的生成.生成的查询计划存储在HDFS中,并在随后有mapreduce调用执行. 举个例子: 第一步:输入 ...
- 百度地图出现UnsatisfiedLinkError: Native method not found: com.baidu...
这是由于导入os文件方式引起 解决办法有两种: 第一种: 弄一个文件夹so/armeabi,把所有的so全部放进去.结构就是so/armeabi/a.so,b.so,c.so 然后压缩这个文件夹成为s ...
- 说说FATFS文件系统(转)
FATFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块.FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开.因此,它独立(不依赖)于硬件 ...
- PHP实现IP–数字互相转换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- android基础---->Fragment的使用
碎片(Fragment)是一种可以嵌入在活动当中的UI 片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛. Fragment的基础例子