一、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/truncateDQL:數據查詢語言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)唯一字段可以插入多個null3.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;
七、觸發器 作用:當操作了某張表時,希望同時觸發一些動作/行為,可以使用觸發器完成
--需求:當向員工表插入一條記錄時,希望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';新聞熱點
疑難解答