库 表 表内容 增删改查

操作文件夹(库)***

增删改查

增
create database 文件夹名;
实列
create database db1;   
删除
drop database 库名;
实列
drop database db1; 

改
#官方没有直接修改数据库名称的命令

查
use 库名
show databases;  #查看所有文件夹名
select user();  #查看当前用户名
select database() 查看当前库
show tables; #查看当前库中有多少张表 先切换

创建表 更改表字段

在学习表的创建时 必须先学习 表类型 表约束

创建表

#先创建一个库
create database day01;
# 先切换到文件夹下:use day01;
show tables; #查看当前库中有多少张表 先切换
# 创建表 要先切到库
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
实列
create table staff_info (
id int,name varchar(50),
age int(3),
sex enum('male','female'),
phone bigint(11),
job char(5)
);

查询表结构 修改表名

改表名
alter table 旧表名 rename 新名字;
实列
alter table jbiao rename xbiao;


查
show tables;#查看当前库中有多少张表
desc 表名;#查看表的结构,
show create table 表名;#查看表结构 另一种形式

新增字段

已经键表在添加新字段 默认最后
	alter table 表名 add (字段名称) (数据类型) (约束条件);
实例
	alter table day01 add id int primary key auto_increment;
添加name字段之后
	alter table 表名 add 要添加的字段名 数据类型 约束 after 某字段后面;
实列
	alter table student10 add stu_num varchar(10) not null after name;     
添加到最前面
	alter table 表名 add 要添加的字段名 数据类型 约束 first; 
实列
	alter table student10 add sex enum('male','female') default 'male' first; 

删除表 或表某字段

删
drop table 表名;
实列
drop table userinfo;
删除字段
	alter table 表名 drop 字段名称;
实列
	alter table day01 drop id;

添加 与删除外键关系

创建表完成之后,后添加外键关系
	alter table 表名 add foreign key(字段) references 另一个表名(字段);
实列
	alter table book add foreign key(pid) references publish(id);
	
删除外键关系
	alter table 表名 drop foreign key (外键名称);
实列 外键名称 用show create table 表名; 查看
	alter table book drop foreign key book_ibfk_1;

删除或修改被关联字段

第一种情况表已经键好了

我们必须先吧表关系解除
场景:book表和publish表为多对一关系,book表的pid字段外键关联到了publish表的id字段
1 查看外键关系名称: 就是book_ibfk_1
	show create table book;	
        | book  | CREATE TABLE `book` (
          `id` int(11) NOT NULL AUTO_INCREMENT,
          `name` char(10) DEFAULT NULL,
          `pid` int(11) DEFAULT NULL,
          PRIMARY KEY (`id`),
          KEY `pid` (`pid`),
          CONSTRAINT `book_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `publish` (`id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 |


2 删除外键关系
	alter table book drop foreign key book_ibfk_1(外键名称);
3 删除字段
	alter table publish drop id(字段名称);
4 添加字段
	alter table publish add id(字段名称) int(数据类型) primary key auto_increment(约束条件);

5 创建表完成之后,后添加外键关系
	alter table book add foreign key(pid) references publish(id);

外键名称

指定的外键名称  可以随意更改  fk_t1_publish
创建表时:
create table t1(
	id int,
	pid int,
	constraint fk_t1_publish foreign key(pid) references publish(id);
)
创建表完成之后,后添加外键关系
	alter table book add constraint fk_t1_publish foreign key(pid) references publish(id);

级联的几个模式

严格模式(默认的)

删除:从表记录不存在时,主表才可以删除。删除从表,主表不变
更新:从表记录不存在时,主表才可以更新。更新从表,主表不变
严格模式(默认的),外键有强制约束效果,被关联字段不能随意删除和修改

cascade模式:

删除:删除主表时自动删除从表。删除从表,主表不变
更新:更新主表时自动更新从表。更新从表,主表不变
外键有强制约束效果,**被关联字段删除或者修改,关联他的那么字段数据会随之删除或者修改

实例

foreign key(pid) references publish(id) on delete cascade on update cascade;

set null模式:

删除:删除主表时自动更新从表值为NULL。删除从表,主表不变
更新:更新主表时自动更新从表值为NULL。更新从表,主表不变
被关联字段删除时,关联他的字段数据会置成null

实例

foreign key(pid) references tt2(id) on delete set null
补充:级联set null的用法和示例
mysql> create table tt2(id int primary key auto_increment,name char(10));

mysql> create table tt3(id int,pid int,foreign key(pid) references tt2(id) on delete set null);

操作表内容***

注册一个表

create table d1(id int ,name varchar(12));
insert into d1(id,name) values
(1,'小珊珊'),
(2,'小白白'),
(3,'小嘿嘿');

增删改

增加
普通版    
insert into 表名 values (内容1,内容2),(内容1,内容2);
实列
insert into user values(2,'wusir'),(3,'太亮');
推荐版
insert into 表名 (字段1,字段2) values 
(内容1,内容2);
实列
insert into staff_info (id,name,age,sex,phone,job) values (1,'Alex',83,'female',13651054608,'IT');

删除
delete from d1;  # 清空表 不用  删除所有的数据,但是不会重置自增字段的数据号
delete from 表名 where 条件;
truncate 表名;  自增字段会重置
举例
delete from d1 where id = 3;

修改 #注意语法,可以同时来修改多个值,用逗号分隔
update 表名 set 修改内容;  # 不用 修改所有
update 表名 set 修改内容 where 查找条件;
举例
update d1 set name = 'alex',id = 2 where id = 1;


自定义显示格式 concat用法
相当拼接
select concat('姓名: ',name,'  年薪: ', salary*12)  AS Annual_salary from employee;

查看表中内容

显示模式

四则运算:
	SELECT salary*12 FROM employee;

自定义显示格式 concat用法
	SELECT CONCAT('姓名: ',name,'  年薪: ', salary*12)  AS Annual_salary FROM employee;

查表顺序

查看
select * from 表名; 
举例
select * from d1;
# 查询全部表内容
# select * from d1;
# 进阶版查询
# 1.找到表:
# 实列
#select * from d1;
# 2.拿着 where 指定的约束条件,去文件/表中取出一条条记录
# 实列
#     select * from d1 where hoppy='玩';
# 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
# # 实列 找到爱好是玩的 将年龄分组
#     select * from d1 where hoppy='玩' group by age ;
# 5.将分组的结果进行having过滤
# 实列 找到爱好是玩的 将年龄分组 且id>3
#     select * from d1 where hoppy='玩' group by age having count(id)>3;
# 6将结果排序asc(升序从小到大)desc(降序 从大到小)
# 实列
#     select * from d1 where hoppy='玩' group by age having count(id)>3 order by price;
# 7限制结果的显示条数
# 实列 去前6个
#     select * from d1 where hoppy='玩' group by age having count(id)>3 order by price limit 6;





# having 对组过滤 必须先分组 在组的后面
# 就是一个对组进行筛选的条件
# 要部门人数大于3个人的部门 count(id)>3
# select post from employee group by post having count(id)>3;
#
# order by 排序
#     order by 字段 (默认升序)
#     order by 字段 asc(升序从小到大)
#     order by 字段 desc(降序  从大到小)
#
#     order by 字段1,字段2
#     order by 字段 asc,字段2 desc
#     order by 字段 desc,字段2 asc
#     order by 字段 desc,字段2 desc

# limit 取一个区间
# 1.显示分页
# limit m,n(耗内存)
#       表示从m+1开始,取n条
#       limit 0,6 表示从1开始取6条
#       limit 6,6 表示从7开始取6条
#       limit 12,6 表示从13开始取6条
#       limit 18,6 表示从19开始取6条
# 2.取前n名
#     limit n   m默认为0
#     跟order by一起用
# limit n offset m :从m+1开始,取n条


where 初级筛选

# where:
        # 范围
            # > < = <= >= !=/<>
            # between and
            # in (a,b,c) not in
        # 模糊查询
                    # like
                        # %任意长度任意内容   _一个长度任意内容
                    # regexp  正则
                        # 放正则
                # 身份运算符 -->null
                    # is , is not
                # 逻辑运算符
                    # and or not

分组 与聚合

# 分组 group by 与聚合函数
# select * from 表 group by 字段名
#     分组 group by(生成一个新表)
#     根据某个重复率比较高的字段进行的
#     这个字段有多少种可能就分成多少个组
#         根据性别分组 : 男的一组 女的一组
#         根据部门分组 : 销售一组 教学一组 ...
#     去重
#     一旦分组了就不能对具体某一条数据进行操作了
#         永远都是考虑 这组 xxx
#     group_concat : 只用来做最终的显示,不能结果操作其他数据(属于这个组的所有人)
# 与聚合 联系 聚合函数
#     99.99%的情况都是和分组一起用的
#     如果没有和分组一起用,默认一整张表是一组
#     count(id)  / count(*) 计数 :每个组对应几条数据
#     max 求最大值: 这个组中某字段的最大值
#     min 求最大值: 这个组中某字段的最小值
#     avg 求平均值
#     sum 求和值

having对组过滤

# having 对组过滤 必须先分组 在组的后面
# 就是一个对组进行筛选的条件
# 要部门人数大于3个人的部门 count(id)>3
# select post from employee group by post having count(id)>3;
#
# order by 排序
#     order by 字段 (默认升序)
#     order by 字段 asc(升序从小到大)
#     order by 字段 desc(降序  从大到小)
#
#     order by 字段1,字段2
#     order by 字段 asc,字段2 desc
#     order by 字段 desc,字段2 asc
#     order by 字段 desc,字段2 desc


limit 取一个区间

# limit 取一个区间
# 1.显示分页
# limit m,n(耗内存)
#       表示从m+1开始,取n条
#       limit 0,6 表示从1开始取6条
#       limit 6,6 表示从7开始取6条
#       limit 12,6 表示从13开始取6条
#       limit 18,6 表示从19开始取6条
# 2.取前n名
#     limit n   m默认为0
#     跟order by一起用
# limit n offset m :从m+1开始,取n条

原文地址:https://www.cnblogs.com/saoqiang/p/11448560.html