MySQL必知必會

来源:https://www.cnblogs.com/Annona/p/18019530
-Advertisement-
Play Games

一、Mysql 1、什麼是資料庫? (1)資料庫(database) 資料庫是保存有組織的數據的容器(通常是一個文件或一組文件),資料庫是DBMS(資料庫管理系統或資料庫軟體)創建和操作的容器; (2)表、列、行、主鍵、數據類型分別是什麼 ①表:表是由某些特定的欄位組成的統一的結構化的存儲數據的容器 ...


一、Mysql

1、什麼是資料庫?

(1)資料庫(database)

資料庫是保存有組織的數據的容器(通常是一個文件或一組文件),資料庫是DBMS(資料庫管理系統或資料庫軟體)創建和操作的容器;

(2)表、列、行、主鍵、數據類型分別是什麼

①表:表是由某些特定的欄位組成的統一的結構化的存儲數據的容器;

②列:列是組成表結構的最基本的單位;

③行:一行表示一條資料庫記錄,存儲著記錄信息;

④主鍵:主鍵是由資料庫表中的一列或者多個列組成的,主鍵需要唯一;主鍵不能為空,主鍵

⑤數據類型:表中的每一個列,定義時都需要設定數據類型;

(3)SQL與SQL的編寫規則(大概規則)

①SQL是專門與資料庫實現通信的統一語言,但是不同的DBMS的SQL會有小的差異,不會完全相同;

②SQL編寫規範

a)SQL語言不區分大小寫,但是一般SQL開發人員,關鍵字使用大寫,表名和列名使用小寫;

b)在SQL語句中,空格都會忽略掉,所有一般開發人員為了方便讀和調試會對SQL語句進行換行;

2、Mysql中一些常用的語句

(1)use:表示切換到需要的資料庫

①use databasename:切換到databasename資料庫;如果使用命令行連接Mysql資料庫,需要使用該語句才能切換到對應的資料庫

(2)show:展示資料庫服務中的信息,相當於查看的功能;

①show databases:查看資料庫服務中的所有資料庫;

②show tables:查看資料庫服務中的所有表;

③show colums from tablename:查看表結構中所有欄位;

④show status:顯示伺服器的狀態信息;

⑤show grants:顯示當前登錄用戶的許可權信息;

⑥show warnings:顯示伺服器警告信息;

⑦show errors:顯示伺服器錯誤信息;

⑧net start/stop mysqlname:開啟或者關閉mysql服務;

⑨show global variables like 'port':查看服務開啟的埠;

⑩flush privileges:刷新緩存;

3、表結構的增刪改查

(1)創建表:CREATE TABLE TABLENAME

①創建表基本語句

CREATE TABLE tablename(
columname type 約束條件 comment '欄位名字'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表名';

CREATE TABLE IF NOT EXISTS tablename(
columname type 約束條件 COMMENT '欄位名字'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表名';

②創建表時常用的約束條件

a)主鍵(PRIMARY KEY)
b)外鍵(constraints foreign_key_idname foreign key(column) references tablename(columnname))
c)不為空(NOT NULL)
d)自增(AUTO_INCREMENT) e)預設值(DEFAULT) f)欄位備註信息(COMMENT)

③實例

CREATE TABLE IF NOT EXISTS customers
(
  cust_id      int       NOT NULL  AUTO_INCREMENT COMMENT '顧客ID',
  cust_name    char(50)  NOT NULL comment '顧客名',
  cust_address char(50)  COMMENT '顧客的地址',
  cust_city    char(50)  COMMENT '顧客的城市',
  cust_state   char(5)   COMMENT '顧客的州',
  cust_zip     char(10)  COMMENT '顧客的郵政編碼',
  cust_country char(50)  COMMENT '顧客的國家',
  cust_contact char(50)  COMMENT '顧客的聯繫名',
  cust_email   char(255) DEFAULT '[email protected]'COMMENT '顧客的聯繫email地址',
  PRIMARY KEY(cust_id)
) ENGINE=InnoDB COMMENT='顧客表';

④自增AUTO_INCREMENT相關

a)每個表只能有一個列上加AUTO_INCERMENT,且該欄位必須被索引上;

b)如果在insert時設置了自增的值,則自增的值會被手工設置的值覆蓋,且後續自增的值從手工設置的值往後增;

c)在Mysql中可以使用select last_insert_id()查看自增量的最後一個值;

⑤引擎

a)InnoDB:該引擎是可靠的事務處理引擎,但是不支持全文本搜索;

b)MEMORY:等同於MyISAM,由於是存儲與記憶體所以速度較快,適用於臨時表;

c)MyISAM:性能極高,支持全文本搜索,但是不支持事務;

(2)修改表:ALTER TABLE TABLENAME 
ALTER TABLE TABLENAME 後續的操作;
ALTER TABLE TABLENAME ADD COLUMN COLUMNNAME INT;
ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME;
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME NEWTYPE;
ALTER TABLE TABLENAME RENAME COLUMNNAME TO NEWCOLUMNNAME;
(3)刪除表:DROP TABLE TABLENAME
DROP TABLE TABLENAME;
RENAME TABLE TABLENAME TO NEWTABLENAME,TABLENAME1 to NEWTABLENAME1; 

4、表數據的增刪改查

(1)插入數據:INSERT INTO TABLENAME...
INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) VALUES(VALUE1,VALUE2,VALUE3,...);

INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) VALUES(VALUE1,VALUE2,VALUE3,...),(VALUE1,VALUE2,VALUE3,...),...;

INSERT LOW_PRIORITY ...;

INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) SELECT VALUE1,VALUE2,VALUE3,... FROM TABLENAME1;
(2)更新數據:UPDATE TABLENAME SET...
UPDATE TABLENAME SET COLUMNNAME='NEWVALUE' ;

UPDATE TABLENAME SET COLUMNNAME='NEWVALUE' WHERE ...;

UPDATE TABLENAME SET COLUMNNAME='NEWVALUE',COLUMNNAME1='NEWVALUE1' WHERE ...;

UPDATE IGNORE TABLENAME SET COLUMNNAME='NEWVALUE' WHERE ...;如果存在錯誤時,忽略錯誤,繼續往下執行
(3)刪除數據:DELETE FROM TABLENAME...
DELETE FROM TABLENAME WHERE...;刪除表中的特定行或所有行

TRUNCATE TABLENAME;--刪除表中所有的數據,且直接提交不能回滾

5、查詢資料庫

(1)檢索數據

a)DISTINCT
SELECT DISTINCT COLUMNNAME FROM TABLENAME;

SELECT DISTINCT COLUMNNAME,COLUMNNAME1 FROM TABLENAME;

SELECT DISTINCT *FROM TABLENAME; --過濾掉完全相同的行,或者把所有隻要存在一個內容不同的數據都查詢出來;

b)LIMIT

SELECT *FROM TABLENAME LIMIT 5;--查詢小於等於5條數據

SELECT *FROM TABLENAME LIMIT 5,5;--查詢從行5開始往後的5條或5條以內的數據

SELECT *FROM TABLENAME LIMIT 5 offset 5;--同上

(2)排序數據:ORDER BY COLUMNNAME 

SELECT *FROM TABLENAME ORDER BY COLUMNNAME ;--預設是按照升序排列的(ASC)

SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC ;--設置降序

SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC,COLUMNNAME DESC;--如果需要按照多個列排序,中間使用逗號隔開,多個列都需要降序的話多個列都需要加DESC

(3)過濾數據:WHERE

SELECT *FROM TABLENAME WHERE COLUMNNAME...;

SELECT *FROM TABLENAME WHERE COLUMNNAME BETWEEN ... AND ...;

SELECT *FROM TABLENAME WHERE COLUMNNAME> ... AND ;

SELECT *FROM TABLENAME WHERE COLUMNNAME< ... OR ...;

SELECT *FROM TABLENAME WHERE COLUMNNAME<= ... OR ...;

SELECT *FROM TABLENAME WHERE COLUMNNAME>= ... OR ...;

SELECT *FROM TABLENAME WHERE COLUMNNAME= ... OR ...;

SELECT *FROM TABLENAME WHERE COLUMNNAME!= ... OR ...;

SELECT *FROM TABLENAME WHERE COLUMNNAME<> ... OR ...;

SELECT *FROM TABLENAME WHERE COLUMNNAME IS NULL;

SELECT *FROM TABLENAME WHERE COLUMNNAME IS NOT NULL;

SELECT *FROM TABLENAME WHERE COLUMNNAME IN(...);

(4)使用通配符和正則表達式查詢數據:LIKE&REGEXP

通配符:
SELECT *FROM TABLENAME WHERE COLUMNNAME LIKE '%jack';--%匹配任意多個字元
SELECT *FROM TABLENAME WHERE COLUMNNAME LIKE '_jack';--%匹配單個字元

正則表達式: SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP 'jack';--表示匹配COLUMNNAME列中包含jack的行;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP 'jack|jack1';--表達式中的|表示或者;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '.jack';--表達式中的.表示匹配任意字元;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[123]ton';--表達式中的[]表示匹配[]中的任意字元,表示或的意思;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[1-9]ton';--表達式中的[1-9a-z]表示匹配1-9,a-z中的任意數字或者字母;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '\\.'--表達式中\\表示轉義,若特殊字元. - []這些內容,可以在前面加上轉義字元表示查詢特殊字元內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]*';--表達式中的*表示匹配0個或者多個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]+';--表達式中的+表示匹配1個或者多個內容;
SELECT *FROM TABLENAME WHERE COULMNNAME REGEXP '[0-9]?';--表達式中的?表示匹配0個或者1個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n,m}';--表達式中的{n,m}表示匹配n到m之間個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n,}';--表達式中的{n,}表示匹配大於等於n個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n}';--表達式中的{n}表示匹配n個內容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '^main';--表達式中的^表示匹配開頭;
SELECT *FROM TBALENAME WHERE COLUMNNAME REGEXP '$main';--表達式中的$表示匹配結尾;

(5)Mysql的內置函數

①計算欄位
SELECT CONCAT(COLUMNNAME ,'(',COLUMNNAME,')') AS COLUMNNAMENEW FROM TABLENAME;
②去除空格欄位
SELECT RTRIM(COLUMNNME) FROM TABLENAME;
SELECT LTRIM(COLUMNNAME)FROM TABLENAME; ③使用別名
SELECT AVG(COULUMNAME) as COLUMNNAME1 FROM TABLENAME; ④執行算數計算 +\-\*\/
SELECT COLUMNNAME*2,FROM TABLENAME; ⑤使用數據處理函數 ABS--絕對值
PI--Π
Sqrt--返回數的平方根
Sin--正弦
Cos--餘弦
Tan--正切 ⑥聚集函數 a)AVG:返回指定COLUMNNAME的平均值; SELECT AVG(COLUMNNAME)FROM TABLENAME;
SELECT AVG(COLUMNNAME) AS COLUMNNAME1 FROM TABLENAME;
b)SUM:返回指定列值的總和;
SELECT SUM(COLUMNNAME) FROM TABLENAME;
c)COUNT:返回表中行數數量; SELECT COUNT(*) FROM TABLENAME;--返回表中行數數量,包括NULL的行
SELECT COUNT(COLUMNNAME)FROM TABLENAME;--返回表中行數數量,不包括指定COLUMNNAME為NULL的;
d)MIN和MAX:查詢表中特特定列值的最大或者最小值;
SELECT MIN(COLUMNNAME) FROM TABLENAME;
SELECT MAX(COULUNNAME) FROM TABLENAME;

(6)分組數據

SELECT COLUMNNAME FROM TABLENAME GROUP BY COLUMNNAME ORDER BY COLUMNAME1 DESC;(在ORDER BY後面的COLUMNNAME可以不是GROUP BY後面的COLUMNNAME,但是根據規範最好是,如下語句)
SELECT COULMNNAME FROM TABLENAME GROUP BY COLUMNNAME ORDER BY COLUMNNAME DESC;
GROUP BY語句使用註意事項 ①GROUP BY 語句在WHERE之後,ORDER BY之前 ②在SELECT語句中使用GROUP BY時,需要查詢展示的列在GROUP BY中必須也要有,不然查詢出來的結果會不准確;如果在SELECT 中使用表達式,在GROUP BY中也必須使用表達式,不能使用別名;聚集函數可以在SELECT中存在,但是在GROUP BY中不存在; ③如果分組中存在NULL值,則NULL分為單獨一組,多個NULL值分為一組;

HAVING過濾分組
WHERE過濾行而HAVING過濾分組,WHERE在分組之前過濾,HAVING在分組之後過濾;

SELECT COLUMNNAME,COUNT(*) FROM TABLENAME GROUP BY COLUMNNAME HAVING COUNT(*)>8;
SELECT COLUMNANME,COUNT(*) FROM TABLENAME WHERE COLUMNANEM ='' GROUP BY COLUMNNAME HAVING COUNT(*)>8;

Mysql中的關鍵字的順序:
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT;

(7)子查詢

SELECT *FROM TABLENAME WHERE COLUMNNAME IN (SELECT COLUMNNAME FROM TABLENAME1 WHERE COLUMNNAME1='')

SELECT COLUMNNAME (SELECT COUNT(*) FROM TABLENAME WHERE ......s)AS COLUMNNAME FROM TABLENAME ;

(8)組合查詢

組合查詢:執行多個SELECT 查詢語句,並將結果作為單個結果集返回,使用UNION關鍵字將多個SELECT 查詢結果集組合成一個結果集返回;

SELECT COLUMNNAME,COLUMNNAME1 FROM TABLENAME UNION SELECT COLUMNNAME2,COLUMNNAME3 FROM TABLENAME1;

UNION規則
①UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔;
②UNION中的每個查詢必須包含相同的列、表達式或聚集函數;
③列數據類型必須相容:類型不必完全相同,但必須是DBMS可以隱含地轉換的類型(例如,不同的數值類型或不同的日期類型);
④使用UNION時預設取消掉了重覆行,如果需要不取消重覆行需要使用UNION ALL;
⑤如果需要對UNION的結果排序,只需要在最後一個SELECT 查詢語句後面加上ORDER BY即可;

(9)Mysql中的連接方式

①內連接

a)內連接:自然連接(Naturaljoin)是一種特殊的等值連接,它要求兩個關係中進行比較的分量必須是相同的屬性組,並且在結果中把重覆的屬性列去掉;
SELECT *FROM TABLENAME INNER JOIN TABLENAME1 ON TABLENAME.COLUMNNAME = TABLENAME.COLUMNNAME;(比較的分量必須是相同的屬性組)
b)等值連接:等值連接是關係運算-連接運算的一種常用的連接方式。是條件連接(或稱θ連接)在連接運算符為“=”號時,即θ=0時的一個特例
SELECT *FROM TABLENAME,TABLENAME1 WHERE TABLENAME.COLUMNNAME=TABLENAME1.COLUMNNAME;

②外連接

a)左連接:LEFT JOIN或LEFT OUTER JOIN
SELECT *FROM TABLENAME LEFT OUTER JOIN TABLENAME1 ON TABLENAME.COLUMNNAME=TABLENAME1.COLUMNNAME;
b)右連接:RIGHT JOIN 或 RIGHT OUTER JOIN
SELECT *FROM TABLENAME AS T RIGHT OUTER JOIN TABLENAME1 AS T1 ON T.COLUMNNAME=T1.COLUMNNAME;
c)全連接:FULL JOIN 或 FULL OUTER JOIN
SELECT *FROM TABLENAME AS T FULL OUTER JOIN TABLENAME1 AS T1 ON T.COLUMNNAME=T1.COLUMNNAME;(Mysql不支持)

(10)全文本搜索

①什麼是全文本搜索
a)Mysql中最常用的引擎就是MyISAM和InnoDB搜索引擎,前者支持全文本搜索,後者不支持;
b)為了進行全文本搜索,必須索引被搜索的列,而且要隨著數據的改變不斷地重新索引;若在創建表是進行適當的設置,Mysql就會自動進行索引和重新索引;
c)創建表時設置全文本搜索
CREATE TABLE TABLENAME(
COLUMNNAME TYPE,
FULLTEXT(COLUMNNAME)
)
②進行全文本搜索的基本語法:Match()和Against()
a)其中Match()指定被搜索的列,Against()指定要使用的搜索表達式;(一般不區分大小寫)
b)傳遞給Match的值必須必須要與FULLTEXT中定義的一致,且如果定義了多列則次序也需要一致;
c)全文本搜索會自動根據搜索的匹配優先順序排序列出結果;
SELECT *FROM TABLENAME MATCH(COLUMNNAME) AGAINST('需要搜索的內容');

③進行全文本搜索的更高級語法
a)使用擴展查詢
SELECT *FROM TABLENAME MATCH() AGAINST('需要搜索的內容' with query expansion);
b)布爾文本搜索
SELECT *FROM TABLENAME MATCH AGAINST('需要搜索的內容' IN BOOLEAN MODE)
SELECT *FROM TABLENAME MATCH AGAINST('a +b' IN BOOLEAN MODE);--+表示包含,必須存在+後面的內容;
SELECT *FROM TABLENAME MATCH AGAINST('a -b' IN BOOLEAN MODE);---表示不包含,必須不存在+後面的內容;
SELECT *FROM TABLENAME MATCH AGAINST('a >b' IN BOOLEAN MODE);-->表示包含,而且增加等級;
SELECT *FROM TABLENAME MATCH AGAINST('a <b' IN BOOLEAN MODE);--<表示包含,而且減少;
SELECT *FROM TABLENAME MATCH AGAINST('a (bbbb)' IN BOOLEAN MODE);--()把片語成表達式;
SELECT *FROM TABLENAME MATCH AGAINST('a b*' IN BOOLEAN MODE);--*表示匹配詞尾的表達式;

(11)視圖

①創建視圖
CREATE VIEW VIEWNAME AS
SELECT COLUMNNAME,COLUMNNAME1 FROM TABLENAME WHERE  COLUMNNAME='';
②刪除視圖
DROP VIEW VIEWNAME;
③修改視圖
視圖一般是在不修改,直接先刪除視圖再重新創建視圖;
CREATE OR REPLACE VIEW VIEWNAME AS SELECT ...;
④查詢視圖
SELECT *FROM VIEWNAME;--查詢視圖整體的語法與查詢表的視圖一致 

(12)事務

①什麼是事務
a)事務可以用來維護資料庫的完整性,保證成批的Mysql操作要麼完全執行要麼完全不執行;
b)事務中的關鍵字:事務(transaction)、回退(rollback)、提交(commit)、保留點(savepoint)
②事務的相關操作語法
SELECT *FROM TABLENAME;
START TRANSACTION;
DELETE FROM TABLENAME WHERE COLUMNNAME=''
SAVEPOINT SAVEPOINTNAME1;
DELETE FROM TABLENAME WHERE COLUMNNAME=''
SAVEPOINT SAVEPOINTNAME2;
ROLLBACK TO SAVEPOINT1;
COMMIT;
c)Mysql中可以查看或者設置是否自動提交
SELECT @@AUTOCOMMIT;--0為不自動提交,1為自動提交;

(13)存儲過程

①什麼是存儲過程
a)可能存在一個完整的操作需要多個SQL語句才能完成,可以用存儲過程實現;
b)為之後的使用而保存的一條或者多條SQL語句的結合,可以視為批處理文件;
②操作存儲過程
a)創建存儲過程
CREATE PROCEDURE PROCEDURENAME()
BEGIN
   需要處理的多條語句
END;
b)刪除存儲過程
DROP PROCEDURE IF EXISTS PROCEDURENAME;
DROP PROCEDURE PROCEDURENAME;
c)調用存儲過程
CALL PROCEDURENAME()
d)查看存儲過程
SHOW CREATE PROCEDURE PROCEDURENAME;
SHOW PROCEDURE STATUS;
③創建帶參數的存儲過程
a)創建
CREATE PROCEDURE PROCEDURENAME(
OUT max_columnname decimal(10,2),
OUT avg_columnname decimal(10,2),
OUT min_columnname decimal(10,2)
)
BEGIN
SELECT MAX(COLUMNNAME) INTO max_columnname FROM TABLENAME;
SELECT AVG(COLUMNNAME) INTO avg_columnname FROM TABLENAME;
SELECT MIX(COLUMNNAME) INTO min_columnname FROM TABLENAME;
END;
b)調用
CALL PROCEDURENAME(@max_columnname,@avg_columnname,@min_columnname);
select @lowp;
④創建更加智能的存儲過程
a)創建帶IN和OUT的存儲過程
CREATE PROCEDURE PROCEDURENAME(
IN columnname decimal(10,2),
OUT columnname1 decimal(10,2)
)
BEGIN
SELECT SUM(columnname) FROM TABLENAME WHERE TABLENAME.columnname=columnname INTO  columnname1;
END;
CALL PROCEDURENAME(a,@columnname1);
b)創建更加智能的存儲過程
CREATE PROCEDURE PROCEDURENAME(
IN columnname1 INT,
IN columnname2 BOOLEAN,
OUT columnname3 DECIMALE(10,2)
)
BEGIN
DECLARE  columnname_3 DECIMALE(10,2);
DECLARE  columnname_2 INT DEFAULT 6;
SELECT SUM(item_price*quantity) FROM TABLENAME INTO columnname_3;
IF columnanme2 then 
    SELECT columnname_3+(columnname_3*columnname_2/100) INTO columnname_3;
END IF;
SELECT columnname_3 INTO columnname3;
END;

(14)觸發器 

①什麼是觸發器
a)在某個表發生更改時自動處理的某一邏輯就是觸發器;
b)Mysql中的觸發器就是在進行DELETE/UPDATE/INSERT操作時自動執行的一條語句;
②操作觸發器基本語句
a)創建觸發器語句
CREATE TRIGGER TRIGGERNAME BEFORE/AFTER INSERT/UPDATE/DELETE ON TABLENAME
FOR EACH ROW SELECT 'PRODUCT ADDED' INTO @TEST;
b)刪除觸發器
DROP TRIGGER TRIGGERNAME;
③操作觸發器更高級語句
a)INSERT觸發器
CREATE TRIGGER TABLENAME AFTER INSERT ON TABLENAME 
FOR EACH ROW SELECT NEW.COLUMNNAME INTO @TESTCOLUMNNAME;
INSERT INTO orders(ORDER_DATE, CUST_ID)
VALUES( NOW(), 10004);
SELECT @TESTCOLUMNNAME;
b)DELETE觸發器
CREATE TRIGGER TRIGGERNAME BEFORE DELETE ON TABLENAME
FOR EACH ROW
INSERT INTO ARCHIVE_TABLE(COLUMNNAME1,COLUMNNAME2,COLUMNNAME3) VALUES(OLD.COLUMNNAME1,OLD.COLUMNNAME2,OLD.COLUMNNAME)
BEGIN
END;
SELECT *FROM ARCHIVE_TABLE;
DELETE FROM TABLENAME WHERE COLUMNNAME='' c)UPDATE觸發器:引用名為OLD的虛擬表訪問update之前的值,引用NEW的虛擬表訪問update之後的表;

CREATE TRIGGER TRIGGERNAME BEFORE UPDATE ON TABLENAME
FOR EACH ROW SELECT NEW.COLUMNNAME = (NEW.COLUMNNAME)INTO @UPDATE;
d)NEW虛擬表中的數據可能會更新,OLD中的值全都是只讀的,不能更新;
④創建觸發器的規則
a)觸發器名需要唯一(觸發器名必須在每個表中唯一,但是設計的時候最好在同一個資料庫內唯一);需要規定觸發器關聯的表;
b)觸發器需要響應的和時間:INSERT/DELETE/UPDATE,AFTER/BEFORE;
c)只有表才支持觸發器,視圖或者臨時表不支持觸發器;
d)每個表每個事件每次只允許一個觸發器,所有每個表最多只支持6個觸發器;
e)如果BEFORE觸發器失敗,則MySQL將不執行請求的操作。此外,如果BEFORE觸發器或語句本身失敗,MySQL將不執行AFTER觸發器(如果有的話)

(15)安全管理

①管理賬戶
a)查看用戶
SELECT *FROM USER;
b)創建用戶
CREATE USER USERNAME IDENTIFIED BY 'password'
c)刪除用戶
DROP USER USERNAME;
d)重命名用戶
RENAME USER USERNAME TO USERNAME1;
e)修改密碼
SET PASSWORD FOR USERNAME =PASSWORD('aaaaaa')
②設置、收回許可權
a)查看用戶許可權
SHOW GRANTS FOR USERNAME;
b)設置許可權
GRANT ALL ON DATEBASENAME.* TO USERNAME;
GRANT SELECT ON DATEBASENAME.* TO USERNAME;
GRANT SELECT,INSERT,ALTER ON DATEBASENAME.* TO USERNAME;
c)收回許可權
REVOKE ALL ON DATEBASENAME.* TO USERNAME;
REVOKE SELECT ON DATEBASENAME.* TO USERNAME;
REVOKE SELECT,INSERT,ALTER ON DATEBASENAME.* TO USERNAME;

(16)字元集和校對順序

①查看所有的字元集和校對順序
a)SHOW CHARACTER SET;
b)SHOW COLLATION;
②在創建表是設定字元集和校對順序
CREATE TABLE TABLENAME(
COLUMNNAME INT,
COLUMNNAME1 VARCHAR(10)
)default character set hebrew
collate hebrew_general_ci;
③在特定的列加上字元集和校對順序
CREATE TABLE TABLENAME(    
COLUMNNAME INT,
COLUMNNAME1 VARCHAR(10) character set hebrew collate hebrew_general_ci
);
④在使用SELECT語句時加上字元集和校對順序
SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC collate latin1_general_cs;

(17)游標(等後續學習的更加透徹再更新)

二、Oracle(後續更新)

三、SQL SERVER(後續更新)

四、Redis(後續更新)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近看幾個老項目的SQL條件中使用了1=1,想想自己也曾經這樣寫過,略有感觸,特別拿出來說道說道。編寫SQL語句就像炒菜,每一種調料的使用都會影響菜品的最終味道,每一個SQL條件的加入也會影響查詢的執行效率。那麼 1=1 存在什麼樣的問題呢?為什麼又會使用呢? ...
  • 背景 在瀏覽器中訪問本地靜態資源html網頁時,可能會遇到跨域問題如圖。 是因為瀏覽器預設啟用了同源策略,即只允許載入與當前網頁具有相同源(協議、功能變數名稱和埠)的內容。 WebView2預設情況下啟用了瀏覽器的同源策略,即只允許載入與主機相同源的內容。所以如果我們把靜態資源發佈到iis或者通過node ...
  • 1、calc:啟動計算器 2、appwiz.cpl:程式和功能 3、certmgr.msc:證書管理實用程式 4、charmap:啟動字元映射表 5、chkdsk.exe:Chkdsk磁碟檢查(管理員身份運行命令提示符) 6、cleanmgr: 打開磁碟清理工具 7、cliconfg:SQL SER ...
  • 迪文屏TA指令開發_開機動畫 1. 新建項目 新建一個空白文件夾,點擊新建工程之後選擇新建文件夾地址即可 創建完成之後,文件夾結構如下: 2. 導入背景圖片素材 說是設置開機動畫,實際上是通過多個背景圖片的連續播放實現的動畫效果 點擊加號鍵,可以直接選中所有的背景圖片素材進行一鍵導入 3. 設置控制項 ...
  • 介紹 Windows Server 2025 為 Hyper-V 帶來了多項增強功能和新的存儲特性,主要用於優化虛擬機的運行體驗。這些新特性涵蓋 GPU 虛擬化、新的 ReFS 去重功能,以及在非 AD 域的集群上進行虛擬機實時遷移。 雲桌面方案的用戶最關心的GPU-P的技術也將在Windows S ...
  • 背景 在GreatSQL主從複製環境中,有時候可能會出現一些誤操作,將本應該寫入到主庫的數據寫入到了從庫,導致主從數據不一致,影響數據同步。是否可以將寫入從庫的數據同步寫入主庫呢? 測試環境 角色 IP地址 資料庫開放埠 版本 主庫 192.168.137.179 3308 GreatSQL 8. ...
  • 本文分享自華為雲社區《GaussDB資料庫SQL系列-游標管理》,作者:酷哥。 一、前言 在資料庫中,游標(cursor)是一種非常重要的工具,用於在資料庫查詢結果集中進行定位和操作。游標提供了一種在多行數據結果集中逐行處理每一行的機制,允許開發人員對每一行的數據進行操作,如檢索、過濾、修改等。本文 ...
  • <!-- 密碼突然登錄不上MySQL了,久了也不曉得是不是密碼不正確...只能改密碼...一年難得碰一次,感覺每次總有莫名其妙的問題 --> <!-- 修改方案只找到一個,就是無密碼驗證開啟mysql服務,然後登錄,設置新密碼 --> <!-- mysql版本不同有些命令無效,大概分高低兩版本 -- ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...