mysql(上)
- mysql
mysql -u root -p123456
exit;或quit;
insert into 表名 values('','',XX); - 注释
单行-- 或#
sql语句分为四大类总结为定义,查询,操作,控制 - ddl数据定义语言
用来定义数据库对象:数据库,表,列等.关键字:create,drop,alter - dml数据操作语言
用来对数据库中表的数据进行增删改.关键字:insert.delete,update等 - dql数据查询语言
用来查询数据库中表的记录(数据),关键字:select,where等 - dcl数据控制语言
用来定义数据库的访问权限和安全级别,及创建用户.关键字:grant,revoke等
对库和表操作的叫ddl,对数据记录操作的有两种一个是dml增删改,一个是dql查询. 最后一类是用来授权的叫dcl
数据库
创建
create database if not exits XX characters set gbk;
修改
alter database XX
删除
drop database xX
表
show tables显示所有表 desc 表名.表明查询表结构
create table 表名 like 被复制的表名 ; //复制表
create table 表明(列名 类型,列,类)
修改alter table 表名 rename to 新的表名
删除drop table if exits 表名
数据
delete from 表名 where id = 1
update 表名 set 列1 = 值1,列2=值2[where 条件]
查询表中记录
select 字段列表 from 表名 where 条件 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
--去除重复的
select distinct 字段 from 表名
--ifnull用法
ifnull(a,b)如果a是null就b不是就原来的值a
--as可起别名
select name,math,english,math+english as 总分 from XX;
或者as省略用空格也是可以起别名
条件查询
关于where后面between and,in...集合,like,is null,and,or,not或!
where age in(20,19,18)
判断数据值是否是null用is null
不为null就是is not null
模糊查询:like(%意味着0或多个)
找姓马的人where name like '马%'
where name like '化%'
name like '__'
查询姓名中包含马的人where name like '%马%'
排序查询
order by math asc,english asc 默认按升序排列.asc是升序.desc是降序 --当第一排序数据值一样的时候才用第二排序序列.
聚合函数(将一列数据作为一个整体,进行纵向计算)会自动排空.排除null比如有一个null就忽略不计.
1.count计算个数.
2.max 获取最大值 min最小值
3.sum 求和
4.avg 平均值
select count(name) from student;统计名字个数.
select count(ifnull(name,0)) from student; 可以结合使用
聚合函数计算的结果都是单行单列
分组查询
group by分组
where 和having的区别:where在分组前进行限定,不满足不进行分组.having是分组后进行限定,比如男女进行分组如果分组后必须人大于2则having count(id)>2
where不可以跟聚合函数,having可以进行聚合函数的判断
分页查询
结合web和数据库进行真正的分页操作
语法:limit开始索引,每页查询的条数
select * from student limit 0,3从0开始三条数据第一个参数是开始的索引,第二个参数是展示几条
公式:开始的索引 = (当前页码 - 1) * 每页显示的条数
#约束
主键约束primary key,外键约束foreign key,非空约束not null,唯一约束unique
非空约束not null
创建的时候约束
create table stu(id stu,name varchar(20) not null);
创建之后修改表约束
alter table stu modify(或者change也可以) name varchar(20);
唯一约束unique
删除唯一约束
alter table stu drop index phonenumber
创建表后添加唯一约束和上面非空的一样
alter table stu modify(或者change也可以) name varchar(20) unique;
主键约束
primary key
删除主键约束
alter table stu drop primary key;因为主键约束只能有一个.所以直接drop primary就可以了
创建表后添加主键约束
alter table stu modify(或者change也可以) id int primary key;
主键约束-自动增长auto_increment
alter table stu modify(或者change也可以) id int;自动删除了,但是这样删不掉主键,所以这样就删除了自增长
alter table stu modify id int auto_increment;添加自增长
自增长一般都和主键一块使用,所以就放一块了.但是自增长也可以不和主键一块,但这样很少见
外键约束foreign key
比如表里有研发部和销售部,多个重复数据就可以绑定为外表的id-1,2对应研发部和销售部.
一般都是外键绑定外表的主键.也可以是不是主键,但必须是唯一修饰的列
create table 表名( 外键列 constraint 外键名称 foreign key (外键列名称) references 主表名称(主表主键名称) );
这个外键名称就是起个名字emp_dep_fk外键
create table emp( id int,name varchar(20),dep_id int,
constraint emp_dep_fk foreign key (dep_id) references 主表名称(主表主键名称) );
因为是员工表的外键绑定到部门表,所以要先创建部门表,再创建员工表
同样差不多是先给部门表添加数据,再给员工表添加数据
删除外键
alter table emp drop foreign key emp_dep_fk;
创建表后添加外键
alter table emp add constraint emp_dep_fk foreign key (dep_id) references 主表名称(主表主键名称) );
外键约束的级联操作
外键部门id可以为null但不能为绑定外表的不存在的id值
先设置表的外键为null,再修改外表的值,然后修改外键的值,过程很繁琐.
添加外键并且进行级联更新
修改设置外键 on update cascade;
这样修改表的外键列就两个表一块改
级联删除
alter table ....add const ... on delete cascade;