本节课程学习MySQL数据库的高级操作,不需要熟练操作,这部分内容作为了解,对于未来的工作是加分项
E-R模型的基本元素是:实体、联系和属性
E表示entry,实体:一个数据对象,描述具有相同特征的事物
R表示relationship,联系:表示一个或多个实体之间的关联关系,关系的类型包括包括一对一、一对多、多对多
属性:实体的某一特性称为属性
1、实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值

2、实体A对实体B为1对多:在表B中创建一个字段,存储表A的主键值

3、实体A对实体B为多对多:新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值

另一种方式,打开cmd程序,进入到mysql安装目录的bin目录下
1、进入mysql的bin目录
cd C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin
2、连接mysql
mysql -uroot -p

show databases;
use 数据库名;
select database();
create database 数据库名 charset=utf8;
例:
create database ceshi charset=utf8;
drop database 数据库名;
例:
drop database ceshi;
show tables;
desc 表名;
查看表的创建语句
show create table 表名;
例:
show create table students;
以管理员身份运行cmd程序

cd C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin
mysqldump –uroot –p 数据库名 > ceshi.sql
# 按提示输入mysql的密码
mysql -uroot –p 新数据库名 < ceshi.sql
# 根据提示输入mysql密码
select concat(12,34,‘ab‘);
select length(‘abc‘);
select substring(‘abc123‘,2,3);
select ltrim(‘ bar ‘);
select lower(‘aBcD‘);
select round(1.6);
select pow(2,3);
select PI();
select rand();
select current_date();
select current_time();
select now();
日期格式化date_format(date,format)
参数format可选值如下
%Y 获取年,返回完整年份
%y 获取年,返回简写年份
%m 获取月,返回月份
%d 获取日,返回天值
%H 获取时,返回24进制的小时数
%h 获取时,返回12进制的小时数
%i 获取分,返回分钟数
%s 获取秒,返回秒数
select date_format(‘2016-12-21‘,‘%Y %m %d‘);
case 值 when 比较值1 then 结果1 when 比较值2 then 结果2 ... else 结果 end
例:
select case 1 when 1 then ‘one‘ when 2 then ‘two‘ else ‘zero‘ end as result;
delimiter $$
create function 函数名称(参数列表) returns 返回类型
begin
sql语句
end
$$
delimiter ;
要求:创建函数my_trim,用于删除字符串左右两侧的空格
step1:设置分割符
delimiter $$
create function my_trim(str varchar(100)) returns varchar(100)
begin
return ltrim(rtrim(str));
end
$$
delimiter ;
select ‘ abc ‘,my_trim(‘ abc ‘)
存储过程,也翻译为存储程序,是一条或者多条SQL语句的集合
delimiter //
create procedure 存储过程名称(参数列表)
begin
sql语句
end
//
delimiter ;
delimiter //
create procedure proc_stu()
begin
select * from students;
end
//
delimiter ;
call 存储过程(参数列表);
调用存储过程proc_stu
call proc_stu();
create view 视图名称 as select语句;
create view v_stu_score_course as
select
stu.*,cs.courseNo,cs.name courseName,sc.score
from
students stu
inner join scores sc on stu.studentNo = sc.studentNo
inner join courses cs on cs.courseNo = sc.courseNo
show tables;
drop view 视图名称;
例:
drop view v_stu_score_course;
select * from v_stu_score_course;
show create table students;
修改数据的命令会触发事务,包括insert、update、delete
开启事务,命令如下:
begin;
commit;
rollback;
select * from students;
begin;
insert into students(studentNo,name) values (‘013‘,‘我是新来的‘);
select * from students;
select * from students;
commit;
select * from students;
select * from students;
begin;
insert into students(studentNo,name) values (‘014‘,‘又来一个‘);
select * from students;
select * from students;
rollback;
select * from students;
show index from 表名;
方式一:建表时创建索引
create table create_index(
id int primary key,
name varchar(10) unique,
age int,
key (age)
);
方式二:对于已经存在的表,添加索引
如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
字段类型如果不是字符串,可以不填写长度部分
create index 索引名称 on 表名(字段名称(长度))
例:
create index age_index on create_index(age);
create index name_index on create_index(name(10));
drop index 索引名称 on 表名;
create table test_index(title varchar(10));
delimiter //
create procedure proc_test()
begin
declare i int default 0;
while i<100000 do
insert into test_index(title) values(concat(‘test‘,i));
set i=i+1;
end while;
end
//
delimiter ;
call proc_test();
set profiling=1;
select * from test_index where title=‘test10000‘;
show profiles;
create index title_index on test_index(title(10));
select * from test_index where title=‘test10000‘;
show profiles;
explain
select * from test_index where title=‘test10000‘

如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体(主表),也叫父实体(父表)。负责指向的实体,称之为从实体(从表),也叫子实体(子表)
对关系字段进行约束,当为从表中的关系字段填写值时,会到关联的主表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并报错
show create table 表名
方式一:创建数据表的时候设置外键约束
create table goods_fk(
id int unsigned primary key auto_increment,
name varchar(150),
cate_id int unsigned,
brand_id int unsigned,
price decimal(10,3) default 0,
is_show bit default 1,
is_saleoff bit default 0,
foreign key(cate_id) references goods_cates(cate_id),
foreign key(brand_id) references goods_brands(brand_id)
);
foreign key(自己的字段) references 主表(主表字段)
方式二:对于已经存在的数据表设置外键约束
alter table 从表名 add foreign key (从表字段) references 主表(主表字段);
alter table goods add foreign key (cate_id) references goods_cates(cate_id);
alter table goods add foreign key (brand_id) references goods_brands(brand_id);
-- 需要先获取外键约束名称
show create table goods;
-- 获取名称之后就可以根据名称来删除外键约束
alter table goods drop foreign key 外键名称;
alter table goods drop foreign key goods_ibfk_1;
alter table goods drop foreign key goods_ibfk_2;
insert into goods_fk (name,cate_id,brand_id,price)
values(‘LaserJet Pro P1606dn 黑白激光打印机‘,‘20‘,‘20‘,‘1849‘); -- 插入不成功,因为主表中没有20这个值
insert into goods_fk (name,cate_id,brand_id,price)
values(‘LaserJet Pro P1606dn 黑白激光打印机‘,‘1‘,‘1‘,‘1849‘); -- 可以插入成功
在实际开发中,很少会使用到外键约束,会极大的降低表更新的效率
use mysql;
update user set password=password(‘新密码‘) where user=‘用户名‘;
例:
update user set password=password(‘123‘) where user=‘root‘;
刷新权限:flush privileges;
1、配置mysql登录时不需要密码,修改配置文件
修改,找到mysqld,在它的下一行,添加skip-grant-tables
[mysqld]
skip-grant-tables
2、重启mysql,免密码登录,修改mysql数据库的user表
use mysql;
update user set password=password(‘新密码‘) where user=‘用户名‘;
例:
update user set password=password(‘123‘) where user=‘root‘;
刷新权限:flush privileges;
3、还原配置文件,把刚才添加的skip-grant-tables删除,重启
版权声明:本文为博主原创文章,转载请附上博文链接!原文:https://www.cnblogs.com/yaoteng/p/11101976.html