-- 约束
--建表
create table emp
(
empno int(4) auto_increment primary key,
ename varchar(10),
job varchar(20),
mgr int(4),
hiredate date,
sal double(7,2),
comm double(7,2),
deptno int(2),
gender enum('男','女','不明'),
myset set('棒球','羽毛球','冰球','乒乓球','足球','篮球','网球','高尔夫球')
)charset utf8;//创建表的同时指定字符集 字段有set enum 类型
--枚举enum
--插入枚举型数据
insert into emp(gender) vaules('男');
insert into emp(gender)vaules(1);//和上一句是一样的相当于男 枚举实际存储的都是数字 枚举是从1开始的
select gender from emp;//显示是男女不明
select gender+0 from emp;//以数字的形式显示
-- 集合set
--插入集合数据
insert into emp(myset) values('冰球,棒球');
select myset from emp;//结果显示的是棒球冰球 所以是按照建表的顺序
insert into emp(myset) values('羽毛球,冰球');
select myset+0 from emp;//显示的结果是6 集合存储的是二进制 0/1翻转
//相当于把 0 1 1 0 0 0 0 0 给翻转成 0 0 0 0 0 1 1 0 结果为6
insert into emp (myset) values(7);
select myset+0 from emp;
-- '棒球','冰球','羽毛球','乒乓球','足球','篮球','网球','高俅'
-- 1 1 1 0 0 0 0 0
-- 将对应的二进制位进行翻转(反转),得到如下数据:
00000111 4+2+1=7;
--not null
--default
create table dept
(
deptno int(2) not null default 100,
dname varchar(20) not null default '嵌入式',
loc varchar(20)
)charset utf8;//not null 是指数据不能为空 ,default是指定默认值
--primary key 主键
//每张表只能有一个主键,不能为空
-- 创建主键的方式
create table dept
(
deptno int(2),
primary key(deptno),
dname varchar(20),
loc varchar(20)
)charset utf8;
-- 或者
create table dept
(
deptno int(2) primary key,
dname varchar(20),
loc varchar(20)
)charset utf8;
-- 删除主键约束
alter table dept drop primary key//删除dept表中的主键约束
-- 增加主键
alter table dept add primary key(deptno);//增加主键需要指明字段
-- 有一张学生选修课表:一个学生可以选修多个选修课,
-- 一个选修课也可以由多个学生来选:
-- 但是一个学生在一个选修课中只有一个成绩。
-- 复合主键
create table mydb_table(
stuNo int(4),
courseNo int(4),
score int(4),
primary key(stuNo,courseNo)
);
-- 唯一键unique key
--唯一键可以有多个字段,可以为NULL,不为空时不允许重复
--创建唯一键的方式同主键
create table dept
(
deptno int(2),
unique key(deptno),
dname varchar(20),
loc varchar(20)
)charset utf8;
-- 或者
create table dept
(
deptno int(2) unique key,
dname varchar(20),
loc varchar(20)
)charset utf8;
--增加唯一键
alter table dept add unique key (deptno);
-- 删除唯一键 //和删除主键不同 要删除索引
alter table dept drop index deptno;//删除索引名
-- auto_increment 自增长
--创建表
create table dept
(
deptno int(2) auto_increment primary key,
dname varchar(20) ,
loc varchar(30)
)charset utf8;
-- 取消自动增长
alter table dept modify deptno int(2);//就是重新定义该字段类型
-- 查询自动增长的属性
set auto_increment_offset = 1; // 默认自动增长的数据范围 1~65535 从哪开始自增长
set auto_increment_increment = 1; //设置自动增长的步长
show variables like '%auto_increment%';
-- 插入多条数据语法:
insert into 表名 vaules(字段),(字段)...
-- 解决主键冲突
replace into dept vaules(字段);//替换掉原来的数据
insert into 表名 vaules(字段) on duplicate key update 想要修改的字段 = 新的数据;