[MySQL光速入門]002 建庫, 建表, 加數據

第三章_思惟導圖.png

必會單詞

  1. create 建立
  2. insert 插入
  3. primary key 主鍵
  4. alter 修改
  5. change 改變/修改
  6. rename 重命名
  7. modify 修改
  8. character 字符
  9. engine 引擎
  10. table 數據表
  11. database 數據庫
  12. foreign key 外鍵
  13. update 更新
  14. delete 刪除
  15. drop 扔掉/刪除
  16. show 展現
  17. unique 惟一

數據庫四門基本功課:增刪改查

建立數據庫

建立數據庫的語法

create database db_name character set character_name
複製代碼
  • db_name :表示所要建立的數據庫的名稱。
  • character_name :表示數據庫的字符集。

『示例』建立一個名爲 bookshop 的數據庫,並設置其字符集爲gbk。mysql

create database bookshop character set gbk;
複製代碼

結果:sql

mysql> create database bookshop character set gbk;
query ok, 1 row affected (0.00 sec)
複製代碼

操做數據庫

查看數據庫

成功建立數據庫後,可使 用show命令查看 mysql 服務器中的全部數據庫信息數據庫

show  databases;
複製代碼

『示例』show命令査看 mysql 服務器中的全部數據庫bash

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bookshop           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
複製代碼

選擇數據庫

雖然成功建立了數據庫,但並不表示當前就在操做操做庫 bookshop 。可使用 use 語句選擇一個數據庫。服務器

use db_name;
複製代碼

例如,選擇名稱爲 bookshop 的數據庫,設置其爲當前默認的數據庫,命令執行結果以下所示post

mysql> use bookshop;
Database changed
複製代碼

修改數據庫

數據庫建立後,若是須要修改數據庫的參數,可使用 alter database 命令。語法以下:ui

alter database db_name character set character_name;
複製代碼

『示例』將數據庫 bookshop所用的字符集修改爲 gb2312。spa

alter database bookshop character set gb2312;
複製代碼

刪除數據庫

刪除數據庫的操做可使用 drop database 語句,語法以下:設計

drop database db_name;
複製代碼

例如,經過 drop database 語句刪除名稱爲 bookshop 的數據庫,以下所示。3d

mysql> drop database bookshop;
query ok, 0 rows affected (0.03 sec)
複製代碼

數據庫存儲引擎

  • 數據庫存儲引擎是數據庫底層軟件組件,數據庫管理系統( dbms ) 使用數據引擎進行建立、查詢、更新和刪除數據 操做。
  • 目前, mysql的存儲引擎至少10種,使用 mysql命令「 show engines; 」 便可查看mysql服務實例支持的存儲引擎。

以下所示。

111.png

innodb存儲引擎

  • 支持自動增加列。
  • 支持外鍵完整性約束。
  • 存儲格式

myisam存儲引擎

  • myisam存儲引擎的文件類型有三個。

    • .frm 文件存儲表定義。
    • 數據文件的擴展名爲 .myd (mydata)。
    • 索引文件的擴展名是 .myi (myindex)。
  • 基於 myisam 存儲引擎的表支持3種不一樣的存儲格式, 分別是

    • 靜態型
    • 動態型
    • 壓縮型

memory存儲引擎

  • memory表的大小是受到限制的。
  • memory不支持varchar、blob、和text數據類型,由於這種表類型按固定長度的記錄格式存儲

如何選擇存儲引擎

1553474200843.png

掌握數據表的基礎知識

表的定義

  • 表是包含數據庫中全部數據的數據庫對象。
  • 在表中,數據成二維行列格式,每一行表明一個惟一的記錄,每一列表明一個域。

1553474228031.png

列名

列名是用來訪問表中具體域的標識符,列名必須遵循下列規則:

  • 列名是能夠含有從1到128的asc碼字符,它的組成包括字母、下劃線、符號以及數字
  • 不要給列名命名爲與sql關鍵字相同的名字,好比 select, in, desc等。
  • 列名應該反映數據的屬性。

數據類型

數值類型

  • 整數數據類型

    • 整數數據類型包括 bigintintmediumintsmallinttinyint
      1553474246891.png
  • 小數數據類型

    • 小數數據類型包括 decimalnumeric兩類。從功能上說二者徹底等價,二者的惟一區別在於 decimal不能用於帶有 indentity 關鍵字的列
    • 聲明小數型數據的格式是 numeric | decimal(p[,s]),其中p 爲精度,s爲小數位數,s的默認值爲0
  • 浮點數據類型

    • 浮點型也稱近似類型。這種類型不能提供精確表示數據的精度,使用這種類型來存儲某些數值時,有可能會損失些精度。

1553474289406.png

字符串類型

經常使用的字符串類型主要包括charvarcharbinaryvarbinary 等類型。

1553474306952.png

日期時間類型

在 mysql中,日期時間類型包括 datetimetimetimestampdate等。

1553474417005.png

  • enum類型和set類型
    • 所謂枚舉類型enum,就是指定數據只能取指定範圍內的值。
    • 對於能夠選取多個值的字段,能夠選擇set類型,例如,「愛好」字段就能夠選擇set類型,由於可能有多種愛好
  • text類型和blob類型
    • text類型存儲只能存儲字符數據。而blob類型能夠用於存儲二進制數據。
    • text類型包括 tinytext、text、 mediumtext和 longtext
  • 長度
    • 給列定義的大小部分指的是該列能接受多少個字符,好比char容許用戶只輸入一個字符,而另外一些則不容許這些作,因此建議使列值儘量小,顯示列越小,表所佔的空間也就越少。
    • 可是還有一個問題就是若是減小列的大小, mysql將用截斷數據以知足新的大小尺寸,因此極可能丟失有價值的信 息數據。

管理網上書城系統數據庫

表的設計步驟

  1. 表的命名方式。

  2. 表中每一列的名稱、數據類型及其長度。

  3. 表中的列是否容許空值, 是否惟一, 是否要進行默認設置或添加用戶定義約束。

  4. 表間的關係, 即肯定哪些列是主鍵, 哪些是外鍵

使用sql語句建立數據表

語法

create table tb_name(
    column name1 datatype[列級別約束條件],
    column name2 datatype[列級別約束條件]
    ...
    [表級別約束條件]
);
複製代碼

建立以下數據表的話

1553475040319.png

實際代碼

create table customers(
    cid char(6) not null primary key,
    ctruename varchar(50),
    cpassword varchar (50),
    csex char (2),
    caddress varchar(50),
    cmobile varchar(11),
    cemail varchar(50),
    cregisterdate datetime
)engine=innodb;
複製代碼

數據完整性約束

數據完整性概述

什麼是數據完整性?

存在你數據庫裏的數據, 就要符合你數據庫的規矩

在 mysql中能夠經過 primary key約束、foreign key約束、 unique、空值約束和默認值約束等來實施數據完整性

  • 實體完整性(每行數據都不同)

  • 域完整性(數據大小在字段容許的範圍內)

  • 引用完整性約束(外鍵和對應主鍵的值要一致)

  • 自定義完整性(本身定義的一些規則)

主健約束

主鍵(primary key)約束是使用最爲頻繁的約束 它的做用是惟一標記一條數據

因此:

  1. 主鍵不能爲null
  2. 主鍵不能重複
  3. 用過的主鍵, 即使刪除來這條記錄, 最好也不要再用
  4. 主鍵不能修改

總結起來就是四不

不爲空, 不相同, 不重用, 不改動

單字段主鍵

『示例』顧客信息表 customers中須要以「顧客編號」做爲顧客的惟一標識,在建立數據表 customers時,爲cid列設置primary key約束,因爲單列組成主鍵,故該主鍵能夠定義爲列級主鍵。

create table customers(
    cid char(6) not null primary key,
    ctruename varchar (30) not null,
    cpassword varchar (30) not null,
    csex char(2)not null,
    caddress varchar (50) null,
    cmobile varchar (11) not null,
    cemail varchar(50) null,
    cregisterdate datetime not null
);
複製代碼

多字段主鍵

『示例』若是在訂單詳情表中不設置編號,則能夠將表中「訂單編號 + 商品編號」做爲訂單詳情的惟一標識,在建立數據表 orderdetails時, 爲oid和gid的組合設置 primary key約束。

1553476242358.png

create table orderdetails(
    oid char(14) not null,
    gid char(6) not null,
    odprice float not null,
    odnumber int not null,
    primary key (oid, gid)
);
複製代碼

外健約束

外鍵( foreign key )約束標識表之間的關係,用於強制參照完整性,爲表中一列或者多列數據提供參照完整性。

簡單說, 外鍵是鏈接另外一個表的錨點

建立外鍵的基本語法以下:

[constraint<外鍵名>] foreign key 列名1 [, 列名2, ...] references <主鍵表> 主鍵列1 [主鍵列2...]
複製代碼

看着挺唬人, 其實很簡單, 看個例子

『示例』在建立數據表訂單表 orders時,表中的cid(客戶編號)引用了客戶表 customers中的客戶編號,須要創建 orders表和 customers 表之間的關係。其中cid爲關聯列, customers 表爲主鍵表, orders表爲外鍵表。

1553480030204.png

create table orders(
    oid char(14) not null primary key,
    cid char(6) not null,
    odate datetime not null,
    osum float not null,
    ostatus char(1) not null,
    foreign key(cid) references customers(cid)
)engine=innodb;
複製代碼

惟一約束

『示例』爲了保證客戶信息表表 customers中的手機號不重複,在建立數據表 customers時,爲 cmobile設置 unique約 束

1553480144712.png

-- 若是存在就刪除, 防止重複建表而報錯
drop table if exists customers; 

create table customers(
    cid char(6) not null primary key,
    ctruename varchar (30) not null,
    cpassword varchar (30) not null,
    csex char(2)not null,
    caddress varchar (50) null,
    cmobile varchar (11) not null unique,
    cemail varchar(50) null,
    cregisterdate datetime not null
);
複製代碼

默認值約束

『示例』在建立客戶信息表 customers時,爲用戶性別csex 字段設置爲默認值「男」。

1553480570751.png

create table customers(
    cid char(6) not null primary key,
    ctruename varchar (30) not null,
    cpassword varchar (30) not null,
    csex char(2)not null default '男',
    caddress varchar (50) null,
    cmobile varchar (11) not null unique,
    cemail varchar(50) null,
    cregisterdate datetime not null
);
複製代碼

非空約束

  • 非空值約束限制一列或多個列的值不能爲空(null) 空表示未定義或未知的值。

  • 在默認狀況下,全部列都接受空值, 若要某列不接受空值, 則能夠在該列上設置not null約束。

  • null值既不等價於數值型數據0, 也不等價於字符型數據中的空串, 只是代表字段值是未知的

使用sql語句操做數據表

修改數據表

如需在表中添加列,請使用下面的語法:

alter table table_name add column_name datatype;
複製代碼

『示例』在客戶表中新增一個客戶暱稱字段, 變長11位

alter table customers add cnickname varchar(11);
複製代碼

如需刪除表中的列,請使用下面的語法(請注意,某些數據庫系統不容許這種在數據庫表中刪除列的方式):

alter table table_name drop column column_name
複製代碼

『示例』刪除用戶暱稱字段

alter table customers drop cnickname
複製代碼

要改變表中列的數據類型,請使用下面的語法:

alter table table_name modify column column_name datatype
複製代碼

『示例』假設已經在數據庫 bookshop中建立了表customers。要把字段 csex 的數據類型改成int類型。

use bookshop;
alter table customers modify csex int not null;
複製代碼

『示例』假設已經在數據庫 bookshop中建立了表 customers。添加一個新的字段 state,類型爲cha(1),不容許爲空,將字段 address列刪除。

use bookshop;
alter table customers add state char() not null, drop column address
複製代碼

修改表名

rename table 語句來更改表的名字。其語法形式以下

rename table tb_name to new_tb_name
複製代碼

『示例』假設數據庫 bookshop 中存在 customers 表,將 customers 表重命名爲 customers2 表。

use bookshop;
rename table customers to customers2;
複製代碼

刪除數據表

刪除表是指刪除數據庫中已存在的表。在 mysql 中經過 drop table 語句來刪除表。語法以下:

drop table tb_name;
複製代碼

『示例』假設存在 customers,刪除 bookshop數據庫中 customers 數據表。

use bookshop;
drop table customers;
複製代碼

管理數據表數據

插入記錄

  1. 爲表的全部字段插入數據

    使用基本的 insert語句插入數據要求指定表名稱和插入到新記錄中的值。基本語法格式爲

    insert into tb_name (col_list) values (val_list);
    insert into tb_name values (val_list);
    複製代碼

    『示例』向 bookshop數據庫的表 customers插入以下的數據。

1553481712468.png

```msyql
 insert into customers
      ( cid, 
        truename, 
        cpassword, 
        csex, 
        address, 
        cmobile, 
        cemai, 
        cregisterdate )
 values
      ( 'c0011', 
        '李 平', 
        '123456', 
        '女', 
        '廣東中山市', 
        '1351543876', 
        'liping163.com', 
        '2009-9-6' );
 ```
複製代碼
  1. 爲表的指定字段插入數據

    『示例』新顧客信息錄入,顧客信息地址 address和電子郵箱cemail尚缺,只能將該顧客的部分信息如表所示添 加到 customers表中。

1553481814639.png

```sql
 insert into customers
( cid, truename, password, csex, cmobile, cregisterdate )
 values
( c0012, 張先明, 23456, 男, 13513452312, 2009-10-6 );
 ```
複製代碼
  1. 同時插入多條記錄

    『示例』若是想一次性插入多條, 能夠這樣...

    use bookshop;
    insert into customers values
        (
           'c0013', 
           '韓志國', 
           '123456', 
           '男', 
           null, 
           '13512134256', 
           'hanzo', 
           'al63com', 
           '2010-1-16'
           ), (
           'c00141', 
           '張小明', 
           '123456', 
           '男', 
           null, 
           '13613434256', 
           'zma163.com', 
           '2010-2-24');
    複製代碼

修改記錄

修改表中的所有數據

『示例』修改商品信息表 goods中的數據,將所有書籍的價錢九折出售。

update goods;
set price = price * 0.9;
複製代碼

根據條件修改表中的數據

『示例』修改商品信息表gods中的數據,將書籍存量小於100本的圖書再增長50本。完成語句以下所示。

update goods;
set number = number + 50 where number <= 100;
複製代碼

刪除記錄

根據條件刪除表中的數據

『示例』商品編號爲「010001」的商品已售完,而且之後不考慮再進貨,須要在商品信息表中清除該商品的信息。完 成語句以下所示

delete from goods where gid=010001;
複製代碼

刪除表中的所有數據

『示例』刪除商品信息表中的全部信息。完成語句以下所示。

delete from goods;
複製代碼

切記, update和delete若是沒有where條件, 後果會很嚴重...

快速跳轉

相關文章
相關標籤/搜索