查看所有数据库
show databases;
创建数据库
create database 库名;
查看数据库创建数据的语句:
show create database 库名;
删除数据库
drop database 库名;
查看所有表
show tables;
创建一张名为student的表 里面包含id,name,age等内容(student(id,name,age))
create table student(
id int,
name varchar(20),
age int
)
1.3 查看表结构:
以 sql 格式返回
show create table 表名;
以表格格式返回
desc 表名;
1.4 删除表
drop table 表名;
1.5 管理数据:数据增删改
插入数据
insert into 表名 (列名) values (值);
修改数据
update 表名 set 列名=值 where 条件
删除数据
1. 删除表中的所有数据
delete from 表名 where 条件
2. 删除所有数据
truncate [table] 表名
1.6 查询数据
查询所有列
select * from 表名
查询时指定别名
as 可以省略
去除重复数据
distinct
1.7 条件查询
1) 显示在某一区间的值:80~100 between 80 and 100
2) 多个条件中符合 1 个值: in
3) 模糊查询:like % 匹配多个字符 _ 匹配 1 个
通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
ASC: 升序,默认值
DESC: 降序
****实现不同数据库之间的表的复制
查询所有数据,使用年龄降序排序
select * from student order by age desc;
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。
组合排序的语法:
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
select * from student order by age desc, math asc;
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
avg(列名) 求这一列的平均值
count(列名) 统计这一列有多少条记录
sum(列名) 对这一列求总和
select count(id) as 总人数 from student;
select count(*) as 总人数 from student;
我们发现对于 NULL 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列,但如果需要把 NULL
也统计进去呢?
IFNULL(列名,默认值) 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。
-- 查询 id 字段,如果为 null,则使用 0 代替
select ifnull(id,0) from student;
我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏
select count(ifnull(id,0)) from student;
分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组
SELECT 字段 1,字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。
分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
-- 按性别进行分组,求男生和女生数学的平均分
select sex, avg(math) from student3 group by sex;
where 子句 1) 对查询结果进行分组前,将不符合 where 条件的先去掉,即在分组之前过滤数据,即先过滤
再分组。
2) where 后面不可以使用聚合函数
having 子句 1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。
2) having 后面可以使用聚合函数
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子
句][LIMIT 子句];
第4节 数据库备份和还原
主键关键字: primary key
1. 在创建表的时候给字段添加主键
字段名 字段类型 PRIMARY KEY
2. 在已有表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
例如在学生表st5中添加主键:
alter table st5 add primary key(id);
删除主键
例如删除st5表中的主键:
alter table st5 drop primary key;
AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
在创建表的时候,指定起始值
CREATE TABLE 表名(
列名 int primary key AUTO_INCREMENT
) AUTO_INCREMENT=起始值;
然后在添加元素是对应的列就填NULL;
DELETE:删除所有的记录之后,自增长没有影响。
继续从上次增长完之后接着增长
TRUNCATE:删除以后,自增长又重新开始。
所有的自增长又从起始值重新增长
唯一约束的基本格式
字段名 字段类型 UNIQUE
表示某一列不能出现重复的值。
非空约束的基本语法格式
字段名 字段类型 NOT NULL
某一列不能出现null
主键和非空唯一约束的区别:
1) 主键数在一个表中,只能有一个。不能出现多个主键。主键可以单列,也可以是多列。
2) 自增长只能用在主键上
5.5.4 创建约束的语法
新建表时增加外键:
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
例如:constraint emp_depid_fk foreign key (dep_id) references department(id)
已有表增加外键:
ALTER TABLE 从表ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
例如 :alter table employee add constraint emp_depid_fk
foreign key (dep_id) references department(id);
CREATE DATABASE lianxi;
CREATE TABLE bumen(#创建一张部门表
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
adress VARCHAR(20)
)AUTO_INCREMENT=1;
SHOW TABLES;
CREATE TABLE yuangong(#创建一张员工表
id INT,
NAME VARCHAR(32),
age INT,
sex VARCHAR(20)
);#给部门表里面添加内容,创建部门
INSERT INTO bumen VALUES(NULL,"销售部","成都");
INSERT INTO bumen VALUES(NULL,"财务部","北京");
INSERT INTO bumen VALUES(NULL,"研发部","上海");
INSERT INTO bumen VALUES(NULL,"售后服务部","西安");
#给员工表里面添加员工
INSERT INTO yuangong VALUES(1,"张三",25,"男");
INSERT INTO yuangong VALUES(2,"李四",25,"女");
INSERT INTO yuangong VALUES(3,"王五",25,"男");
INSERT INTO yuangong VALUES(4,"赵六",25,"女");
INSERT INTO yuangong VALUES(5,"田七",25,"男");
INSERT INTO yuangong VALUES(6,"大王",25,"女");
INSERT INTO yuangong VALUES(7,"小王",25,"男");
SELECT * FROM yuangong;
SELECT * FROM bumen;
#将员工和部门之间建立外键连接
#在员工表中增加一列,用来建立外键连接
ALTER TABLE yuangong ADD yg_bm_id INT;
UPDATE yuangong SET yg_bm_id=1 WHERE id<3;
UPDATE yuangong SET yg_bm_id=2 WHERE id=3;
UPDATE yuangong SET yg_bm_id=3 WHERE id>3&&id<=6;
UPDATE yuangong SET yg_bm_id=4 WHERE id=7;
ALTER TABLE yuangong ADD CONSTRAINT lianjie FOREIGN KEY(yg_bm_id) REFERENCES
bumen(id);
INSERT INTO yuangong VALUES(8,"王炸",55,"女",3);
ALTER TABLE yuangong DROP FOREIGN KEY lianjie;
ALTER TABLE yuangong DROP FOREIGN KEY yg_bm_id;
INSERT INTO yuangong VALUES(9,"王炸",99,"男",9);
UPDATE yuangong SET yg_bm_id=4 WHERE id=9;
ALTER TABLE yuangong ADD CONSTRAINT yg_bm_id FOREIGN KEY(yg_bm_id)
REFERENCES bumen(id);
INSERT INTO yuangong VALUES(10,"da王炸",55,"女",9);
ALTER TABLE yuangong DROP FOREIGN KEY yg_bm_id;
UPDATE yuangong SET yg_bm_id=2 WHERE id=10;
ALTER TABLE yuangong ADD CONSTRAINT yg_bm_id FOREIGN KEY(yg_bm_id)
REFERENCES bumen(id) ON UPDATE CASCADE ON DELETE CASCADE;
UPDATE bumen SET id=10 WHERE id=1;
|
|