DDL语言(操作表)
进入本机MySQL终端
mysql -h localhost -u root -p
mysql终端清屏
system cls;
暂停服务
net stop <mysql服务名>;
开启服务
net strat <mysql服务名>
建立数据库
create database <数据库名>;
查看所有的数据库
show databases;
查看建库语句
show create database <数据库名>;
修改数据库名
alter database <数据库名> 修改内容;
切换或使用数据库
use <数据库名>;
删除库
drop database <数据库名>
创建表
create table <数据表名>(字段名 数据类型 约束,... constraint s_s foreign key(外键名) references 连接的数据表名(主键名));
查看表结构
desc 数据表名;
查看建表的sql语句
show create table <数据表名>;
查看该库的所有数据表名
show tables;
删除数据表
drop table <表名>;
设置外键
constraint s_s foreign references key(外键名) 连接到数据表名(主键名);
查询表中所有数据
select * from 表名;
查看表中某字段的数据
select 字段1,字段2... from 表名;
向表中添加数据
insert into 表名(字段1,字段2...) values(数据1,数据2...);
0填充
create table a(id int(11) zerofill);
修改表中的字段类型
alter table 数据表名 modify 字段名 数据类型;
修改表名
alter table 旧表名 rename(to) 新表名;
添加字段
向末尾添加字段
alter table 表名 add 字段名 数据类型 约束名;
向第一个位置添加字段
alter table 表名 add 字段名 数据类型 约束名 first;
向指定位置添加字段
alter table 表名 add 字段名 数据类型 约束名 after 字段名;
添加多个字段
alter table 表名 add 字段名1 数据类型1 约束名1,字段名2 数据类型2 约束名2,....
修改字段顺序
将字段移动到指定位置
alter table 表名 modify 字段名 数据类型 after 字段名
将字段移动到首位
alter table 表名 modify 字段名 数据类型 first;
删除字段
alter table 表名 drop 字段名;
修改字段
修改字段类型(未重命名)
alter table 表名 modify 字段名 数据类型;
修改字段名称(可修改数据类型和约束)
alter table 表名 change 旧字段名 新字段名 旧数据类型 旧约束;
alter table 表名 change 旧字段名 新字段名 新数据类型 新约束;
约束
非空约束
alter table 表名 modify 字段名 数据类型 not null;
alter table 表名 modify 字段名 数据类型 null;
添加默认约束
alter table 表名 modify 字段名 数据类型 default 默认值;
删除默认约束
alter table 表名 alter column 字段 drop default;
唯一约束
添加唯一约束
alter table 表名 modify 字段 类型 unique;
删除唯一约束
drop index key name on 表名;
主键约束
添加主键约束
alter table 表名 modify 字段名 字段类型 primary key;
删除主键约束
alter table 表名 drop primary key;
建表时给多个字段设置主键
create table 表名(字段1,类型1,约束1,字段2 类型 约束.... constraint 约束名 primary key(主键1,主键2,....))
自增约束
添加自增约束
alter table 表名 modify 字段 类型 auto_increment
删除自增约束
alter table 表名 modify 字段 类型;
清除数据
清空表后id从1开始,这个明显是用来清除前面数据。当程序员进行开发的时候,有很多的测试数据,当上线运行的时候,程序员都会I删掉。例如 id1000,现在想从001开始。
truncate 表名;
外键约束
增加外键约束
constraint s_s foeign key(外键名) references 连接表名(主键);
删除外键约束
alter table 表名 drop foreign key 外键约束名;
级联操作
delete cascade
alter table 表名 add constraint 外键约束名 foreign key(外键字段) references 父表名(父表字段)on delete cascade;
update cascade
alter table 表名 add constraint 外键约束名 foreign key(外键字段) references 父表名(父表字段)on update cascade;
DML
添加数据
insert into 表名(需要添加的字段) values(需要给的值);
insert into 表名 values(需要给的值);
insert into 表名(需要添加数据的字段) values(,,,,),(),();
删除数据
delete from 表名 where 条件;
更新数据
update 表名 set 字段1=值,....where 条件;
条件语句
> < >= <= =
and(&&) or(||)
between 值1 and 值2
is null not is null
in(值1,值2...)
DQL
查询所有表内数据
select * from 表名;
查询指定字段的数据
select 字段1,字段2 from 表名 where 条件;
查询指定字段的数据并给指定字段起名
select 字段1 as 别名1,.... from 表名 where 条件;
去重查询
select distinct 查询到字段名1,distinct 查询到字段名2... from 表名 where 条件;
查询到数据进行四则运算
select 查询到字段名1进行四则运算,查询到字段名2进行四则运算... from 表名 where 条件;
拼接查询内容
select concat(值1,值2,...) from 表名 where 条件;
查询在两者之间
select 字段.... from 表名 where 字段 between 值 and 值;
查询不在两者之间
select * from 表名 where 字段名 not between 值 and 值
模糊查询
select * from 表名 where 字段名 like '%a%';
分页查询
select * from 表名 limit num1,num2;
排序
select * from 表名 order by 字段名 asc;
select * from 表名 order by 表名 desc;
分组(group by)
select * from 表名 group by 字段名;
聚合函数
(count(字段))
avg(字段)
(max(字段))
(min(字段))
HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
表与表之间的关系
由于咱们再实际开发中,需要使用的数据会很多,也就导致数据对应的字段特别多。如果你把所有的字段全部建立再一张表里面,这样会导致一个数据的冗余度特别大。就需要把这些字段按照功能或者需求来进行分离,也就是咱们需要建立多张表,需要咱们在多张表之间进行操作(查询)。
一对一
一张表里面的一条记录对应另外一张表的一条记录
用户表和用户详细信息表
学生信息和学籍
人的信息表和身份证
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UheocrMc-1634978606736)(C:\Users\Administrator\Desktop\day42\笔记\images\image-20211020091923223.png)]
方案一:
用户登陆表里面有id,把这个id作为主键来设置,用户详情表id也作为主键,然后让用户表中的id和用户详情表的id对应
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOlwVbtW-1634978606739)(C:\Users\Administrator\Desktop\day42\笔记\images\image-20211020092210851.png)]
方案二:唯一外键
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMGzTLpe-1634978606741)(C:\Users\Administrator\Desktop\day42\笔记\images\image-20211020092720595.png)]
一对多
一张表里面的一条记录对应另外一张表的多条记录
多对一
一张表里面的多条记录对应另外一张表的一条记录
学生表和班级表
一个班级对应多个学生,多个学生对应的是一个班级
使用外键来实现表与表之间的关系
多对多
一张表里面的一条记录对应另外一张表的多条记录
另外一张表的一条记录对应一张表的多条记录
多表联查(join)
内连接(inner join)
select * from 表名1 inner join 表名2;
select * from 表名1 inner join 表名2 where 表名1.主键= 表名2.主键;
使用on关键字可以有效降低笛卡儿积带来的内存消耗
select * from 表名1 inner join 表名2 on dept.deptno = emp.deptno;
也可以使用as关键字给表起别名
select e.ename,e.job,d.loc from 表名1 e inner join 表名2 d on e.主键 = d.主键;
左连接(left join)
select * from 表名1 left join dept on 表名2.主键 = dept.主键;
右连接(right join)
select * from 表名1 right join dept on 表名2.主键 = dept.主键;
Union
把具有相同字段数目和字段类型的表合并到一起,去除相同记录。
SELECT name FROM table_name1 UNION SELECT name FROM table_name2 ....;
|