数据库2

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 条件

​ 一.范围运算

  1. 比较运算符:> < >= <= <> !=

  2. between 80 and 100 值在80到100之间

  3. in(80,90,100) 值是80或90或100

    二.模糊查询

  4. like 'e%'
    通配符可以是%或_,
    %表示任意多字符
    _表示一个字符

    三.;逻辑运算

  5. 逻辑运算符:

    在多个条件直接可以使用逻辑运算符 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__';
原文地址:https://www.cnblogs.com/hql1117/p/11278967.html