创建库

create database s19 character set utf8(创建数据库时指定字符编码否则中文会乱码);
create database 数据库名

创建表
create table 表名(
id int primary key auto_increment,
name varchar(20),

=======================================================================================================================================
表结构操作

增加:alter table 表名 add 字段名 字段类型 NOT NULL/first/(after列名);
删:drop table 表名 
改:alter table 表名 modify 列名 字段类型 /first/(after列名);
查:
查看表结构:desc 表名
查看当前数据库下有哪些表show tables
-----------------------------------------------------------------------------------------------------------------------------------------------------------------

完整性约束:
primary key(非空且唯一 ):哪个字段设置为auto_increment 那么该键就必须设置为primary key(主键)

-- 方式1

CREATE TABLE t1(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);

-- 方式2

CREATE TABLE t2(
id INT NOT NULL,
name VARCHAR(20)
);

 

注意:

1、一张表中最多只能有一个主键

2、表中如果没有设置主键,默认设置NOT NULL的字段为主键;此外,表中如果有多个NOT NULL的字段,则按顺序将第一个设置NOT NULL的字段设为主键。

结论:主键一定是非空且唯一,但非空且唯一的字段不一定是主键。

3、主键类型不一定必须是整型

-------------------------------------------------------------------------------------------------------------------------------
复合主键
所谓的复合主键 就是指你表的主键含有一个以上的字段。

如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一性,形式

①创建时:
create table sc (
studentid int,
courseid int,
score int,
primary key (studentno,courseid)
); 
②修改时:
alter table tb_name add primary key (字段1,字段2,字段3);

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
unique(唯一):create table t1 (name varchar(20) unique);
实例:CREATE TABLE t5(
id INT AUTO_INCREMENT,
name VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY UK_t5_name (name)
);
建表之后添加unique(唯一性约束)
alter table t5 add constraint UK_t5_name unique (name);
删除
ALTER TABLE t5 DROP INDEX UK_t5_name;




表与表之间的关系:
一对多
将关联字段设置在多的那张表中
1、书表 2、出版社表 一个出版社可以出版多本书,根据一对多外键设置在多的那张表里 即书表里有个出版社ID字段。
多对多
创建第三张关系表:例如 1学生表、2老师表 老师有多个学生,一个学生有多个老师
1、创建学生表
2、创建老师表
3、创建两者之间的关联关系的表。
一对一

==================================================================================================================================================================

表记录操作

增insert insert 表名 (字段名) values(值);
删delete delete from 表 where name='字段名';(删大数据用truncate+表名) 
改update update 表名 set salary =300 where name='whq';

查select(重点) 
语法顺序(不可跌倒):select 列名 form 表名 + where字句 + group by + having + order by + limit

执行顺序:from---> where----> select ---> group by -----> having --->order by
命令行:
单表: select 列名 form 表名 
where 条件+
1、where +关系运算符
2、where +逻辑运算符
3、where +子关键字
3.1、where+ between ...and...(范围) 
3.2、where + is null
3.3、where + in
3.4、where +not in:select name from emp where name like 'zhang%';
3.5、where +like + %/_ :
3.5.1、where +like + %
3.5.2、where +like + %%
3.5.3、where +like + _
3.5.4、where +like + and 
3.5.5、where +like + or 
3.5.6、where +like + not %/_


group by列名(出现:"每一个XX的统计"字样) select +count/max/min/avg(所要统计的字段名) +from 表名 group by +所要分组的条件字段

分析:每一个部门的薪水平均值
1.1、出现'每一个' 的字样说明用分组
1.2、'薪水'说明是分组的列字段(selec后)
1.3、说明用的是哪个聚合函数(count/max/min/avg)
1.4、每个部门的平均薪水,查询三个东西:1、每个部门 2、平均、3、薪水
1.5、如果想用第四个及以上的东西就要用having
实例1:select * from emp group by dep(部门)
实例2:select avg(salary) from emp group by dep ;统计每个部门的平均薪水

2、group by作为输入:查询结果作为后一个查询语句的条件:
2.1、查询每个部门最大年龄员工的姓名
select max(age) from emp group by dep查询的结果给select name from emp where age in 
实例1:select name from emp where age in ( select max(age) from emp group by dep);

3、group by 与group_concat连用查询分组后 组内的的信息
3.1、查询每个组的员工姓名:(查询每个组的哪些年龄、姓名等:定义是:分组显示每个组内的信息)
实例1:select dep,group_concat(name) from emp group by dep;

having 筛选
分组之后进行过滤

Oder by 列名 +DESC/ASC
1、DESC:该列名从大往小降序
2、ASC:默认 从小往大的升序

LIMIT 限制条数
1、select * from emp limit 3 :取三条从第一条开始取
2、select * from emp limit 2,5:从第2条开始取,取5条

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

命令行:
多表查询:(暂略

posted on 2019-05-13 11:15  斜阳红红  阅读(113)  评论(0编辑  收藏  举报