1.约束的补充
show databases; 查看库的数量
select database() 查看当前当前所在库
对于mysql来说,数据与数据之间相等就是重复.但是在使用unique后,我们可以重复插入null(空),因为null不能使用'='判断.
1.联合唯一 unique(列名,列名)
联合唯一,即只有两个或者多个插入的值完全一样才会报错不能插入,类似于and的效果.
create table t2(
id int primary key,
servername char(12) not null,
ip char(15),
port int,
unique(ip,port)
);
insert into t2 values(1,'输入法皮肤','10.10.3.1',8800);
insert into t2 values(2,'mysql','10.10.2.4',3306);
insert into t2 values(3,'mysql','10.10.2.5',3306);
insert into t2 values(4,'输入法推荐','10.10.3.1',8802);
2.自增的 auto_increment
第一 只能操作数字
第二 自带非空属性
第三 只能对unique字段进行设置
第四 不受删除影响的
添加auto_increment后,表就有了记忆功能,添加数据时,会按照顺序自动曾加序号,如1234.如果删除了一行甚至多行,继续添加数据,序号不会填补,而是从原来的位置继续增加.相当于记忆功能.
create table t3(
id int unique auto_increment,
name char(12) not null
);
insert into t3(name) values('alex'),('hahah'),('tiabai');
3.联合主键 primary key(列名,列名)
联合主键可以理解为联合 非空唯一,即只有两个或者多个插入的值完全一样才会报错不能插入,类似于and的效果,它只多了一个非空.
create table t5(
family_name char(4) not null,
name char(12) not null,
primary key(family_name,name)
);
4.外键约束 foreign key 对应外表中的字段至少是unique的,推荐使用主键作为关联字段.
create table class3(
id int primary ,
cname char(12) not null unique,
start_date date,
period char(12),
course char(12),
teacher char(12)
);
create table student3(
id int primary key auto_increment,
name char(12) not null,
gender enum('male','female'),
cid int,
foreign key(cid) references class3(id) on delete cascade on update cascade
);
2.单表查询---select
select 筛选列
select user();
select database();
select now();
select * from 表名;
select 字段名 from 表名;
select 字段名,字段名,字段名 from 表名;
select distinct 字段 from 表; (对查出来的字段进行去重)
select emp_name,salary*12 from 表; (字段salary参与了四则运算)
select concat(字段,'字符串2',字段) from 表 (拼接)
select concat(emp_name,' : ',salary) as info from employee;
select concat(emp_name,' : ',salary) info from employee;
select concat_ws('分隔符',字符串,字段1,字段2) info from employee;
select concat_ws('|','信息',emp_name,salary) info from employee; (信息 |emp_name|salary)
select(
case
when emp_name = 'alex' then
concat(emp_name,'BIGSB')
when emp_name = 'jingliyang' then
emp_name
else
concat(emp_name,'sb')
end
) as new_name
from employee;
3.单表查询---where
where 筛选行
select * from 表 where 条件
一.范围运算
-
比较运算符:> < >= <= <> !=
-
between 80 and 100 值在80到100之间
-
in(80,90,100) 值是80或90或100
二.模糊查询
-
like 'e%'
通配符可以是%或_,
%表示任意多字符
_表示一个字符三.;逻辑运算
-
逻辑运算符:
在多个条件直接可以使用逻辑运算符 and or not
#1:单条件查询
SELECT emp_name FROM employee
WHERE post='sale';
#2:多条件查询
SELECT emp_name,salary FROM employee
WHERE post='teacher' AND salary>10000;
#3:关键字BETWEEN AND
SELECT emp_name,salary FROM employee
WHERE salary BETWEEN 10000 AND 20000;
SELECT emp_name,salary FROM employee
WHERE salary NOT BETWEEN 10000 AND 20000;
#4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS)
SELECT emp_name,post_comment FROM employee
WHERE post_comment IS NULL;
SELECT emp_name,post_comment FROM employee
WHERE post_comment IS NOT NULL;
SELECT emp_name,post_comment FROM employee
WHERE post_comment=''; 注意''是空字符串,不是null
ps:
执行
update employee set post_comment='' where id=2;
再用上条查看,就会有结果了
#5:关键字IN集合查询
SELECT emp_name,salary FROM employee
WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ;
SELECT emp_name,salary FROM employee
WHERE salary IN (3000,3500,4000,9000) ;
SELECT emp_name,salary FROM employee
WHERE salary NOT IN (3000,3500,4000,9000) ;
#6:关键字LIKE模糊查询
通配符’%’
SELECT * FROM employee
WHERE emp_name LIKE 'eg%';
通配符’_’
SELECT * FROM employee
WHERE emp_name LIKE 'al__';