mysql小结
mysql 在ubuntu使用
登录
mysql -u root -p
mysql -h localhost -u root -p
查看数据库
SHOW DATABASES
CREATE DATABASE lib;
mysql时间使用
mysql 插入时间
- now()函数以yyyy-mm-dd hh:mm:ss返回当前的日期时间,可以直接存到datetime字段中
- curdate()以’yyyy-mm-dd’的格式返回今天的日期,可以直接存到date字段中
- curtime()以’hh:mm:ss’的格式返回当前的时间,可以直接存到time字段中
时间类型加减
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
定义和用法
DATEDIFF() 函数返回两个日期之间的天数。
语法
DATEDIFF(date1,date2)
例子
set @dt = now();
select date_add(@dt, interval 1 day); - 加1天
select date_add(@dt, interval 1 hour); -加1小时
select date_add(@dt, interval 1 minute); - 加1分钟
select date_add(@dt, interval 1 second); -加1秒
select date_add(@dt, interval 1 microsecond);-加1毫秒
select date_add(@dt, interval 1 week);-加1周
select date_add(@dt, interval 1 month);-加1月
select date_add(@dt, interval 1 quarter);-加1季
select date_add(@dt, interval 1 year);-加1年
mysql 变量使用
sql server中变量要先申明后赋值
- 局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的)
- 申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;
插入
INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 'field2', 'fieldn' FROM ...
触发器
不知道为啥触发器前面都要加 DELIMITER //
还有切记触发器不能触发对象和处理对象是同一个
MySQL Error: Can’t update table ‘tbl’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger
这是可以的,但是如果,你把这个触发器放在after之后,然后修改同一个表,就不行!!!
DELIMITER //
create trigger InsertReader before insert
on Reader for each row
begin
set new.maxnum = 30;
set new.lastnum = 30;
if(new.kind = "干部") then
set new.maxnum = 45;
set new.lastnum = 45;
end if;
end
实例
DELIMITER //
create trigger InserRecord before insert
on Record for each row
begin
declare lastbooknum int;
declare lastreadernum int;
declare mday int;
declare msg varchar(200);
select num into lastbooknum from Book where Book.bookid = new.bookid;
select lastnum into lastreadernum from Reader where Reader.readerid = new.readerid;
select maxday into mday from Reader where Reader.readerid = new.readerid;
if(lastbooknum < 1) then
set msg = "图书都已借出";
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg ;
end if;
if(lastreadernum < 1) then
set msg = "您已经不能再借书,请先归还再借";
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg ;
end if;
if(lastbooknum > 0 && lastreadernum > 0) then
update Book set num = num - 1 where Book.bookid = new.bookid;
update Reader set lastnum = lastnum - 1 where Reader.readerid = new.readerid;
set new.borrowtime = curdate(), new.deadline = date_add(curdate(), interval mday day);
end if;
end