mysql基础
数据库操作
登陆
mysql -u root -p
退出登录
quit
或
exit
查看数据库
show databases
创建数据库
create database database_name default charset=utf8;
删除数据库
drop database database_name;
切换数据库
use database_name;
查看当前选择的数据库
select database();
表操作
查询完整的sql语句
select
from 表名
where ....
group by ...
having ...
order by ...
limit star,count
查看当前数据库中所有表
show tables;
创建表
auto_increment表示自动增长,只能是数字类型;
主键本身是用来唯一标识这一行,没有业务逻辑意义,所以是什么值不重要,只要唯一就行,所以如果是主键不需要修改.
create table 表名(列及类型);
如:
create table students(
id int auto_increment primary key,
sname varchar(10) not null
);
自关联:
create table areas(
id int primary key,
atitle varchar(20),
pid int,
foreign key(pid) references areas(id)
);
表创建后添加外键约束:
alter table scores add constraint stu_sco foreign key(stuid) references students(id) on delete cascade;
创建表时添加外键约束:
create table scores(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5,2),
foreign key(stuid) references students(id),
foreign key(subid) references subjects(id)
);
外键的级联操作
restrict(限制):默认值,抛异常
cascade(级联):如果主表的记录删掉,则从表中相关联的记录都将被删除
set null:将外键设置为空
no action:什么都不做
alter table scores add constraint stu_sco foreign key(stuid) references students(id) on delete cascade;
【on delete cascade】
修改表中字段,urd
alter table 表名 add|modify|drop 列名 类型;
如:
alter table students add birthday datetime;
删除表
drop table 表名;
查看表结构
desc 表名;
更改表名称
rename table 原表名 to 新表名;
查看表的创建语句
show create table '表名';
表中数据操作
查询
select * from 表名
聚合
count():统计表中有多少行,不会忽略null。
例如统计班级中有多少学生?select count() form student;
count(列名):不会统计null,只统计有此列有值的个数。
分组
group by 比如统计操场上有多少男生,多少女生。
第一步:分组,第二部:统计count(*)
where:分组前的筛选。
having:分组后的筛选。
分组后只能查被分组的列,聚合函数,其他不能查,查了报错🤢🤢
增加表内容
全列插入:insert into 表名 values(...)
缺省插入:insert into 表名(列1,...) values(值1,...)
同时插入多条数据:insert into 表名 values(...),(...)...;
或insert into 表名(列1,...) values(值1,...),(值1,...)...;
主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准
修改表内容
update 表名 set 列1=值1,… [where 条件]
删除表内容
delete from 表名 [where 条件]
备份与恢复
-
数据备份
进入超级管理员
sudo -s
运行mysqldump命令
mysqldump –uroot –p 数据库名 > ~/备份文件.sql;
按提示输入mysql的密码 -
数据恢复
连接mysql,创建数据库
退出连接,执行如下命令
mysql -uroot –p 数据库名 < ~/备份文件.sql
根据提示输入mysql密码
开发过程中需要的问题记录
连接查询
笛卡尔积会产生多余的数据条数,避免笛卡尔积要使用条件,至少有集合-1个条件约束
内连接
从任一方出发结果相同,连不上就放弃。内连接的两种方式(左,右内连接),sql默认用的是内连接😢
内连接的两种写法:
方式一
select * from student st,score sc where st.id=sc.id;
方式二
select * from student st inner join score sc on st.id = sc.id [where ...];
外连接
分主表,次表。
指定主表。
从外键表出发,结果与内连接相同,从主键表出发,结果与内连接可能同。
连不上置为null。
select * from student st left outer join score on sc st.id=sc.id [where ...]
select * from student st right outer join score on sc st.id=sc.id [where ...]
left outer join == left join outer可以省略,他俩是一个意思
on后面只能跟一个条件,其他的条件写到where中🎉😊
自连接
比如权限,上下级,商品分类,论坛贴吧
内置函数
ifnull
null参与运算,结果是null 避免这种情况,使用ifnull函数 ifnull(数值,0),把是null的数据替换成0。
trim 去除空格
select trim(’ a’);a
replace
select replace(‘abc123’,‘1’,‘def’)
select replace(原字符串,要替换的部分,替换成xx)
精度,保留六位小数
一般来讲:数据库中保留六位,页面上保留两位
sql_model_
select version();
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
mysql 增删一个字段
double类型的 DOUBLE(11,2)