国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

mysql知識點總結

2019-11-08 20:59:32
字體:
來源:轉載
供稿:網友

一、MySQL基礎 - 1)mysql存儲結構:數據庫->表->數據 sql語句 - 2)管理數據庫 增加:create database 數據庫 default character utf8; 刪除:drop database 數據庫; 修改:alter database 數據庫 default character gbk; 查詢:show databases / show create database 數據庫; - 3)管理表 選擇數據庫:use 數據庫 增加:create table 表 (字段名1 字段類型,字段名2 字段類型......); 刪除:drop table 表; 修改:添加字段:alter table 表 add[column]字段名 字段類型; 刪除字段:alter table 表 drop[column]字段名; 修改字段類型:alter table 表 modify 字段名 新的字段類型; 修改字段名稱:alter table 表 change 舊字段名 新字段名 字段類型 修改表名稱:alter table 表 rename[to] 新表名; 查詢:show tables / desc tableName; - 4)管理數據: 增加:insert into 表(字段1,字段2,。。。)values(值1,值2…..); 刪除:delete from 表 where 條件; 修改:update 表 set 字段 1 = 值 1,字段 2=值 2…..where 條件; 查詢: 4.1)所有字段:select * from 表; 4.2)指定字段:select 字段1,字段2…..from 表; 4.3)指定別名:select 字段1 as 別名 from 表; 4.4)合并列:select(字段1+字段2)from 表; 4.5)去重:select distinct 字段 from 表;` 4.6)條件查詢:

a)邏輯條件:and(與) or(或)select * from 表 where 條件 1 and/or 條件2;

b)比較條件:> < >= <= = <> between and(在……之間)select * from 表 where servlet >= 90;

c)判空條件:判斷 null:is null / is not null 判斷空字符串:=" / <>"

d)模糊條件:like %:替換任一個字符 —:替換一個字符 4.7)分頁查詢:limit 起始行,查詢行數 起始行從0開始 4.8)排序:order by 字段 asc/desc asc:正序 desc:倒序 4.9)分組查詢:group by 字段 4.10)分組后篩選:having 條件 二、SQL語句的分類:

DDL:數據定義語言create/drop/alterDML:數據操作語句insert/delete/update/truncate

DQL:數據查詢語言select/show 三、數據約束:對用戶操作表的數據進行約束

3.1默認值 作用:當用戶對使用默認值的字段不插入值的時候,就使用默認值 注意: 1)對默認值字段插入null是可以的 2)對默認值字段可以插入非null

3.2非空 作用:限制字段必須賦值 注意: 1)非空字符必須賦值 2)非空字符不能賦null 舉例–需求:gender字段必須有值(不為null) CREATE TABLE student( id INT, name VARCHAR(20), gender VARCHAR(2)NOT NULL--非空 ) --非空字段必須賦值 INSERT INTO student (id,name) VALUES(1,'李四'); --非空字符不能插入null INSERT INTO student(id,name,gender) VALUES(1,'李四',NULL); 3.3唯一UNIQUE 作用:對字段的值不能重復 注意: 1)唯一字段可以插入null 2)唯一字段可以插入多個null

3.4主鍵PRIMARY KEY 作用:非空+唯一 注意: 1)通常情況下,每張表都會設置一個主鍵字段,用于標記表中每條記錄的唯一性 2)建議不要選擇表的包含業務含義的字段作為主鍵,建議給每張表獨立設計一個非業務含義的id字段

3.5自增長 AUTO_INCREMENT --不能影響自增長約束 DELETE FROM student; --可以影響自增長約束 TRUNCATE TABLE student;

3.6外鍵FOREGIN KEY 注意: 1)被約束的表稱為副表,約束別人的表稱為主表,外鍵設置在副表上 2)主表的參考字段通用為主鍵 3)添加數據:先添加主表,再添加副表 4)修改數據:先修改副表,再修改主表 5)刪除數據:先刪除數據,再刪除主表

--聲明一個外鍵約束 CONSTRAINT 外鍵名 FOREIGN KEY(外鍵) REFERENCES 參考表(參考字段)ON UPODATE CASCADE ON DELETE CASCADE; 級聯修改: ON UPDATE CASCADE 級聯刪除: ON DELETE CASCADE

四、關聯查詢(多表查詢) 多表查詢規則:1)確定查詢哪些表 2)確定哪些字段 3)表與表之間連接條件(規律:連接條件數量是表數量-1) - 4.1交叉連接查詢(不推薦,產生笛卡爾積現象) - 4.2內連接查詢:只有滿足條件的結果才會顯示 - 4.3左外連接查詢:使用左邊表的數據去匹配右邊表的數據,如果符合連接條件的結果則顯示,如果不符合連接條件則顯示null 注意:左外連接:左表的數據一定會完成顯示

4.4右外連接查詢:使用右邊表的數據去匹配左邊表的數據,如果符合連接條件的結果則顯示,如果不符合連接條件則顯示null注意:右外連接:右表的數據一定會完成顯示

五、數據庫設計 設計原則:建議設計的表盡量遵守三大范式

第一范式:要求表的每個字段必須是不可分割的獨立單元第二范式:在第一范式的基礎上,要求每張表只表達一個意思。表的每個字段都和表的主鍵有依賴

第三范式:在第二范式的基礎上,要求每張表的主鍵之外的其他字段都只能和主鍵有直接決定依賴關系 六、存儲過程:帶有邏輯的sql語句

6.1存儲過程特點 1)執行效率非常快,存儲過程是在數據庫的服務端執行的 2)移植性很差,不同數據庫的存儲過程是不能移植

6.2存儲過程語法 DELIMITER $ --聲明存儲過程的結束符 CREATE PROCEDURE pro_test() --存儲過程名稱(參數列表) BEGIN --開始 --可以寫多個sql語句; --sql語句+流程控制 END $ --結束 結束符 --執行存儲過程 CALL pro_test(); --CALL存儲過程名稱(參數) 參數:IN:表示輸入參數,可以攜帶數據到存儲過程中 OUT:表示輸出參數,可以從存儲過程中返回結果 INOUT:表示輸入輸出參數,既可以輸入也可以輸出 帶有輸入參數的存儲過程 --需求:傳入一個員工id,查詢員工信息 DELIMITER $ CREATE PROCEDURE pro_findById(IN eid INT) --IN輸入參數 BEGIN SELECT * FROM employee WHERE id=eid; END $ --調用 CALL pro_findById(4); --刪除存儲過程 DROP PROCEDURE pro_findById;

6.3 mysql的變量 全局變量(內置變量):mysql數據庫內置的變量(所有連接都起作用) –查看所有全局變量:show variables –查看某個全局變量:select @@變量名 –修改全局變量:set 變量名=新值 –character_set_client:mysql服務器的接收數據的編碼 –character_set_results:mysql服務器輸出數據的編碼 會話變量:只存在于當前客戶端與數據庫服務器端的一次連接當中。如果斷開,那么會話變量全部丟失 –定義會話變量:set@變量=值 –定義一個會話變量name,使用name會話變量接收存儲過程的返回值 CALL pro_testOut(@NAME); –查看會話變量:select@變量 SELECT @NAME; 局部變量:在存儲過程中使用的變量叫局部變量,只要存儲過程執行完畢,局部變量就丟失--帶有條件判斷的存儲過程--需求:輸入一個整數,如果1,則返回“星期一”,如果2,返回“星期二”。其他數字返回“錯誤輸入”DELIMITER $CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))BEGIN IF num=1 THEN SET str='星期一'; ELSEIF num=2 THEN SET str='星期二'; ELSE SET str='輸入錯誤'; END IF;END $CALL pro_testIf(4,@str);SELECT @str;--帶有循環功能的存儲過程--需求:輸入一個整數,求和。例如,輸入100,統計1-100的和DELIMITER $CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)BEGIN --定義一個局部變量 DECLARE i INT DEFAULT 1; DECLARE vsum INT DEFAULT 0; WHILE i<=num DO SET vsum=vsum+i; SET i=i+1; END WHILE; SET result=vsum;END $DORP PROCEDURE pro_testWhile;CALL pro_testWhile(100,@result);SELECT @result;--使用查詢的結果賦值給變量(INTO)DELIMITER $CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR(20))BEGIN SELECT empName INTO vname FROM employee WHERE id=eid;END $CALL pro_findById2(1,@NAME);SELECT @NAME;

七、觸發器 作用:當操作了某張表時,希望同時觸發一些動作/行為,可以使用觸發器完成

--需求:當向員工表插入一條記錄時,希望mysql自動同時往日志表插入數據--創建觸發器(添加)CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW --當往員工表插入一條記錄時INSERT INTO test_log(content)VALUES('員工表插入了一條記錄');--插入數據INSERT INTO employee(id,empName,deptId)VALUES(7,'張三',1);INSERT INTO employee(id,empName,deptId)VALUES(8,'張三2',1);--創建觸發器(修改)CREATE TRIGGER tri_empUpd AFTER UPDATE ON emplyee FOR EACH ROW --當在員工表修改一條記錄時 INSERT INTO test_log(content)VALUES('員工表修改了一條記錄');--創建觸發器(刪除)CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW --當在員工表刪除一條記錄時 INSERT INTO test_log(content)VALUES('員工表刪除了一條記錄');

八、mysql權限問題 root:擁有所有權限

--修改密碼UPDATE USER SET PASSWord=PASSWORD('123456') WHERE USER='root';--分配權限賬戶GRANT SELECT ON day16.employee TO 'eric'@'localhost'IDENTIFIED BY'123456';GRANT DELETE ON day16.employee TO 'eric'@'localhost'IDENTIFIED BY'123456';
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰来县| 咸宁市| 大新县| 德格县| 聂荣县| 平利县| 新密市| 红河县| 长宁县| 涞源县| 五河县| 丁青县| 沙雅县| 高安市| 沁阳市| 庆安县| 田林县| 阜新| 哈密市| 古田县| 江油市| 塔城市| 天全县| 天津市| 南涧| 洪洞县| 封丘县| 同德县| 奎屯市| 武城县| 新和县| 庄河市| 固镇县| 根河市| 杭州市| 综艺| 潜江市| 五寨县| 文山县| 大冶市| 靖远县|