mysql-完整性约束条件
PRIMARY : 主键
AUTO_INCREMENT : 自增长
FOREIGN KEY : 外键
NOT NULL : 非空
UNIQUE KEY : 唯一
DEFAULT : 默认值
主键:
-- 主键:不能重复,不能为空 -- CREATE TABLE user1( -- id INT KEY, 可以省略掉PRIMARY id INT PRIMARY KEY, username VARCHAR(20) ); -- 复合主键或多字段主键 CREATE TABLE user2( id INT, username VARCHAR(20), card CHAR(18), PRIMARY KEY(id,card) );
自增长:
-- 自增长:t一个表中只能有一个自增长字段,而且一定要配合主键使用 -- 自增长字段一定是主键,但主键不一定是自增长的 CREATE TABLE user3( id SMALLINT KEY AUTO_INCREMENT, username VARCHAR(20) -- 最后加上AUTO_INCREMENT=100是指自增长的超始值,如果不加就从1开始 )AUTO_INCREMENT=100; -- 插入数据 INSERT user3 VALUES(1, 'king'); -- 如果不指定id,则在已有的id最大值+1 INSERT user3(username) VALUES('queen'); -- id字段给NULL或DEFAULT, 也是自增长 INSERT user3 VALUES(NULL, 'queen2'); INSERT user3 VALUES(DEFAULT, 'queen2'); -- 如果在定义表的时候没有设置自增长起始值,后来也可以修改; -- 修改之后添加的数据从修改的起始值开始 ALTER TABLE user3 AUTO_INCREMENT =500;
非空:
-- 非空, NULL就是一个空值,如果给一个非空字段一个NULL, 也会报错的 -- 没有标记为非空的字段,默认是可以为空的 CREATE TABLE user4( id INT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, -- 密码字段一般用加密的,返回一个32位长度 password CHAR(32) NOT NULL, -- age 可以为空,当不给值是,默认为NULL age TINYINT UNSIGNED );
默认值:
-- 默认值 DEFAULT CREATE TABLE user5( id INT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, password CHAR(32) NOT NULL, age TINYINT UNSIGNED DEFAULT 18, addr VARCHAR(50) NOT NULL DEFAULT '北京', sex ENUM('男', '女', '保密') NOT NULL DEFAULT '男' ); -- 添加数据, DEFAULT表示使用默认值 INSERT user5(username,password) VALUES('KING', '123'); INSERT user5 VALUES(3,'QUEEM','123',DEFAULT,DEFAULT,'保密');
唯一性:
-- 唯一性约束 -- 一个表中只能有一个主键,但可以有多个唯一 -- 这里要注意,card不是NOT NULL, 可以为空,NULL是不算重复的 CREATE TABLE user6( id TINYINT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL UNIQUE, card CHAR(18) UNIQUE );
完整的创建table:
-- 完整的创建表的方法 CREATE TABLE [IF NOT EXISTS] tb_name( 字段名称 字段类型 [UNSIGNED|ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY | UNIQUE [key]] [AUTO_INCREMENT] )ENGINE=INNODB CHARSET=UTF8 AUTO_INCREMENT=100;