通用写法为:
#通用写法:
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR,
seat INT UNIQUE,
age INT DEFAULT 18,
majorid INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorid) REFERENCES major(id)
#fk代表 FOREIGN key的缩写 +当前表名 +主表名
);
1、常见约束
/*
含义:用于限制表中的数据,为了保证表中数据的准确性
CREATE TABLE 表名{字段名 字段类型 约束}
分类: 六大约束
1、NOT NULL:非空,用于保证字段值不为空;eg:姓名
2、DEFAULT:默认值
3、PRIMARY KEY:主键,是唯一性,并且非空;eg:员工编号
4、UNIQUE:唯一性,但可以为空;eg:座位号
5、FOREIGN KEY:外键。//在从表添加外键约束,用于引用主表中某列的值
约束的添加分类:
列级约束:外键约束没有效果(其他都可以)
表级约束:除了非空和默认都支持
//语法
CREATE TABLE 表名(
字段名 字段类型 列级约束
字段名 字段类型,
表级约束
)
*/
CREATE DATABASE students;
USE students;
CREATE TABLE stuinfo(
id INT PRIMARY KEY,#主键
stuName VARCHAR(20) NOT NULL,#非空
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查
seat INT UNIQUE,#唯一
age INT DEFAULT 18,#默认约束
majorId INT REFERENCES major(id)#外键
);
#外键表
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
DESC stuinfo;
#查看索引值:包括主键、外键、唯一
SHOW INDEX FROM stuinfo;
#2、添加表级约束
/*
语法:
【CONSTRAINT 约束名】 约束类型(字段名)
*/
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,age INT,majorid INT,
CONSTRAINT pk PRIMARY KEY(id),#主键,的名字是固定的
CONSTRAINT uq UNIQUE (seat),#唯一键
CONSTRAINT fk_major FOREIGN KEY (majorid) REFERENCES major(id)
);
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,age INT,majorid INT,
PRIMARY KEY(id),#主键,的名字是固定的
UNIQUE (seat),#唯一键
FOREIGN KEY (majorid) REFERENCES major(id)
);
2、修改表时添加约束
/*
1、非空
添加非空
alter table 表名 modify column 字段名 字段类型 not null;
亦可以直接用 add 字段名 字段类型
删除非空
alter table 表名 modify column 字段名 字段类型 ;
2、默认
添加默认
alter table 表名 modify column 字段名 字段类型 default 值;
删除默认
alter table 表名 modify column 字段名 字段类型 ;
3、主键
添加主键
alter table 表名 add【 constraint 约束名】 primary key(字段名);
删除主键
alter table 表名 drop primary key;
4、唯一
添加唯一
alter table 表名 add【 constraint 约束名】 unique(字段名);
删除唯一
alter table 表名 drop index 索引名;
5、外键
添加外键
alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列);
删除外键
alter table 表名 drop foreign key 约束名;
*/
ALTER TABLE stuinfo DROP PRIMARY KEY;
DESC stuinfo;
ALTER TABLE stuinfo ADD mysis INT DEFAULT 19 NOT NULL;
ALTER TABLE stuinfo DROP mysis;
3、外键的特点
3.1、要求在从表设置外键关系
3.2、从表的外键列的类型和主表的关联列的类型必须一致或兼容
3.3、主表的关联列必须是一个key(即为主键或唯一键)
3.4、插入数据时,先插入主表(引用表),在插入从表
3.5、删除数据,先删除从表在删除 引用表
#列子
#测试列子
#1、向表stuinfo的id列中 添加 PRIMARY KEY 约束(名为 my_id_pk)
ALTER TABLE stuinfo ADD CONSTRAINT my_id_pk PRIMARY KEY(id);
#2、向表stuinfo中majorid 添加 和 major表中id关联的 外键(my_major_infomation)
#删除外键约束
ALTER TABLE stuinfo DROP FOREIGN KEY my_major_infomation;
#删除
ALTER TABLE stuinfo DROP majorid;
#增加
ALTER TABLE stuinfo ADD majorid INT;
DESC stuinfo;
SHOW INDEX FROM stuinfo;
#添加约束条件
ALTER TABLE stuinfo ADD CONSTRAINT my_major_infomation FOREIGN KEY(majorid) REFERENCES major(id);
4、标识列
### 标识列
#一、创建表 设置标识列
/*
2、一个表至多有一个自增长列
3、自增长列只能支持数值型
4、自增长列必须为一个key
二、修改表时设置自增长列
alter table 表 modify column 字段名 字段类型 约束 auto_increment
三、删除自增长列
alter table 表 modify column 字段名 字段类型 约束
*/
CREATE TABLE tab_identity(
id INT PRIMARY KEY auto_increment,
NAME VARCHAR(20)
);
INSERT INTO tab_identity VALUES(NULL,'john');
INSERT INTO tab_identity(NAME) VALUES('john');
SHOW VARIABLES LIKE '%increment';
TRUNCATE TABLE tab_identity;
SELECT *FROM tab_identity;
#设置步长
SET auto_increment_increment=3;
#在插入的时候设置起始值 ,可以先插入一个值为 x;
INSERT INTO tab_identity VALUES(10,'john');#起始值就变成了10