Mysql視圖
假設執行100條SQL陳述句時,里面都存在一條相同的陳述句,那我們可以把這條陳述句單獨拿出來變成一個'臨時表',也就是視圖可以用來查詢,
創建視圖:
CREATE VIEW passtview AS SELECT student_id, course_id, number FROM scoretable WHERE number >= 60;
執行陳述句后,可以在左邊的視窗中看到剛創建的視圖表

如果在scoretable中插入一條資料,視圖中也會隨之增加,因為scoretable它的本質是一張物理表,即真實存在,而視圖它是一個虛擬的表格,在視圖中的資料都是從物理表中動態的讀取出來,因此本質上視圖中的資料自己是不能去修改,
修改視圖:
ALTER VIEW passtview AS SELECT student_id, course_id, number FROM scoretable WHERE number < 60;
洗掉視圖:
DROP VIEW passtview;
Mysql觸發器
當某張表要做增刪改操作時,可以使用觸發器來自定義關聯行為;當使用插入方法時能使用NEW關鍵字添加新資料,洗掉方法時能使用OLD關鍵字添加老資料,更新時可以使用OLD和NEW關鍵字去添加新老資料,
洗掉觸發器
drop trigger t1;
插入前
delimiter // -- 將結束符改成// CREATE TRIGGER t1 BEFORE INSERT ON studenttable FOR EACH ROW BEGIN INSERT INTO teachertable (tname) VALUES ('akj'); END // delimiter ; -- 將結束符改成 ;
再在學生表中加入一個新的資料
insert into studenttable(sname,gender,class_id) values('Jxson','男',2),('Jxsons','男',3);
可以看到學生表在添加了兩個資料之后,教師表中也增加了相應個數的資料

動態插入:
delimiter // CREATE TRIGGER t1 BEFORE INSERT ON studenttable FOR EACH ROW BEGIN INSERT INTO teachertable (tname) VALUES (new.sname); END // delimiter ;
加入資料
insert into studenttable(sname,gender,class_id) values('實習老師1','男',2),('實習老師2','男',4)
通過這種動態插入會讓兩張表加入的資料相同
插入后
CREATE TRIGGER t1 AFTER INSERT ON studenttable FOR EACH ROW BEGIN ... END
洗掉前
CREATE TRIGGER t1 BEFORE DELETE ON studenttable FOR EACH ROW BEGIN ... END
洗掉后
CREATE TRIGGER t1 AFTER DELETE ON studenttable FOR EACH ROW BEGIN ... END
更新前
CREATE TRIGGER t1 BEFORE UPDATE ON studenttable FOR EACH ROW BEGIN ... END
更新后
CREATE TRIGGER t1 AFTER UPDATE ON studenttable FOR EACH ROW BEGIN ... END
Mysql函式
處理字串內置函式
1.CHAR_LENGTH
計算字串中字符的個數
select CHAR_LENGTH('string');
執行結果:

2.CONCAT(str1,str2,...)
將所有的字串進行拼接
select CONCAT('abc','123','!@#$')
執行結果:

如果里面有NULL存在,就回傳NULL
select CONCAT('abc','123','!@#$',NULL)
執行結果:

3.CONCAT_WS(separator,str1,str2,...)
自定義字串拼接的方式,會忽略NULL,separator是分隔符
select CONCAT_WS(' + ','string1','string2',NULL,'string3');
執行結果:

4.CHARACTER_LENGTH(str)
回傳字串的字符數
SELECT CHARACTER_LENGTH('abc a');
執行結果:

5.ASCII(str)
回傳字串第一個字符的ASCII值
select ASCII(tname) from teachertable;
執行結果:

6.FIELD(str,str1,str2,str3,...)
回傳第一個字串str在字串串列(str1,str2...)中的位置
select FIELD('cas','cas','a','b','cas');
執行結果:

7.FIND_IN_SET(str,strlist)
回傳字串s2與s1匹配的字串位置
select FIND_IN_SET('hi12','abc,wcs,hi12,ssw')
執行結果:

8.FORMAT(X,D)
函式將數字x進行格式化“#,###.##”,將x保留到小數點后n位,最后一位四舍五入,X為輸入的浮點數,D為保留的小數位
select FORMAT(1348922.7777777,5)
執行結果:

9.INSERT(s1,x,len,s2)
將字串s2替換s1的x位置開始長度為len的字串
select INSERT('11111111',3,3,'###')
執行結果:

10.LOCATE(substr,str)
從字串substr中獲取str開始的位置
select LOCATE('aaa','111aaa111aaa1111');
執行結果:

11.LCASE(str)
按字串str的所有字母變成小寫字母
select LCASE('aABaswQOP');
執行結果:

12.LEFT(str,len)
回傳字串str的前n個字符
select LEFT('abcde',3);
執行結果:

13.LOWER(str)
將所有字串str的所有字母變成小寫字母
select LOWER('aABCS 1AASDa')
執行結果:

14.LPAD(str,len,padstr)
在字串str的開始處填充字串padstr,使字串長度達到len
select LPAD('abc',10,'#@$')
執行結果:

15.LTRIM(str)
去掉字串str的空格
select LTRIM(' ## ## ## ')
執行結果:

16.MID(str,pos,len)
從字串str的pos位置截取長度為len的子字串,同SUBSTRING
select MID('abcdefg',-3,3)
執行結果:

17.POSITION(substr IN str)
從字串substr中獲取s1的開始位置
select POSITION('#' IN 'a#fg#a');
執行結果:

18.REPEAT(str,count)
將字串str重復count次
select REPEAT('@_@',3);
執行結果:

19.REPLACE(str,from_str,to_str)
將字串to_str替代字串str中的from_str
select REPLACE('1aaaaaa1','a','#');
執行結果:

20.REVERSE(str)
反轉字串str
select REVERSE('abc123');
執行結果:

21.RIGHT(str,len)
回傳字串str的后len個字符
select RIGHT('abcd123',4)
執行結果:

22.RPAD(str,len,padstr)
在字串str的結尾處添加字串padstr,使字串的長度達到len
select RPAD('vvvvv',10,'$%^');
執行結果:

23.SPACE(N)
回傳N個空格
select SPACE(5);
執行結果:

24.STRCMP(expr1,expr2)
比較字串expr1和expr2,如果expr1與expr2相等回傳0,如果expr1>expr2回傳1,如果expr1<expr2回傳0
select STRCMP('abc','a'),STRCMP('abc','abc'),STRCMP('a','abc');
執行結果:

25.SUBSTR(str,pos,len)
從字串str的pos位置截取長度為len的子字串
select SUBSTR('abcdefg',2,3)
執行結果:

26.SUBSTRING(str,pos,len)
從字串str的pos位置截取長度為len的子字串
select SUBSTRING('abcedfg',2,3);
執行結果:

27.SUBSTRING_INDEX(str,delim,count)
回傳從字串str的第count個出現的分隔符delim之后的字串,如果count > 0,回傳第count個字符左邊的字串,如果count < 0,回傳第count的絕對值(從右開始數)個字符右邊的字串
select SUBSTRING_INDEX('a*b*c*d*e','*',2),SUBSTRING_INDEX('a*b*c*d*e','*',-2)
執行結果:

28.TRIM(str)
去掉字串開頭和結尾的空格,除此之外還有LTRIM和RTRIM函式
select TRIM(' as asa s as ');
執行結果:

29.UCASE(str)
將字串轉成大寫,UPPER函式也有相同的功能
select UCASE('abc1@');
執行結果:

處理數字內置函式
1.ABS(X)
回傳X的絕對值
select ABS(-1);
執行結果:

2.ACOS(X)
回傳X的反余弦值(X為弧度)
select ACOS(0.25);
執行結果:

3.ASIN(X)
求反正弦值(X為弧度)
select ASIN(0.25);
執行結果:

4.ATAN(X)
求反正切值(X為弧度)
select ATAN(2.5);
執行結果:

5.ATAN2(Y,X)
求反正切值(Y,X為弧度)
select ATAN2(-0.8,2);
執行結果:

6.AVG(expr)
計算平均值,expr為一個欄位
7.CEIL(X)
回傳大于或等于X的最小整數
select CEIL(3.789);
執行結果:

8.CEILING(X)
回傳大于或等于X的最小整數
select CEILING(3.256);
執行結果:

9.COS(X)
求余弦值(X為弧度)
10.COT(X)
求余切值(X為弧度)
11.COUNT(expr)
回傳查詢的記錄總數,expr為一個欄位或者*號
12.DEGREES(X)
將弧度轉換為角度
select DEGREES(3.141592);
執行結果:

13.n DIV m
整除,n為被除數,m為除數
select 15.5 DIV 3;
執行結果:

14.EXP(X)
回傳e的X次方
select EXP(2);
執行結果:

15.GREATEST(value1,value2,...)
回傳串列的最大值
select GREATEST(1,7,8,9,-2,6,0);
執行結果:

比較字串
select GREATEST('%^','1234','awsl');
執行結果:

16.LEAST(value1,value2,...)
回傳串列中的最小值
select LEAST(1,2,-3,0);
執行結果:

比較字串
select LEAST('App','Abc','Abb');
執行結果:

17.LN(X)
回傳數字的自然對數
select LN(6);
執行結果:

18.LOG(X)
回傳自然對數(以e為底的對數)
select LOG(2);
執行結果:

19.LOG2(X)
回傳以2為底的對數
20.LOG10(X)
回傳以10為底的對數
21.MAX(expr)
回傳欄位expr中的最大值
22.MIN(expr)
回傳欄位expr中的最小值
23.MOD(N,M)
回傳N除以M以后的余數
select MOD(10,3);
執行結果:

24.PI()
回傳圓周率
select PI();
執行結果:

25.POW(X,Y)
回傳X的Y次方
select POW(2,3);
執行結果:

26.POWER(X,Y)
回傳X的Y次方
select POWER(2,3);
執行結果:

27.RADIANS(X)
將角度轉化為弧度
select RADIANS(180);
執行結果:

28.RAND()
回傳0-1的亂數
select RAND();
執行結果:

29.ROUND(X)
回傳距離X最近的整數
select ROUND(1.456);
執行結果:

30.SIGN(X)
回傳X的符號,X是負數,回傳-1,X是正數,回傳1,X是0,回傳0
select SIGN(-6),SIGN(0),SIGN(6);
執行函式:

31.SIN(X)
求正弦值(引數是弧度)
32.SQRT(X)
回傳平方根
select SQRT(4);
執行函式:

33.SUM(expr)
回傳指定欄位的總和
34.TAN(X)
求正切值(引數是弧度)
35.TRUNCATE(X,D)
回傳數值X保留到小數點后D位的值(與ROUND最大的區別是不會進行四舍五入)
select TRUNCATE(1.2356,3);
執行結果:

處理時間內置函式
1.ADDDATE(expr,days)
計算起始日期expr加上days天的日期
select ADDDATE('2019-10-1',INTERVAL 10 DAY);
執行結果:

2.ADDTIME(expr1,expr2)
時間expr1加上expr2秒的時間
select ADDTIME('2019-10-1 12:35:20',20);
執行結果:

3.CURDATE();
回傳當前日期
select CURDATE();
執行結果:

4.CURRENT_DATE()
回傳當前日期
select CURRENT_DATE();
執行結果:

5.CURRENT_TIME
回傳當前時間
select CURRENT_TIME;
執行結果:

6.CURRENT_TIMESTAMP()
回傳當前時間和日期
select CURRENT_TIMESTAMP();
執行結果:

7.CURTIME()
回傳當前時間
select CURTIME();
執行結果:

8.DATE(expr)
從日期或日期運算式中提取日期值
select DATE('2019-10-6');
執行結果:

9.DATEDIFF(expr1,expr2)
計算日期expr1->expr2之間相隔的天數
select DATEDIFF('2019-10-1','2019-10-16');
執行結果:
10.DATE_ADD(date,INTERVAL expr unit)
計算起始日期date加上一個時間段后的日期
select DATE_ADD('2012-5-21 11:21:23',INTERVAL 5 MINUTE);
執行結果:

11.DATE_FORMAT(date,format)
按運算式format的要求顯示日期date
select DATE_FORMAT('2012-5-9 23:50:49','%Y-%m-%d %r');
執行結果:

12.DATE_SUB(date,INTERVAL expr unit)
函式從日期減去指定的時間間隔
select DATE_SUB('2019-5-6 17:55:20',INTERVAL 7 DAY);
執行結果:
13.DAY(date)
回傳日期值date的日期部分
select DAY('2019-6-9');
執行結果:

select DAYOFMONTH('2019-10-15 21:55:32');
14.DAYNAME(date)
回傳日期date是星期幾,如Monday,Tuesday等
select DAYNAME('2019-10-28 12:59:59');
執行結果:

15.DAYOFMONTH(date)
計算日期date是本月的第幾天
select DAYOFMONTH('2019-10-15 21:55:32');
執行結果:

16.DAYOFWEEK(date)
計算date今天是周幾
select DAYOFWEEK('2019-10-15 21:55:32');
執行結果:

17.DAYOFYEAR(date)
計算日記date是本年的第幾天
select DAYOFYEAR('2019-10-15 21:55:32');
執行結果:

18.EXTRACT(unit FROM date)
從日期date中獲得指定的值,unit指定回傳的值,unit可取得值為:
MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH
19.FROM_DAYS(N)
計算0000年1月1日開始N天后的日期
select FROM_DAYS(1111);
執行結果:

20.HOUR(time)
回傳time中的小時值
select HOUR('2019-7-8 21:48:20');
執行結果:
21.LAST_DAY(date)
回傳給定日期的那一月份的最后一天
select LAST_DAY('2019-10-17 21:18:32');
執行結果:

22.LOCALTIME()
回傳當前日期和時間
select LOCALTIME();
執行結果:

23.LOCALTIMESTAMP()
回傳當前日期和時間
select LOCALTIMESTAMP();
執行結果:

24.MAKEDATE(year,dayofyear)
基于給定引數年份year和所在年中的天數序號dayofyear回傳一個日期
select MAKEDATE(2019,300);
執行結果:

25.MAKETIME(hour,minute,second)
回傳時間,引數為小時、分鐘、秒
select MAKETIME(18,2,48);
執行結果:

26.MICROSECOND(expr)
回傳日期引數所對應的微秒數
select MICROSECOND('2019-4-5 14:26:20.30');
執行結果:

27.MINUTE(time)
回傳time中的分鐘值
select MINUTE('2019-4-5 14:26:20');
執行結果:

28.MONTHNAME(date)
回傳日期當中的月份名稱
select MONTHNAME('2019-4-5 14:26:20');
執行結果:

29.MONTH(date)
回傳日期的月份值(1-12)
30.NOW()
回傳當前日期和時間
31.PERIOD_ADD(P,N)
為年-月 組合日期添加一個時段
select PERIOD_ADD(201910,3);
執行結果:
32.PERIOD_DIFF(P1,P2)
回傳兩個時段之間的月份差值
select PERIOD_DIFF(201910,202003);
執行結果:

33.QUARTER(date)
回傳日期date是第幾季節,1-4
select QUARTER('2019-4-5 14:26:20');
執行結果:

34.SECOND(time)
回傳time的秒鐘值
select SECOND('2019-4-5 14:26:20');
執行結果:

35.SEC_TO_TIME(seconds)
將秒為單位的時間seconds轉化為時分秒的格式
select SEC_TO_TIME(15164);
執行結果:
36.STR_TO_DATE(str,format)
將字串轉變為日期
select STR_TO_DATE('April 4 2019','%M %d %Y');
執行結果:

37.SUBDATE(expr,days)
日期date減去日期days
select SUBDATE('2019-7-5 21:45:20',5);
執行結果:

38.SUBTIME(expr1,expr2)
時間expr1減去expr2秒的時間
select SUBTIME('2019-7-5 21:45:20',5);
執行結果:

39.SYSDATE()
回傳當前日期和時間
40.TIME(expr)
提取傳入運算式的時間部分
select TIME('2019-4-5 14:26:20');
執行結果:
41.TIME_FORMAT(time,format)
按運算式format的要求顯示時間time
select TIME_FORMAT('2019-4-5 14:26:20','%r');
執行結果:

42.TIME_TO_SEC(time)
將時間time轉化為秒
select TIME_TO_SEC('14:26:20');
執行結果:

43.TIMEDIFF(expr1,expr2)
計算時間差值
select TIMEDIFF('14:26:20','15:26:20');
執行結果:

44.TIMESTAMP(expr1,expr2)
單個引數時,函式回傳日期或日期時間運算式;有兩個引數時,將引數加合
select TIMESTAMP('2019-4-5 14:26:20'),TIMESTAMP('2019-4-5','15:20:6');
執行結果:

45.TO_DAYS(date)
計算日期date距離0000年1月1日的天數
select TO_DAYS('2019-4-5 14:26:20');
執行結果:

46.WEEK(date)
計算日期date是本年的第幾個星期,范圍是0-53
select WEEK('2019-4-5 14:26:20');
執行結果:

47.WEEKDAY(date)
回傳日期date是星期幾
select WEEKDAY('2019-4-5 14:26:20');
執行結果:

48.WEEKOFYEAR(date)
計算日期date是本年的第幾個星期,范圍是0-53
select WEEKOFYEAR('2019-4-5 14:26:20');
執行函式:

49.YEAR(date)
回傳年份
50.YEARWEEK(date,mode)
回傳年份及第幾周(0-53),mode中0表示周末,1表示周一,2表示周二...
select YEARWEEK('2019-4-5',12);
執行結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/119320.html
標籤:MySQL
下一篇:關系資料模型要素之關系完整性約束
