MySQL-Day02回顾
1、where子句
配合 删、改、查使用
2、update
update 表名 set 字段名=值,字段名=值 where 条件;
3、delete
delete from 表名 where 条件;
4、运算符操作
1、数值比较 = != > >= < <=
2、字符比较 = !=
3、逻辑比较 and or
4、范围内比较 between 值1 and 值2 in not in
5、匹配空、非空
is null
is not null
空字符串"" 和 空值null 不同
count()
**** "" 会被统计
null 不会被统计
6、模糊比较 like
_ : 匹配1个字符
% : 匹配0到多个字符
5、SQL高级操作
1、order by
ASC(默认) : 升序
DESC : 降序
2、limit
limit m --> 显示前m条记录
limit m,n --> 显示从 m+1 条记录开始的n条记录
3、聚合函数
max(字段名) sum(字段名) max(字段名) min(字段名)
count(字段名)
4、group by
select之后的字段名如果不在group by之后,那么必须要对这个字段进行 聚合处理
5、distinct
select distinct 字段名,字段名 from 表名;
6、在查询表记录时做数学运算
+ - * / %
6、约束
1、默认约束(default)
1、创建表
字段名 数据类型 default 值
2、已有表
alter table 表名 modify 字段名 数据类型 default 值;
2、非空约束(not null)
同 默认约束
3、主键约束(primary key)
1、规则
** 一个表中只能有一个主键
** 字段值不允许重复,且不能为null
** KEY标志 PRI
2、创建
1、创建表
字段名 数据类型 primary key
primary key(字段名)
2、已有表
alter table 表名 add primary key(字段名);
3、删除
alter table 表名 drop primary key;
注意:
如果主键有自增长属性,必须先删除自增长属性,然后才能删除主键
4、自增长属性 auto_increment
1、创建
1、创建表
字段名 数据类型 primary key auto_increment
2、已有表
** alter table 表名 change
字段名 字段名 auto_increment;
2、删除
alter table 表名 modify 字段名 数据类型;
4、唯一约束
1、规则
** 字段值不可以重复,但可以为空
** 一个表中可以有多个unique字段
** KEY标志 UNI
2、创建
1、创建表
1、
unique(字段名),
unique(字段名)
2、
字段名 数据类型 unique
2、已有表
alter table 表名 add unique(字段名);
3、删除
** alter table 表名 drop index 字段名;
MySQL-Day03笔记
1、外键约束
1、定义
让当前表字段的值在另一个表的范围内选择
2、语法
foreign key(参考字段名)
references 被参考表名(被参考字段名)
on delete 级联动作(cascade)
on update 级联动作(cascade)
3、使用规则
1、两张表被参考字段和参考字段数据类型要一直
2、被参考字段必须是key的一种,通常primary key
示例
表1:缴费信息表(财务)
学号 姓名 班级 缴费金额
1 唐伯虎 AID1711 28000
2 秋香 AID1711 20000
表2:学生信息表(班主任)
学号 姓名 缴费金额
1 唐伯虎 28000
2 秋香
1、创建表
1、缴费信息表(主表)
create table jftab(
id int primary key,
name char(20),
class varchar(25),
money int
)default charset=utf8;
insert into jftab values
(1,"唐伯虎","AID1711",20000),
(2,"秋香","AID1711",28000),
(3,"祝枝山","AID1711",25000);
2、创建学生信息表(从表)
create table bjtab(
stu_id int,
name char(20),
money int,
foreign key(stu_id) references jftab(id)
on delete cascade
on update cascade
)default charset=utf8;
insert into bjtab values
(1,"唐伯虎",20000),
(2,"秋香",28000);
注意:
1、删除同步
删除主表中记录时,从表中记录会同步删除
2、修改同步(update)
只针对于修改主表被参照字段时,从表参照字段才会级联更新
3、在从表中插入记录时,如果参照字段的值没有在主表被参照字段中,则不允许插入
2、删除外键约束
语法:
alter table 表名 drop foreign key 外键名;
注意:
1、外键名的查看方式
show create table 表名;
3、在已有表中添加外键
alter table 表名 add
foreign key(参照字段名)
references 表名(被参照字段名)
on delete cascade
on update cascade;
注意:
在已有表中添加外键时,会受到原有数据的限制
3、数据导入
1、作用
把文件系统的内容导入到数据库中
2、语法
load data infile "文件名"
into table 表名
fields terminated by "分隔符"
lines terminated by "\n"
示例:
把 /etc/passwd 文件中的内容导入到库db3下的userinfo表中
用户名 密码 uid gid
tarena: x: 1000: 1000:
用户描述 主目录 登录权限
tarena,,,: /home/tarena: /bin/bash
操作步骤:
1、在数据库中创建对应的表
create table userinfo(
username char(20),
password char(1),
uid int,
gid int,
comment varchar(50),
homedir varchar(50),
shell varchar(50)
);
2、将要导入的文件拷贝到数据库的默认搜索路径
1、如何查看数据库默认搜索路径
show variables like "secure_file_priv";
/var/lib/mysql-files/ "sec%iv"
2、sudo cp /etc/passwd /var/lib/mysql-files/
3、将系统文件导入到创建的表中
4、数据导出
1、作用
将数据库中表的记录保存到系统文件里
2、语法
select ... from 表名
into outfile "文件名"
fields terminated by "分隔符"
lines terminated by "分隔符";
示例:
select username,password,uid from userinfo
into outfile "/var/lib/mysql-files/userinfo.txt"
fields terminated by " "
lines terminated by "\n";
注意:
1、导出的内容由SQL查询语句决定
2、执行导出命令时路径必须指定在对应的数据库目录下
练习:
将mysql库下的user表中的 user、host两个字段的值导出到 user2.txt,将其存放在数据库目录下
select user,host from mysql.user
into outfile "/var/lib/mysql-files/user2.txt"
fields terminated by " : "
lines terminated by "\n";
5、嵌套查询
1、定义
把内层的查询结果作为外层查询的条件
2、语法
sql查询语句 where 条件(sql查询语句);
示例(利用userinfo表操作)
1、把 uid的值 小于 这个字段的平均值的
用户名和uid显示出来
select username,uid from userinfo
where uid < (select avg(uid) from userinfo);
2、查找userinfo表中 username的值 在
mysql库下的user表中host字段值为localhost并且user的值是root的user字段值 中
的用户名
select username from userinfo
where username in
(select user from mysql.user where host="localhost" and user="root");
6、表的复制
1、表的复制
1、语法
create table 表名 select 查询命令;
示例:
1、复制userinfo表的全部记录和字段,userinfo2
create table userinfo2
select * from userinfo;
2、复制userinfo表的前10条记录,userinfo3
create table userinfo3
select * from userinfo limit 3;
3、复制userinfo表的 username,password,uid 三个字段的第2-10条记录,userinfo4
create table userinfo4
select username,password,uid from userinfo
limit 1,9;
注意:
复制表的时候不会把原有表的 键 属性复制过来
2、复制表结构
1、语法
create table 表名 select 查询命令 where false;
示例:
1、复制一下userinfo表的表结构,userinfo5
create table userinfo5
select * from userinfo where false;
练习 + 环境准备:
1、创建t1表,包含userinfo表中的 username,uid,shell三个字段的前 2 条记录
create table t1 select username,uid,shell from userinfo limit 2;
2、创建t2表,包含userinfo表中的 username,uid,gid,homedir四个字段的前 3 条记录
create table t2 select username,uid,gid,homedir from userinfo limit 3;
7、多表查询
1、两种方式
1、select 字段名列表 from 表名列表; ->笛卡尔集
示例:
1、select * from t1,t2;
2、select t1.username,t1.uid,t2.username from t1,t2;
2、select 字段名列表 from 表名列表 where 条件;
示例:
1、找到t1和t2中相同的用户名,全部显示信息
select * from t1,t2
where t1.username = t2.username;
2、找到t1和t2表中相同的uid号,把两张表的uid和username都显示出来
select t1.uid,t1.username,t2.uid,t2.username from t1,t2 where t1.uid = t2.uid;
7、连接查询
1、创建两张表
1、create table t3 select username,uid from userinfo limit 2;
2、create table t4 select username,uid from userinfo limit 3;
2、左连接
1、定义
以左边的表为主显示查询结果
2、语法
select 字段名 from 表1 left join 表2 on 条件;
示例:
把t3和t4表中username相同的记录显示出来,以t3为主
select * from t3 left join t4 on t3.username = t4.username;
3、右连接
用法同左连接,以右边的表为主显示查询结果
1、索引
2、事务和事务回滚
3、备份与恢复
4、python数据库编程