資料庫基礎知識

2021-10-08 19:18:39 字數 2963 閱讀 3965

sql語句

mysql 的常用引擎

char()和varchar()的主要區別是什麼?

1、char的長度是不可變的,而varchar的長度是可變的

欄位b:型別char(10), 值為:abc,儲存為:abc (abc+7個空格)

欄位d:型別varchar(10), 值為:abc,儲存為:abc (自動變為3個的長度)

2、超出長度自動擷取

欄位c:型別char(3), 值為:abcdefg,儲存為:abc(defg自動刪除)

欄位e:型別varchar(3), 值為:abcdefg,儲存為:abc (defg自動刪除)

3、var(10)和char(10),都表示可存10個字元,無論存放的是數字、字母還是utf8漢字(每個漢字3位元組),都可以存放10個

4、char最多可以存放255個字元

varchar的最大長度為65535個位元組,varchar可存放的字元數跟編碼有關

字元型別若為gbk,每個字元最多佔2個位元組,最大長度不能超過32766個字元

字元型別若為utf8,每個字元最多佔3個位元組,最大長度不能超過21845個字元

5、char和varchar的最大長度限制是mysql規定的

sql中on和where的區別

sql的各種連線join詳解

下面列出了您可以使用的 join 型別,以及它們之間的差異

join: 如果表中有至少乙個匹配,則返回行

left join: 即使右表中沒有匹配,也從左表返回所有的行

right join: 即使左表中沒有匹配,也從右表返回所有的行

full join: 只要其中乙個表中存在匹配,就返回行

理解group by

可是為了能夠更好的理解「group by」多個列「和」聚合函式「的應用,我建議在思考的過程中,由表1到表2的過程中,增加乙個虛構的中間表:虛擬表3。下面說說如何來思考上面sql語句執**況:

1.from test:該句執行後,應該結果和表1一樣,就是原來的表。

2.from test group by name:該句執行後,我們想象生成了虛擬表3,如下所圖所示,生成過程是這樣的:group by name,那麼找name那一列,具有相同name值的行,合併成一行,如對於name值為aa的,那麼<1 aa 2>與<2 aa 3>兩行合併成1行,所有的id值和number值寫到乙個單元格裡面。

3.接下來就要針對虛擬表3執行select語句了:

(1)如果執行select *的話,那麼返回的結果應該是虛擬表3,可是id和number中有的單元格裡面的內容是多個值的,而關聯式資料庫就是基於關係的,單元格中是不允許有多個值的,所以你看,執行select * 語句就報錯了。

(2)我們再看name列,每個單元格只有乙個資料,所以我們select name的話,就沒有問題了。為什麼name列每個單元格只有乙個值呢,因為我們就是用name列來group by的。

(3)那麼對於id和number裡面的單元格有多個資料的情況怎麼辦呢?答案就是用聚合函式,聚合函式就用來輸入多個資料,輸出乙個資料的。如cout(id),sum(number),而每個聚合函式的輸入就是每乙個多資料的單元格。

(4)例如我們執行select name,sum(number) from test group by name,那麼sum就對虛擬表3的number列的每個單元格進行sum操作,例如對name為aa的那一行的number列執行sum操作,即2+3,返回5,最後執行結果如下:

資料庫中的錶可通過鍵將彼此聯絡起來。主鍵(primary key)是乙個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重複每個表中的所有資料的情況下,把表間的資料交叉**在一起

sql primary key 約束

primary key 約束唯一標識資料庫表中的每條記錄。

主鍵必須包含唯一的值。

主鍵列不能包含 null 值。

每個表都應該有乙個主鍵,並且每個表只能有乙個主鍵。

example1表,裡面包含stu_id學號,course_id課程號,grade分數

example2表,裡面包含id,stu_id學號,course_id課程號,然後建立外來鍵

分別插入資料到兩個表中。

我們把example2中的stu_id和course_id稱為example2表的外來鍵,example1是父表,example2是字表,兩個表形成關聯,必須字表的資料刪除後,才能刪除父表中的對應資料

現在我們來刪除example1中的一條資料

delete from example1 where stu_id=2;

會發現報錯

error 1451 (23000): cannot delete or update a parent row: a foreign key constraint fails (test.example3, constraintf_ckforeign key (stu_id,course_id) referencesexample2(stu_id,course_id))

因為example2中的資料關聯了example1的資料,這樣是刪不了的,達到了外來鍵的作用;

然後我們來先刪除example2表中的資料,再刪除example1表中的資料

delete from example2 where stu_id=2;

delete from example1 where stu_id=2;

這樣就成功了;

資料庫基礎知識

資料定義 定義基本表 create table 表名 列名 資料型別 列級完整性約束條件 列名 資料型別 列級完整性約束條件 表級完整性約束條件 後面用到的表 1 學生 表 student 由學號 sno 姓名 sname 性別 s 年齡 sage 所在系 sdept 5個屬性組成,可記為 stud...

資料庫 基礎知識

e r模型 實體 聯絡模型 entity relationship model,e r模型 實體是指現實中區別於其他物件的一種 物體 或一件 事情 例如一名學生,乙個專案等等。同乙個型別中所有的實體被叫做實體集,對應於資料庫的一張表,乙個實體則對應於一條記錄。不同的任務之間,就是通過聯絡關係整合到一...

資料庫基礎知識

一 1 ddl 資料庫定義語句,建立資料表 dml 資料庫操作語言 dcl 資料控制語言 dql 資料查詢語言 2 資料查詢,sql語句 看課堂作業 查詢結果是表。3 聚集函式的一般格式 會使用 distinct all 列名 4 檢視 從乙個或幾個基本表 或檢視 匯出的表,與基本表不同,是乙個虛表...