文章简介
在学习关系型数据库的时候,教材上的数据库使用的是Oracle关系型数据库,而我因为其它原因,使用的是MySQL数据库。从数据库的类型上来讲,两者都是关系型数据库,数据的存取模式上没太大的差别,但是毕竟是两个不同的关系型数据库,Oracle的功能要更强大一些。毕竟一个是免费的一个是有付费版本的。本文就MySQL数据为例,就我学习期间总结的资料,总结一些MySQL数据库中的DDL、DML、DCL语句。
DDL(Data Definition Language数据库定义语言)
数据库定义语言,主要用于数据库中对数据,数据表等的定义。主要涉及create语句,alter语句,drop语句等。例如:
创建基本表
create table allbook(
bookid char(20),
ISBN char(20),
borrowed char(4),
borrowedinfo char(50)
); //这里没有在创建表的时候进行完整性约束,因为后面讲如何使用alter语句添加约束,实际上可以在创建表的时候就进行完整性约束,这样会更方便。
修改基本表
alter table tablename add column columnname varchar(20) not null after beforecolumnname; //在指定字段后面插入列
ALTER TABLE tb_article MODIFY COLUMN NAME VARCHAR(50); //修改字段类型和长度
ALTER TABLE tb_article CHANGE name1 name2 VARCHAR(30); //修改字段名
添加完整性约束
alter table test add primary key(test_no); //主键约束
alter table test add unique(test_student); //unique约束
alter table test drop primary key; //删除该表中的主键
alter table test add foreign key (test_no) references test1(test_no);
alter table test add constraint N1 foreign key (test_no) references test1(test_no); //添加外键约束
alter table test drop foreign key 外键约束名; //删除外键约束
alter table test modify test_student char(10) not null; //建立非空约束
alter table test modify test_student char(10); //删除非空约束
alter table worker add check(sex in ('男','女')); //check约束条件
alter table reader add check(readeridcode like '\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z]'); //使用正则表达式进行约束(MySQL可能不支持)
可以为外键约束指定名称,例如:
alter table borrow add constraint C3 foreign key (borrowidcode) references reader(borrowidcode);
alter table borrow add constraint C4 foreign key (bookid) references allbooks(bookid);
alter table borrow add constraint C5 foreign key (finecode) references finetype(finecode); //其中borrow是借阅表的表名,finetype是另一个表的表名,括号里面是表中的属性。
创建触发器
delimiter //
create trigger tri_borrowbook after insert on borrow
for each row
begin
declare t_borrowcode char(4);
declare t_bookid char(20);
select count(*) from borrow into t_borrowcode;
select bookid from borrow where borrowcode=t_borrowcode into t_bookid;
update allbooks set borrowed='是' where allbooks.bookid=t_bookid;
commit;
end;
//
MySQL创建触发器和存储过程都需要自己定义一个结束符号,表示触发器或者存储过程结束。使用delimiter定义结束符。至于触发器的语法上面给出了示例,如果还不清楚需要学习的可以参考这篇文章https://www.cnblogs.com/fanqisoft/p/10782798.html
创建存储过程
delimiter //
create procedure proc_borrow_books(
in p_borrowcode char(20),
in p_borrowidcode char(20),
in p_bookid char(20) //in后面是传入参数的名字及类型,可以理解为函数
)
begin
declare p_borrowed char(4); //定义变量
select borrowed into p_borrowed from allbooks where bookid=p_bookid; //为变量赋值
if p_borrowed='否' then
insert into borrow(borrowcode,borrowidcode,bookid,borrowtime) values(p_borrowcode,p_borrowidcode,p_bookid,current_date());
update allbooks set borrowed='是' where bookid=p_bookid;
commit;
else
select '该图书已经借出';
end if;
end
//
存储过程较为复杂,如果示例看不懂可以参考这篇博客https://blog.csdn.net/A__yes/article/details/52795793
创建函数
delimiter //
create function FUNC_NAME (参数列表)
returns varchar (50) //设置函数的返回类型
begin
函数体;
return '函数返回结果'; //函数的返回值
end;
//
删除函数可以使用
DROP FUNCTION func_name;
函数的创建与存储过程有相似的地方,但两者并不是相同的,函数调用时使用
select 函数名(参数列表);
函数的使用也较为复杂,可以参考更为详细的文章https://blog.csdn.net/u014207606/article/details/84856344
创建用户
create user user1 identified by 'user1password';
grant all privileges on user3550 to user1; //赋予用户dba权限,user3550为dba角色
grant execute on procedure proc_borrow_books to user1; //赋予执行存储过程的权限
创建角色
create role '角色名';
创建用户并用角色授权
create user user2 identified by 'user2password';
grant user2_ROLE to user2; //user2_ROLE是已经创建好并授权的角色
赋予和收回角色的权限
GRANT ALL ON 数据库名.* TO '角色名'; //给数据库中所有表的所有权限
GRANT SELECT ON 数据库名.* TO '角色名'; //数据库中所有表的查询权限
GRANT INSERT, UPDATE, DELETE ON 数据库名.* TO '角色名'; //数据库中所有表的修改权限,可以把数据库名换成表名或者视图名等
//收回角色或角色权限
REVOKE role FROM user; //收回该账户的角色
REVOKE INSERT, UPDATE, DELETE ON 数据库名.* FROM '角色名'; //收回角色的权力
修改了角色的权利,会影响拥有该角色的账户的权力
创建视图
create view VIEW_READER(ISBN,bookname,author,publisher,typename)
as select ISBN,bookname,author,publisher,typename
from books,booktype
where books.typecode=booktype.typecode;
DML(Data Manipulation Language数据库操作语言)
数据库操作语言主要用于对数据进行操作。例如select、update、insert等。如下:
select查询语句
select max(price),avg(price) from books group by publisher; //使用聚合函数和group语句
select author,publisher,price from allbooks,books where books.ISBN=allbooks.ISBN and bookname='红楼梦' and borrowed = '否'; //连接查询
嵌套查询
select readername,readerunit,readersex,readeraddress,readerphone
from reader
where borrowidcode in
(select borrowidcode
from borrow
group by borrowidcode
having count(*)>=2);
insert插入语句
insert into reader values('20051001','王菲','四川绵阳西科大计算机学院','女','东六E','13550374857','541324399876532937'); //reader为表名
update修改语句
update 表名 set 属性 where 条件语句;
update allbooks set borrowed='是' where bookid=p_bookid;
delete删除语句
DELETE FROM 表名 WHERE 条件语句;
DELETE FROM books WHERE bookid='3550';
call调用语句
call语句主要用于调用存储过程
call 存储过程名(参数列表);
call proc_borrow_books('7','20051001','2001231');
DCL(Data Control Language数据库控制语言)
数据库控制语言用来授予或回收访问数据库的某种特权并控制数据库操纵事务发生的时间及效果,对数据库实行控制。例如set语句、commit语句、rollback语句等。例如:
设置数据库安全级别
set sql_safe_updates = 0; //可以将数据库的安全级别设置为0或者1,不能增删改查时有时候可能是由于数据库安全级别太高。
至于commit和rollback语句,需要提交数据和回滚的时候直接调用即可。
MySQL数据库备份
数据库备份可以直接使用MySQL的可视化工作台进行备份,既简单又方便,当然也可以使用命令行。例如:
导出数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件路径及文件名
mysqldump -u S5120173550 -p user3550 > D:\MySQL_backup\user3550.sql
导出数据表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u S5120173550 -p user3550 orderborrow > D:\MySQL_backup\user3550_orderborrow.sql
不推荐使用命令行,因为导出和导入都比较麻烦,直接使用MySQL提供的可视化工作台很方便。
附加:一些常用的MySQL查看语句
show create table tablename; //检查表中的约束条件。
show databases; //展示所有的数据库
show grants for username; //查看用户权限
show create procedure proc_name; //查看存储过程
show create function func_name; //查看创建的函数