mysql+SQLyog

1.mysql中文字太多用text不用varchar(可變長,即可以根據實際的長度分配空間)。

2.數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。看成個倉庫。

3.用命令行的方式進入到mysql是:cd+空格+文件夾的名字(C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin,這是安裝mysql的位置,如果不是c盤,比如d盤,要先切換到d盤,用d:),然後輸入mysql -u root -p(每個單詞之間必須有空格),然後
輸入mysql的密碼(輸入密碼前先從服務裏面把mysql打開,不然會報錯說無法連接),我的是6543210,就會出現mysql>,然後就可以寫sql語句了。
如果不想出現輸入密碼的界面,就輸入mysql -u root ,然後輸入select host,user,password from mysql.user;可以查看mysql的密碼,整了半天,我筆記本mysql的密碼竟然是空,真是醉了。
比如,show databases;drop database db_book;create database db_book;(數據庫的命名規範,用db_開頭,注意create別漏掉e).
4.表是數據庫存儲數據的基本單位,一個表包含若干個字段或記錄。
一個字段一行,看起來方便。
創建圖書類別表t_bookType
CREATE TABLE t_bookType(
id int primary key auto_increment,
bookTypeName varchar(20),
bookTypeDesc varchar(200)

);
雖然已經創建了數據庫db_book了,但在把建表語句粘貼進去之前(先在文本中寫,在粘貼到命令行,因爲在命令行寫錯了就沒法刪了),要先執行use db_book;
(這個作爲外鍵,與表t_bookType裏的id 關聯)
創建圖書表t_book
CREATE TABLE t_book(
id int primary key auto_increment,
bookName varchar(20),
author varchar(10).
price decimal(6,2),
bookTypeId int,
constraint `fk` foreign key (`bookTypeId`) references `t_bookType`(`id`)

);
注意上面的不是單引號,是tab鍵上面的,這是mysql的要求。
單詞回憶:increment(增量),constraint(約束),concat(合併)
desc t_bookType可以查看錶結構。
show create table t_bookType;可以查看更加詳細的表信息,包括sql語句。

5.修改表:
修改表名:alter table t_bookType rename t_booktype2;
修改字段:alter table t_bookType2 bookTypeName bookTypeName2 varchar(20);

6.查詢的時候,where stuname like '張三%'或者'張三_'或者'%張三%'模糊查詢要會。 其中,%代表任意字符,_代表單個字符。
查詢空值:select 字段1,字段2 from 表名 where 字段 is null;
與GROUP_CONCAT合併函數一起使用
SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName;
聚合函數count(聚合函數一共五個,分別是count(),sum(),avg(),
max(),min())
SELECT COUNT(*) AS tatal FROM t_grade; 用別名,最後結果中就是total爲多少了。
1>SELECT stuName,course,MAX(score) FROM t_grade WHERE stuName="張三";
2>SELECT stuName,MAX(score) FROM t_grade GROUP BY stuName;(用group by 的時候,就不能像1>那樣來寫course了,因爲只能按一個來分組)
分組查詢:
SELECT gradeName,(這個逗號不要漏掉)COUNT(stuName) FROM t_student GROUP BY gradeName;
分頁查詢limit從第幾頁開始,共幾頁
SELECT * FROM t_student LIMIT 0,5;
SELECT * FROM t_student LIMIT 5,5;


SELECT gradeNameCOUNT(stuName)(聚合函數用來統計個數) FROM t_student GROUP BY gradeName HAVING COUNT(stuName)>3;

SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName WITH ROLLUP;(統計總的個人)
SELECT * FROM t_student LIMIT 0,5;(分頁查詢,select 字段1,地段2....from 表名 limit 初始位置,記錄數;)

7.在工具SQLyog中寫sql語句時,需要執行哪一句sql語句,就選中哪句執行就好了。

8.sql語句,建表的時候那種字段,都不是單引號?都是tab鍵上面的那個符號?但value裏面好像是單引號

9.SELECT  id,stuName,age,sex,gradeName FROM t_student;
SELECT * FROM t_student;
上面這兩種都是查詢所有的語句,區別是第一種可以更改順序,比如在表結構中希望哪個在第一列就放哪個在最前面。

10.在SQLyog中創建數據庫的時候,數據庫字符集和數據庫校對規則都選擇默認default,不用改。

11.點擊+裏的架構設計器,然後看主外鍵的關係,拖動。

12.SELECT * FROM t_book t WHERE t.id=1;這是爲表t_book取別名爲t。
SELECT t.bookName AS bName FROM t_book t WHERE t.id=1; 爲字段取別名,as可以省略,但爲了清晰,還是寫上吧。
插入數據:
INSERT INTO t_book(id,bookName,price,author,bookTypeId) VALUES (NULL,'我愛我家2',20,'張三',1),(NULL,'我愛我家3',20,'張三',1);
更新數據;
UPDATE t_book SET bookName='Java編程思想',price=120 WHERE id=1;

UPDATE t_book SET bookName='我' WHERE bookName LIKE '%我愛我家%';
13.索引:
索引定義:索引是由數據庫表中的一列或者多列組合而成,其作用是提高對錶中數據
的查詢速度,類似於圖書的目錄,方便快速定位,尋找指定的內容。優點:提高
查詢數據的速度;缺點:創建和維護索引的時間增加了。
創建單列索引:
CREATE TABLE t_user (id INT,
               username VARCHAR(20),
               PASSWORD VARCHAR(20),
               INDEX (username)

);
14.視圖:
視圖是一種虛擬的表,是從數據庫中一個或者多個表中導出來的表;數據庫中只存放了
視圖的定義,而並沒有存放視圖中的數據,這些數據存放在原來的表中。
使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據。
視圖的作用:
使操作簡便化;增加數據的安全性;提高表的邏輯獨立性。
創建視圖:
CREATE VIEW v2 AS SELECT bookName,price FROM t_book;
CREATE VIEW v2(b,p) AS SELECT bookName,price FROM t_book;這樣,bookName和price的名字就變成了b和p。
視圖是虛表,默認不準改。
多表視圖:
CREATE VIEW v4 AS SELECT bookName,bookTypeName FROM t_book,t_booktype WHERE t_book.bookTypeId=t_booktype.id;
建議用別名:CREATE VIEW v5 AS SELECT tb.bookName,tby.bookTypeName FROM t_book tb,t_booktype tby WHERE tb.bookTypeId=tby.id;
查看視圖v1:DESC v1;

SHOW TABLE STATUS LIKE 'v1';這樣查到的信息可以看到除了名字,其他均爲空,說明是虛表。
SHOW CREATE VIEW v1;可以查出建表的詳細信息,包括編碼啥的。
對視圖進行更新其實就是對錶進行更新。刪除視圖時,不會影響數據。
DROP VIEW IF EXISTS v1;刪除視圖。
觸發器(trigger)是由事件來出發某個操作。這些事件包括insert語句,
update語句和delete語句。當數據庫系統執行這些事件時,就會
激活觸發器執行相應的操作。
通過觸發器可以實現比如往t_book裏面insert一條數據,在t_booktype裏面的數量就會相應的增加。

1.CREATE TRIGGER trig_book AFTER INSERT
     ON t_book FOR EACH ROW
        UPDATE t_bookType SET bookNum=bookNum+1 WHERE new.bookTypeId=t_booktype.id;
       
       
INSERT INTO t_book VALUES(NULL,'java好',100,'ke',1);

2、delimiter 是分界符,不然執行的時候遇到;就會結束執行了。
DELIMITER |
CREATE TRIGGER trig_book2 AFTER DELETE
    ON t_book FOR EACH ROW
    BEGIN
       UPDATE t_bookType SET bookNum=bookNum-1 WHERE old.bookTypeId=t_booktype.id;
       INSERT INTO t_log VALUES(NULL,NOW(),'在book表裏刪除了一條數據');
       DELETE FROM t_test WHERE old.bookTypeId=t_test.id;
    END
|
DELIMITER ;

DELETE FROM t_book WHERE id=5;

SHOW TRIGGERS;

DROP TRIGGER trig_book2 ;
15.mysql的常用函數有個手冊,需要用什麼的時候去查。

16.加密函數:
1.password(str),一般是對用戶的密碼加密,不可逆(加密後,不可還原)
2.MD5(str) 普通加密,不可逆。
3.encode(str,pswd_str),加密函數,結果是一個二進制數,必須使用BLOB類型的
字段來保存它。
4.decode(crypt_str,pswd_str)解密函數。
INSERT INTO t_t VALUES(NULL,'2013-1-1','a',1,MD5('123456'));

INSERT INTO t_t VALUES(NULL,'2013-1-1','a',1,MD5('123456'),ENCODE('abcd','aa'));aa類似於一把鑰匙。

SELECT DECODE(pp,'aa') FROM t_t WHERE id=5;
INSERT INTO t_t VALUES(NULL,'2022-02-09','caofwe',2,PASSWORD('6543210'));得到的密碼就是這種*2437A328FF22FC8D4C8。

17.存儲過程和函數
存儲過程和函數是在數據庫中定義的一些SQL語句的集合,然後
直接調用這些存儲過程和函數來執行已經定義好的SQL語句。存儲
過程和函數可以避免開發人員重複的編寫相同的SQL語句。而且,
存儲過程和函數是在MySQL服務器中存儲和執行的,可以減少客戶端和服務器
的數據傳輸。
DELIMITER &&
CREATE PROCEDURE pro_book ( IN bT INT,OUT count_num INT)
   READS SQL DATA
   BEGIN
     SELECT COUNT(*) FROM t_book WHERE bookTypeId=bT;
   END
   &&
DELIMITER ;

CALL pro_book(1,@total);調用存儲過程


DELIMITER &&
CREATE FUNCTION func_book (bookId INT)
RETURNS VARCHAR(20)
BEGIN
  RETURN ( SELECT bookName FROM t_book WHERE id=bookId );
END
    &&
DELIMITER ;

SELECT func_book(2);調用函數

發佈了42 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章