2、实体完整性约束(约束行数据,记录 )
A: 主键约束 primary key
#第一种
CREATE TABLE student1
(
sid int primary key,
sname VARCHAR(20),
gender char(1), #0 1
age int
);
#第二种
CREATE TABLE student2
(
sid int,
sname VARCHAR(20),
gender char(1), #0 1
age int,
PRIMARY KEY(sid)
);
#第三种
alter table student add CONSTRAINT pk_列名 PRIMARY key (列名);
组合主键(扩展)
alter table student add CONSTRAINT pk_sid PRIMARY key (sid,sname);
B: 唯一约束
#第一种唯一约束
CREATE TABLE student3
(
sid int primary key,
sname VARCHAR(20),
gender char(1), #0 1
age int,
card char(18) unique
);
#第二种唯一约束
CREATE TABLE student3
(
sid int primary key,
sname VARCHAR(20),
gender char(1), #0 1
age int,
card char(18),
UNIQUE (card)
);
#第三种
alter table student3 add CONSTRAINT uq_card UNIQUE (card);
区别:
主键约束:唯一,不允许为null
唯一约束:唯一,允许最多有一个null值
C: 自增长
CREATE TABLE student2
(
sid int primary key auto_increment,
sname VARCHAR(20),
gender char(1), #0 1
age int,
card char(18),
UNIQUE (card)
);
设置自增长前提条件:
1、必须是数值类型
2、该列必须是primary key 主键
自增长特殊情况:
1、清空表 快
Truncate table 表 自增长会重新开始记数(复位)
2、如果增加数据时出现了错误
删去3,重新添加则为4
3、清空表删除表中的所有记录和delete 区别
Delete from 表; //删除表中的所有数据 慢
3、域完整性约束(列)
A: 类型约束
B:非空约束 not null
#第一种
create table tmp
(
id int PRIMARY key auto_increment,name
varchar(20) not null
);
#第二种
alter table tmp CHANGE name name varchar(20) not null; //添加非空约束
C:默认值约束 default
#第一种
create table tmp2
(
id int PRIMARY key auto_increment,name
varchar(20) not null,
gender char(1) default ‘男’
);
#第二种
alter table tmp2 change gender gender char(1) DEFAULT ‘男’;
4、自定义完整性约束(mysql 不支持 )
#自定义完整性约束成绩0~100
alter table tmp add CONSTRAINT ck_score CHECK(score >=0 and score <=100)
alter table tmp add CONSTRAINT ck_score CHECK(score between 0 and 100)
5、引用完整性约束
#外键表
create table stu
(
sid int PRIMARY key,
sname varchar(40),
cid INT
);
#主键表(主键,约束其它表)
create table classrom
(
cid int PRIMARY key auto_increment,
cname varchar(100)
);
#添加引用完整性约束 (外键表添加)
ALTER table stu add CONSTRAINT fk_cid FOREIGN KEY(cid) references classrom(cid);
Alter table 外键表 add constraint fk_主键 foreign key(外键) references 主表名(主键);
#在实际工作中很少建立主外键关系,主外键关系的约束会影响到执行性能,并且级联删除可能会造成大量数据的误删。
删除约束,添加自增,删除自增长
alter table tmp CHANGE id id int auto_increment; //添加自增长(必须是主键)
alter table tmp CHANGE id id int; 删除自增长
alter table tmp drop primary key; 删除主键约束
alter table tmp drop foreign key fk_cid; 删除外键约束
drop index fk_cid on stu; 删除索引
二、运算符
1、算术运算 +,-,*,/,div,%,mod
Select 1+2
Select 5/2; /2.5/
Select 5 div 2; /2/
2、比较运算符 >,<,>=,<=,!=,<>,=,is null,is not null,in,not in,like,not like,between… and.
Select 1=1; /1/
Select 1>2; /0/
Select * from stu where sname is null; // null
Select * from stu where sname =’’; // 空字符
3、逻辑运算符 and , or ,!
Select 1=1 and 2=3; /0/
Select * from stu where sname is null or sname=’’;
4、位运符 |,^,&
Select 2|3; /3/ 有1则1
Select 2^3; /1/ 不同为1,相同为0
Select 2&3; /2/ 有0则0
三、DML 操作
1、增加数据
A: 按列名增加数据
#按列增加数据
INSERT INTO student (sid,sname,gender) VALUES (2,‘zs’,‘男’);
B:省略列名增加数据
#不写列名增加数据
INSERT into student VALUES(3,‘aaaa’,‘女’,22);
C:批量增加
批量增加
INSERT INTO student (sid,sname,gender) values (8,‘cdd’,‘男’),(9,‘cccc’,‘男’);
D:复制表中的数据
#表复制
insert into student1 select * from student;
E:创建表的时候表复制
create table stutmp select * from student;
2、更新数据
#修改学生编号为1000的性别=“女”
update student set gender =‘女’ where sid=1000 ;
3、删除数据
#删除所有数据
DELETE from stutmp ; #删除所有的数据 不会复位 慢
#删除年龄为null的信息
DELETE FROM stutmp where age is null or age=’’;
4、DQL查询数据
语法:
select 列名|表达式
from 表名|结果集
[where 条件]
[group by 分组字段]
[having 分组筛选的条件]
[order by 排序字段 (asc|desc) 默认asc升序]
[limit 索引, 条数]