MySQL数据库字段参数的完整性约束

一.分类 

PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK)    标识该字段为该表的外键
NOT NULL    标识该字段不能为空
UNIQUE KEY (UK)    标识该字段的值是唯一的
AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT    为该字段设置默认值
UNSIGNED 无符号
ZEROFILL 使用0填充

#说明
1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
sex enum(‘male‘,‘female‘) not null default ‘male‘
age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
3. 是否是key
主键 primary key
外键 foreign key
索引 (index,unique...)

二.not null 与default使用

 是否可空,null表示空,非字符串
    not null - 不可空
    null - 可空

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
    create table tb1(
    nid int not null defalut 2,
    num int not null

三.uniqle

 设置唯一约束的两种方法

============设置唯一约束 UNIQUE===============
方法一:
create table department1(
id int,
name varchar(20) unique,
comment varchar(100)
);

方法二:
create table department2(
id int,
name varchar(20),
comment varchar(100),
constraint uk_name unique(name)
);

mysql> insert into department1 values(1,‘IT‘,‘技术‘);
Query OK, 1 row affected (0.00 sec)
mysql> insert into department1 values(1,‘IT‘,‘技术‘);
ERROR 1062 (23000): Duplicate entry ‘IT‘ for key ‘name‘

四.primary key

primary key字段的值不为空且唯一

一个表中可以:

单列做主键
多列做主键(复合主键)

但一个表内只能有一个主键primary key

============单列做主键===============
#方法一:not null+unique
create table department1(
id int not null unique, #主键
name varchar(20) not null unique,
comment varchar(100)
);

mysql> desc department1;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | NO   | PRI | NULL    |       |
| name    | varchar(20)  | NO   | UNI | NULL    |       |
| comment | varchar(100) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
rows in set (0.01 sec)

#方法二:在某一个字段后用primary key
create table department2(
id int primary key, #主键
name varchar(20),
comment varchar(100)
);

mysql> desc department2;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | NO   | PRI | NULL    |       |
| name    | varchar(20)  | YES  |     | NULL    |       |
| comment | varchar(100) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
rows in set (0.00 sec)

#方法三:在所有字段后单独定义primary key
create table department3(
id int,
name varchar(20),
comment varchar(100),
constraint pk_name primary key(id); #创建主键并为其命名pk_name

mysql> desc department3;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | NO   | PRI | NULL    |       |
| name    | varchar(20)  | YES  |     | NULL    |       |
| comment | varchar(100) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
rows in set (0.01 sec)
==================多列做主键================
create table service(
ip varchar(15),
port char(5),
service_name varchar(10) not null,
primary key(ip,port)
);

mysql> desc service;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| ip           | varchar(15) | NO   | PRI | NULL    |       |
| port         | char(5)     | NO   | PRI | NULL    |       |
| service_name | varchar(10) | NO   |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
rows in set (0.00 sec)

mysql> insert into service values
    -> (‘172.16.45.10‘,‘3306‘,‘mysqld‘),
    -> (‘172.16.45.11‘,‘3306‘,‘mariadb‘)
    -> ;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into service values (‘172.16.45.10‘,‘3306‘,‘nginx‘);
ERROR 1062 (23000): Duplicate entry ‘172.16.45.10-3306‘ for key ‘PRIMARY‘
时间: 2024-08-02 02:49:21

MySQL数据库字段参数的完整性约束的相关文章

mysql数据库性能参数配置(转)

max_connections MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,MySql会为每个连接提供连接缓冲区,就会开销越多的内存,连接数太大,服务器消耗的内存越多,以至于影响服务器性能,所以要根据服务器的配置适当调整该值,不能盲目提高设值.可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小. show variables like 'max_connections' 最大连接数

mysql数据库log-slave-updates 参数解释

Mysql数据库log-slave-updates 参数解释 最近学mysql复制时,log-slave-updates参数一直没有搞明白这个参数有什么意义.在上网查了一下,发现网友解释的,我也没有看懂..估计是我这人比较笨的缘故吧...我这人比较笨也比较爱钻牛角.别人可能听老师讲课时,就直接听明白了.当时上课时,我也感觉没有什么问题.但是晚上躺床上回想这些内容的时候,发现还是有疑问..想了好几天才想明白..虽然这参数让我花费了很多时间才想明白,但是心里很高兴.... 如果写的不对,还请大家批评

mysql数据库字段命名与关键字冲突之坑

mysql> SELECT desc,status,play_time,push_type, 'interval' FROM cms_push; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 700 Current database: xxx_cms ERROR 1064 (42000): You have an error in your S

mysql数据库的参数以及性能的调配

 mysql数据库的特性以及参数性能 一:mysql与其他数据库的比较 MySQL是一个关系型数据库管理系统,开发者为瑞典MySQL AB公司,现在已经被Sun公司收购,支持FreeBSD.Linux.MAC.Windows等多种操作系统与其他的大型数据库例如Oracle.DB2.SQL Server等相比功能稍弱一些 1.可以处理拥有上千万条记录的大型数据 2.支持常见的SQL语句规范 3.可移植行高,安装简单小巧 4.良好的运行效率,有丰富信息的网络支持 5.调试.管理,优化简单(相对其他大

MySQL数据库实例参数对比脚本

如何对比两个MySQL实例的参数情况,生产中常会有这样的需求,最近写了个python脚本,可基本实现该需求. 脚本 #!/usr/bin/python import MySQLdb,sys def fetch_variables(ip,user,passwd,port,variable=False): # Open database connection try: db = MySQLdb.connect(host=ip, user=user,passwd=passwd,port=port) e

Mysql 数据库字段加密

1 数据库字段加密: 2 4.20. 数据加密 3 数据库中有很多敏感字段,不允许随意查看,例如开发人员,运维人员,甚至DBA数据库管理员.另外加密主要是防止被黑客脱库(盗走) 4 敏感数据加密有很多办法,可以用数据库内部加密函数,也可以在外部处理后写入数据库.加密算法有很多种,但通常两类比较常用,一种是通过key加密解密,另一种是通过证书加密解密. 5 通常程序员负责写程序,程序交给运维配置,运维将key设置好,运维不能有数据库权限,DBA只能登陆数据库,没有key权限. 6 4.20.1.

MYSQL数据库的参数文件

参数文件:告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型. 参数文件 当MySQL实例启动时,MySQL会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等设置.默认情况下,MySQL实例会按照一定的次序去取,你只需通过命令mysql --help|grep my.cnf来寻找即可. MySQL参数文件的作用和Oracle的参数文件极其类似

MySQL 数据库字段类型使用说明

简介 MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型. 数值类型 下列用于描述的代码字母中: M表示最大的显示尺寸.最大的合法的显示尺寸是 255 .(注意是显示尺寸是存储数字的位数,不是存储空间大小,数值列创建时,MySQL将为存储数据分配合适大小的空间,从1个字节到8个字节不等) D适用于浮点类型并且指出跟随在十进制小数点后的数的位数.最大可能的值是30,但是应该不大于M-2. 方括号(“[”和“]”)指出可选的类型修饰符的部分. 注意,如果你指

Mysql数据库配置参数详解大全

名称 是否需要重启 值 允许值 描述 auto_increment_increment 否 1 1-65,535 auto_increment_increment和auto_increment_offset 用于master-to-master的复制,并可以用来控制AUTO_INCREMENT列的操作. auto_increment_offset 否 1 1-65,535 auto_increment_increment和auto_increment_offse用于master-to-maste