MySQL-约束

/*
字段约束:字段的属性,在创建表时给定字段约束。
 字段名、数据类型、长度
 约束的位置:字段名 数据类型 约束1 约束2,
 1.默认:default,在有效字段上设置默认值;
 2.非空:NOT NULL,不允许为空值;
 3.主键:primary key同一张表中主键必须唯一非空。让数据更安全;
*/
#default:字段名称 数据类型 default 默认值
CREATE TABLE student(
  id INT DEFAULT 0
);
SELECT * FROM student;
-- 增加一个字段并设置默认值
ALTER TABLE student ADD class_id INT DEFAULT 2000;
-- 修改字段的默认值:
-- alter table 表名 modify 字段名 数据类型 default 默认值;
ALTER TABLE student MODIFY class_id INT DEFAULT 2000;
#NOT NULL:非空约束,不允许为空,创建表和字段时可以设置非空 
-- 增加一个字段并创建非空约束
ALTER TABLE student ADD username VARCHAR(10) NOT NULL;
DESC student;
INSERT INTO student VALUES (DEFAULT,DEFAULT,'tom');
#primary key;主键,唯一非空。一个表中只允许有一个主键。
-- 逻辑主键:只有一个字段作为主键
-- 复合主键:通过两个字段确定主键 primary key(字段1,字段2)
CREATE TABLE jobs(
  id TINYINT PRIMARY KEY,
  job_name VARCHAR(20) NOT NULL,
  size INT DEFAULT 1

);
DESC jobs;
SELECT * FROM jobs;
#主键字段必须有值且不能重复
#管理主键:删除、增加(原本表中没有主键)、修改(原来表中的主键删除后再修改)
-- 删除主键:alter table 表名 drop primary key;
ALTER TABLE jobs DROP PRIMARY KEY;
SHOW CREATE TABLE jobs;
DESC jobs;
-- 修改主键:modify
ALTER TABLE jobs MODIFY job_num VARCHAR(20) PRIMARY KEY;
-- 增加主键:add
ALTER TABLE jobs ADD PRIMARY KEY(job_num);
ALTER TABLE jobs ADD username VARCHAR(20) PRIMARY KEY;

DROP TABLE student;
CREATE TABLE student(
stuid INT PRIMARY KEY,-- 学号
sutname VARCHAR(10) NOT NULL,
stusex VARCHAR(3) DEFAULT '男'  -- 性别默认是男
);
SHOW CREATE TABLE student;
DESC sudent;
SELECT * FROM student;
INSERT INTO student VALUES (1,'小猪',DEFAULT);
INSERT INTO student VALUES (2,'小麦','女');
INSERT INTO student VALUES (3,'小庄',DEFAULT);
/*
自增:auto increment
整形数据,配合逻辑主键使用,一张表中只能有一个auto_increment.
新增的数据是前一条auto increment数据+1
通过给auto_increment字段的值设置null/default触发自增1的操作
删除主键之前必须先删除auto_increment!

*/
# 设置auto_increment
CREATE TABLE student(
stuid INT PRIMARY AUTO_INCREMENT,
stuname VARCHAR(10) NOT NULL,
stusex VARCHAR(3) DEFAULT '男'
);
DESC student;
INSERT INTO student VALUES (7,"目无表情","男");
SELECT * FROM student;
INSERT INTO student VALUES(NULL,'陈平安')
SHOW CREATE TABLE student;
-- 删除auto_increment属性
ALTER TABLE student MODIFY stuid INT;
ALTER TABLE student MODIFY stuid INT AUTO_INCREMENT;
-- 直接删除stuid字段的主键约束
ALTER TABLE student DROP PRIMARY KEY;

DROP TABLE IF EXISTS two;
CREATE TABLE two(
id INT PRIMARY KEY AUTO_INCREMENT,
t_user VARCHAR(20),
age INT DEFAULT 18,
money INT
);

DROP TABLE student;
DROP TABLE sudent;
CREATE TABLE dh2001(
stuid INT PRIMARY KEY AUTO_INCREMENT,
stuname VARCHAR(10) NOT NULL,
stuage TINYINT UNSIGNED, -- 无符号:不允许为负数
stumoney INT(10) ZEROFILL -- 零填充
);
SHOW CREATE TABLE dh2001;
SELECT * FROM dh2001;
ALTER TABLE dh2001 MODIFY stuage TINYINT;
#更新:on update timestamp(时间戳)
ALTER TABLE dh2001 ADD build TIMESTAMP;
INSERT INTO dh2001 VALUES (NULL,'小明',20,2001,NULL);
UPDATE dh2001 SET stuage=18 WHERE stuid=3;
#注释:comment '注释语句',对字段进行说明
CREATE TABLE teacher(
id INT PRIMARY KEY COMMENT '教师编号',
teaname VARCHAR(20) NOT NULL
);
SHOW CREATE TABLE teacher;
/*
唯一约束:unique 数据不允许重复
1. 创建唯一约束
	方法一:
	create table 表名(
	   字段名 数据类型 unique,
	)
	方法2:
	create table 表名(
	   字段....,
	   unique key 约束名(约束字段1)
	);
	2.修改
	   alter table 表名 modify 字段名 字段数据类型 unique;
	   alter table 表名 add unique key 约束名(约束字段);
	3.删除唯一约束
	   alter table 表名 drop index 约束名;
*/
CREATE TABLE student(
stuid TINYINT PRIMARY KEY, -- 主键
stuname VARCHAR(10) NOT NULL, -- 不为空
stusex VARCHAR(3) DEFAULT '男', -- 默认值
stubirth TIMESTAMP COMMENT ' 创建时间' -- 备注字段
);
DESC student;
#在这张表中性别字段后插入一个字段用来表示学生的学生号stuphone
ALTER TABLE student ADD stuphone INT(11) AFTER stusex;
ALTER TABLE student MODIFY stuphone VARCHAR(11);
SHOW CREATE TABLE student;
SELECT * FROM student;
INSERT INTO student VALUES (1,'陈平安',DETAULT,15285685601,'2000/11/17');
INSERT INTO student VALUES (3,'陈平安',DETAULT,15285685601,'2000/11/17');

#1.创建唯一约束
CREATE TABLE teacher(
teaid TINYINT PRIMARY KEY AUTO INCREMENT,
teaname VARCHAR(10) NOT NULL,
teacardid VARCHAR(18) UNIQUE,
teabuild TIMESTAMP
UNIQUE KEY cardid(teacardid)
);
SELECT * FROM teacher;
INSERT INTO teacher VARUES (NULL,'宁瑶',123456,NULL);
INSERT INTO teacher VARUES (NULL,'林夕',123456,NULL);
SHOW CREATE TABLE teacher;
DROP TABLE teacher;

SHOW CREATE TABLE student;
#给student表名stuphone字段添加唯一约束:
ALTER TABLE student MODIFY stuphone VARCHAR(11) UNIQUE;
#删除唯一约束:alter table 表名 drop index 约束名字
ALTER TABLE student DROP INDEX stuphone;
#ALTER TABLE student ADD UNIQUE KEY 约束名称(约束字段)
ALTER TABLE student ADD UNIQUE KEY phone

DESC student;
#主键:唯一且非空
#唯一:唯一

/*
学生表:
学号、姓名、班级、年龄、性别、电话号码
*/
CREATE TABLE student(
stuid TINYINT PRIMARY KEY AUTO_INCREMENT,
stuname VARCHAR(10) NOT NULL,
stuclass INT NOT NULL,
stuage TINYINT,
stusex VARCHAR(3),
stuphone VARCHAR(11) UNIQUE
);
DESC student;
/*
班级表:
 id、班级名字、教室位置(loction)
*/
CREATE TABLE classroom(
classid INT PRIMARY KEY AUTO_INCREMENT,
classname VARCHAR(20) NOT NULL,
classloction VARCHAR(20) UNIQUE,
classteacher TINYINT
);
SHOW CREATE TABLE classroom;
INSERT INTO classroom VALUES (2001,'大互2001','基地8',1);
INSERT INTO classroom VALUES (NULL,'大互2002','基地7',11);
INSERT INTO classroom VALUES (NULL,'大互2003','基地6',10);
INSERT INTO classroom VALUES (NULL,'大互2004','基地5',10);
SELECT * FROM classroom;
SELECT * FROM student; 
INSERT INTO student VALUES (1,'安云',2001,20,'女',12345);
INSERT INTO student VALUES (NULL,'子殇',2007,28,'女',123456789);

/*
外键约束:指定外部表的主键
班主任表:班主任信息
学生表:学生信息
教室表:统计教室
教室要指定班主任、学生指定教室、班主任
专业课程:....
*/
CREATE TABLE teacher(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(10) NOT NULL,
tsex VARCHAR(3) DEFAULT '男',
tphone VARCHAR(11) UNIQUE
);
SELECT * FROM teacher;
CREATE TABLE classroom(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(15) NOT NULL,
clocation VARCHAR(20) UNIQUE,
cteacher INT,
CONSTRAINT ct FOREIGN KEY (cteacher) REFERENCES teacher(tid)
);
SHOW CREATE TABLE classroom;
/*
1.创建外键约束:
[constraint 约束名] foreign
2.添加外键约束:
3.删除外键约束:
*/
#[constraint 约束名] foreign key 外键字段名 references 外部表(主键);
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
SSEX VARCHAR(3) DEFAULT'男',
sbirth DATE,
sbuild TIMESTAMP,
CONSTRAINT FOREIGN KEY scl(sclass) REFERENCES classroom(cid),
CONSTRAINT FOREIGN KEY 
stecher
);
DESC student;
SHOW CREATE TABLE student;
DROP TABLE studb
INSERT INTO teacher VALUES (101,'小小','女','123456');
INSERT INTO teacher VALUES (NULL,'景轩','男','654321');
INSERT INTO teacher VALUES (NULL,'镜玄','男','132321456')
SELECT * FROM teacher;
DESC classroom;
INSERT INTO classroom VALUES (2001,'大互2001','基地8',101);
INSERT INTO classroom VALUES (2002,'大互2002','基地7',102);
INSERT INTO classroom VALUES (2003,'大小2003','基地9',103);
SELECT * FROM classroom;
INSERT INTO classroom VALUES (2101,'大电2001','基地10',104); -- 外键约束
#学生表插入信息:3个学生
INSERT INTO student VALUES (2013,'苏沫','女',20001117,NULL,2000,012);
INSERT INTO student VALUES (2014,'韩箕','男',20001217,NULL,2030,162);
#删除学生表中教师的外键约束、
#alter table 表名 drop foreign key 外键约束名
ALTER TABLE student DROP FOREIGN KEY ste;
SHOW  CREATE TABLE student;
DESC student;
DESC teacher;
SELECT * FROM student;
SELECT * FROM teacher;
#添加外键约束
ALTER TABLE student ADD CONSTRAINT  st FOREIGN KEY (steacher) REFERENCES teacher(tid);
ALTER TABLE student ADD FOREIGN KEY (sclass) REFERENCES classroom(cid);
SHOW CREATE TABLE classroom;
ALTER TABLE classroom DROP FOREIGN KEY ct;
ALTER TABLE classroom ADD FOREIGN KEY (cteacher) REFERENCES teacher(tid);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值