數據庫基礎_1/2

1.表操作

1.1 表的設計理念

  1. 第一範式:每個列不可分割
  2. 第二範式:實體的每個屬性都和主鍵完全依賴
  3. 第三範式:每列都和主鍵列直接相關

1.2 表操作

查看數據庫
show databases;
選擇數據庫
use dname;
創建表結構
create table tname{屬性名 數據類型 完整性約束條件}
查看錶詳細定義
show create table tname
查看錶定義
describe tname
刪除表
drop table tname
修改表名稱
alter table tname rename (to) newtname

1.3 字段操作

添加字段

  1. 末尾處添加:alter table tname add 屬性名 屬性類型
  2. 第一行添加:alter table tname add 屬性名 屬性類型 first
  3. 指定字段之後:alter table tname add 屬性名 屬性類型 after 指定屬性名
    刪除字段
    alter table tablename drop 屬性名
    修改字段
  • 修改數據類型:alter table tname modify 屬性名 屬性類型
  • 修改字段名稱:alter table tname change 屬性名 新屬性名 數據類型
    修改字段名稱和數據類型
    alter table tname change 屬性名 新屬性名 新數據類型
    修改字段順序
    alter table modify 屬性 數據類型 first(after 指定屬性名)
    約束條件
  • 非空nk:屬性名 數據類型 not null
  • 默認值:屬性名 數據類型 default 默認值
  • 唯一性uk:屬性名 數據類型 unique
  • 主鍵pk
    單一主鍵:屬性名 數據類型 primary key
    組合主鍵:constraint 主鍵名稱 primary key(屬性1,屬性2) /在字段寫完之後直接跟上/
  • 主鍵自增:屬性名 數據類型 auto_increment
  • 外鍵fk:constraint 外鍵名稱 foreign key (當前表中外鍵屬性) reference 外鍵所屬表(映射表中的屬性)

2.Mysql的數據操作

2.1 插入

插入單條數據
insert into tname(屬性1,屬性2,……) values(屬性1的值,屬性2的值……)
插入多條數據
insert into tname(屬性1,屬性2,……)
values(屬性11的值,屬性12的值……),
(屬性21的值,屬性22的值……),
(屬性31的值,屬性32的值……),

(屬性1的值,屬性2的值……);

插入查詢結果
insert into tname(屬性1,屬性2,……)
select (屬性1,屬性2,……) from 查詢表名 where …

2.2 更新

更新指定記錄
update tname set 屬性名=屬性值,屬性名=屬性值,… wherer 條件 比如學號爲1
更新全部記錄
update tname set 屬性名=屬性值,屬性名=屬性值,… wherer 條件 比如年齡大於30

2.3 刪除

刪除指定記錄
delete from tname wherer 條件 比如學號爲1
刪除全部記錄
delete from tname wherer 條件 比如年齡大於30

3. 數據類型

3.1 整數類型

bigint(8), int(4) ,Integert(4), mediumintt(3) ,smallintt(2) ,tinyint(1)
查看數據類型信息
help int

3.2 浮點數類型和定點數類型

float(4),double(8),decimal(M,D) M爲精度,字節數是M+2

3.3 日期和時間類型

year(1) :1901-2155,
date(4):1000-01-9999-12-31,
time(3):-838:59:59-838:59:59,
datetime(8):1000-01 00:00:00 - 9999-12-31 23:59:59,
timestamp(4):197001080001-2038011911407

3.4 字符類型

3.4.1 char和varchar

char(M): 0 < M < 255
varchar(M): 0 < M < 65535
text(tinytext:0-255,text:0-65535,mediumtext:0-16772150,longtext:0-429496295)

3.4.2 enum類型

屬性名 enum(‘值1’,‘值2’,… ,‘值n’)
最多可以有 65535個值
如果屬性非空:默認值爲第一個元素
如果屬性可以爲空:默認爲NULL

3.4.3 set類型

屬性名 set(‘值1’,‘值2’,… ,‘值n’)
可以去一個或多個元素的組合。取多個元素時不同元素用逗號隔開。 最多64個

3.5 二進制

binary(M):0-M的定長二進制
varbinary(M):0-M變長二級制
bit(M):M位二進制,最大64
tinyblob:可變長二進制數據,最多255 == 1B
blob:可變長二進制數據,最多2的16次方-1 == 2B
mediumblob:可變長二進制數據,最多2的24次方-1 == 3B
longblob:可變長二進制數據,最多2的32次方-1 == 4B

4.多表查詢

4.1 關係數據操作

  1. 並(union)
  2. 笛卡爾積

4.2 內連接查詢

  1. 自連接
    如:查詢"zhangsan"的同班同學
    select ts1.stuid,ts1.name from t_student ts1,t_student as ts2 where ts1.classno=ts2.cllassno and ts2.name=‘zhangsan’;

    select ts1.stuid,ts1.name from t_student ts1 inner join t_student as ts2 on ts1.classno=ts2.classno and ts2.name=‘zhangsan’;
  2. 等值連接
  3. 不等連接

4.3 外連接查詢

在Mysql中外連接查詢會返回所操作表中至少一個表的所有金數據記錄。
select field1,filed2 … filedn from tname1 left|right|full ** (outer) join **tname2 on 條件

  1. 左外連接
    指新關係中執行匹配條件時,以關鍵字LEFT JOIN左邊的表爲參照表。
    左連接的結果不僅包含連接列所匹配的行,還包括LEFT OUTER子句中指定的左表中的所有行。
    如果左表中的某行在右表中沒有匹配行,則在相關聯的結果行中,右表的所有選擇列表均爲空值
  2. 右外連接
    指新關係中執行匹配條件時,以關鍵字RIGHT JOIN左邊的表爲參照表。
    如果右表中的某行在左表中沒有匹配行,則在相關聯的結果行中,左表的所有選擇列表均爲空值

4.4 複合條件連接查詢

如:多個內連接同時使用

4.5 合併查詢數據記錄

select field1,field2, … fieldn from tb1 **union **| union all
select field1,field2, … fieldn from tb1 union | union all

  1. 帶有關鍵字UNION的並操作
    UNION會把查詢結果集直接合併在一起,但是會去掉重複的數據記錄
  2. 帶有關鍵字UNION ALL的並操作
    UNION ALL會把查詢結果集直接合併在一起,但是不會去掉重複的數據記錄

4.6 子查詢

如果使用笛卡爾積連接兩個表,但兩個表都特別大,會導致死機,因此,需要查看笛卡爾積大小
select count(*) from tb1,tb2
如果笛卡爾積太大,則需要考慮子查詢。
在查詢語句的Where或from子句中添加的查詢爲子查詢,外層查詢爲主查詢

  • 帶比較運算符的子查詢
    select * from t_employee
    where salary >= (select salary from t_sleve1 wherer level = 3)
    and salary < (select salary from t_sleve1 wherer level = 4)
  • 帶關鍵字IN的子查詢
    一個查詢語句的條件可能落在另一個select語句的查詢結果中個,這就可以通過IN來實現
  • 帶關鍵字EXISTS的子查詢
    如果子查詢的結果至少有一行,則Exists的結果爲true,負責爲false:exists (select …)
  • 帶關鍵字ANY的子查詢
    表示滿足其中任一條件:score > any(select score from … )
  • 帶關鍵字ALL的子查詢
    表示滿足所有條件: socre >= all(select score from …)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章