1. 程式人生 > 實用技巧 >微前端究竟好在哪?

微前端究竟好在哪?

資料庫基本操作

連線伺服器

  • 瀏覽器鍵入

    • http://localhost/phpmyadmin/index.php
  • 客戶端

    • MySQL Workbench
  • 命令列接入

    • XAMPP中 Shell面板
    • 命令列名詞
      • host -h 主機
      • port -p 埠號
      • user -u 使用者名稱
      • password -p 密碼
    • 連線資料庫
      • mysql -h127.0.0.1 -P3306 -uroot -proot 明文
      • mysql -uroot -proot 明文 (本地資料庫 埠號3306)
      • mysql -uroot -p 密文
    • 退出登入
      • exit
      • quit
      • \q

資料庫基本概念

資料庫 表相關

  • 資料庫:資料庫中存放的是表,一個數據庫中可以存放多個表

  • 表:表是用來存放資料的

  • 關係:兩個表的公共欄位

  • 行:也稱記錄,也稱實體

  • 列:也稱欄位,也稱屬性

  • 理解

    • 就表結構而言,表分為行和列
    • 就表資料而言,表分為記錄和欄位
    • 就面向物件而言,一個記錄就是一個實體,一個欄位就是一個屬性

資料相關

  • 資料冗餘:相同的資料儲存在不同的地方

    • 冗餘只能減少,不能杜絕
    • 減少冗餘的方法是分表
  • 資料完整性:正確性+準確性=資料完整性

    • 正確性:資料型別正確
    • 準確性:資料範圍要準確

資料庫執行過程

  • 客戶端
    • 連線資料庫
    • 傳送SQL指令
    • 返回結果
    • 傳送SQL指令
    • 返回結果
    • 關閉連線
  • MySQL

MySQL資料庫的目錄

  • 資料庫儲存的路徑在安裝MySQL的時候就配置好

  • 在my.ini配置檔案中更改資料庫的儲存地址

    • datadir="F:/wamp/PHPTutorial/MySQL/data/"
  • 一個數據庫就對應一個資料夾,在資料夾中有一個db.opt檔案

    • 在此檔案中設定資料庫的字符集和校對集

MySQL資料庫報錯

  • 如果建立的資料庫已存在,會報錯

    • 建立資料庫的時候判斷一下資料庫是否存在,如果不存在再建立
  • 如果資料庫名是關鍵字和特殊字元,要報錯

    • 在特殊字元、關鍵字行加上反引號
  • 建立資料庫的時候可以指定字元編碼

    • 建立資料庫如果不指定字元編碼,預設和MySQL伺服器的字元編碼是一致的

資料庫的操作

建立資料庫

  • 語法
    • create database [if not exists] 資料名 [選項];
-- 建立資料庫時指定儲存的字元編碼
-- 如果不指定編碼,資料庫預設使用安裝資料庫時指定的編碼
mysql> create database emp charset=gbk;
# `Query OK, 1 row affected (0.00 sec)`

-- 建立資料庫
mysql> create database stu;
# `Query OK, 1 row affected (0.06 sec)`

-- 建立資料庫時,如果資料庫已經存在就要報錯
mysql> create database stu;
# `ERROR 1007 (HY000): Can't create database 'stu'; database exists`

-- 在建立資料庫時候,判斷資料庫是否存在,不存在就建立
mysql> create database if not exists stu;
# `Query OK, 1 row affected, 1 warning (0.00 sec)`

-- 特殊字元、關鍵字做資料庫名,使用反引號將資料庫名括起來
mysql> create database `create`;
# `Query OK, 1 row affected (0.04 sec)`

mysql> create database `%$`;
# `Query OK, 1 row affected (0.05 sec)`

顯示所有資料庫

  • 語法
    • show databases;

刪除資料庫

  • 語法
    • drop database [if exists] 資料庫名;

顯示建立資料庫的語句

  • 語法
    • show create database 資料庫名;

修改資料庫

  • 語法

    • alter database 資料庫名 charset=字元編碼;
  • 說明

    • 修改資料庫只能修改資料庫的字元編碼
    • 在MySQL中utf字元編碼之間沒有橫杆 utf8

選擇資料庫

  • 語法
    • use 資料庫名

表的操作

資料表的檔案

  • 拓撲結構

    • 一個數據庫對應一個資料夾
    • 一個表對應一個或多個檔案
  • 引擎

    • myisam 一個表對應三個檔案
      • .frm 儲存的是表結構
      • .myd 儲存的是表資料
      • .myi 儲存的表資料的索引
    • innodb 一個表對應一個表結構檔案
      • innodb的都有表的資料都儲存在ibdata1檔案中
      • 如果資料量很大,會自動的建立ibdata2,ibdata3...
      • 如果不指定引擎,預設是innodb
    • innodbmyisam的區別
      • myisam
        • 查詢速度快
        • 容易產生碎片
        • 不能約束資料
      • innodb
        • 以前沒有myisam查詢速度快,現在已經提速了
        • 不產生碎片
        • 可以約束資料

表前環境建立

-- 建立資料庫
mysql> create database data;
# `Query OK, 1 row affected (0.00 sec)`

-- 使用資料庫
mysql> use data;
# `Database changed`

-- 設定客戶端和伺服器通訊的編碼
mysql> set names gbk;  
# `Query OK, 0 rows affected (0.00 sec)`

建立表

  • 語法
create table [if not exists] `表名`(
    `欄位名` 資料型別 [null|not null] [default] [auto_increment] [primary key] [comment],
    `欄位名` 資料型別 [null|not null] [default] [auto_increment] [primary key] [comment]
)[engine=儲存引擎] [charset=字元編碼]
  • 語法說明
    • null|not null 是否為空
    • default 預設值
    • auto_increment 自動增長,預設從1開始,每次遞增1
    • primary key 主鍵,主鍵的值不能重複,不能為空,每個表必須只能有一個主鍵
    • comment 備註
    • engine 引擎決定了資料的儲存和查詢 myisam、innodb
    • 表名和欄位名如果用了關鍵字,要用反引號引起來
    • 如果不指定引擎,預設是innodb
    • 如果不指定字元編碼,預設和資料庫編碼一致
    • varchar(20) 表示長度是20個字元
-- 建立簡單的表
mysql> create table stu1(
    -> id int auto_increment primary key,
    -> name varchar(20) not null
    -> )engine=innodb charset=gbk;
# `Query OK, 0 rows affected (0.11 sec)`
-- 建立複雜的表
mysql> create table stu2(
    -> id int auto_increment primary key comment '主鍵',
    -> name varchar(20) not null comment '姓名',
    -> `add` varchar(50) not null default '地址不詳' comment '地址',
    -> score int comment '成績,可以為空'
    -> )engine=myisam;
# `Query OK, 0 rows affected (0.06 sec)`

顯示所有表

  • 語法
    • show tables;

顯示建立表的語句

  • 語法
    • show create table 表名稱; 結果橫著排列
    • show create table 表名稱\G; 結果豎著排列

查看錶結構

  • 語法
    • desc[ribe] 表名;

複製表

  • 語法
    • create table 新表 select 欄位 from 舊錶;
      • 不能複製父表的鍵,能夠複製父表的資料
    • create table 新表 like 舊錶;
      • 只能複製表結構,不能複製表資料
    • * 表示所有欄位

刪除表

  • 語法
    • drop table [if exists] 表1,表2,… ;

修改表

  • 語法
    • alter table 表名;

新增欄位

  • 語法
    • alter table 表名 add [column] 欄位名 資料型別 [位置];
-- 預設新增欄位放在最後
mysql> alter table stu add `add` varchar(20);	
# `Query OK, 0 rows affected (0.05 sec)`

-- 在name之後新增sex欄位
mysql> alter table stu add sex char(1) after name;  
# `Query OK, 0 rows affected (0.00 sec)`
# `Records: 0  Duplicates: 0  Warnings: 0`

-- age放在最前面
mysql> alter table stu add age int first;  
# `Query OK, 0 rows affected (0.00 sec)`
# `Records: 0  Duplicates: 0  Warnings: 0`

刪除欄位

  • 語法
    • alter table 表 drop [column] 欄位名;
-- 刪除age欄位
mysql> alter table stu drop age;   
# `Query OK, 0 rows affected (0.00 sec)`
# `Records: 0  Duplicates: 0  Warnings: 0`

修改欄位(改名)

  • 語法
    • alter table 表 change [column] 原欄位名 新欄位名 資料型別;
-- 將name欄位更改為stuname varchar(10)
mysql> alter table stu change name stuname varchar(10);
# `Query OK, 0 rows affected (0.02 sec)`
# `Records: 0  Duplicates: 0  Warnings: 0`

修改欄位(不改名)

  • 語法
    • alter table 表 modify 欄位名 欄位屬性 欄位屬性;
-- 將sex資料型別更改為varchar(20)
mysql> alter table stu  modify sex varchar(20);
# `Query OK, 0 rows affected (0.00 sec)`
# `Records: 0  Duplicates: 0  Warnings: 0`
-- 將add欄位更改為varchar(20) 預設值是‘地址不詳’
mysql> alter table stu modify `add` varchar(20) default '地址不詳';
# Query OK, 0 rows affected (0.00 sec)
# Records: 0  Duplicates: 0  Warnings: 0

修改引擎

  • 語法
    • alter table 表名 engine=引擎名;
mysql> alter table stu engine=myisam;
# `Query OK, 0 rows affected (0.01 sec)`
# `Records: 0  Duplicates: 0  Warnings: 0`

修改表名

  • 語法
    • alter table 表名 rename to 新表名;
-- 將stu表名改成student
mysql> alter table stu rename to student;
# Query OK, 0 rows affected (0.00 sec)

將表移動到其他資料庫

  • 語法
    • alter table 表名 rename to 其他資料庫.新表名;
-- 將當前資料庫中的student表移動到php74資料庫中改名為stu
mysql> alter table student rename to php74.stu;
# Query OK, 0 rows affected (0.00 sec)

資料操作

插入資料

插入所有欄位

  • 語法

    • insert into 表名 (欄位名, 欄位名,…) values (值1, 值1,…);
  • 說明

    • 插入欄位名的順序和資料表中欄位名的順序可以不一致
    • 插入值的個數、順序必須和插入欄位名的個數、順序要一致
    • 如果插入的值的順序和個數與表字段的順序個數一致,插入欄位可以省略
-- 插入所有欄位
mysql> insert into stu (id,stuname,sex,`add`) values (1,'tom','男','北京');
# `Query OK, 1 row affected (0.00 sec)`

-- 插入部分欄位
mysql> insert into stu(id,stuname) values (2,'berry');

-- 插入的欄位和表的欄位可以順序不一致。但是插入欄位名和插入的值一定要一一對應
mysql> insert into stu(sex,`add`,id,stuname) values ('女','上海',3,'ketty');
# `Query OK, 1 row affected (0.00 sec)`

-- 插入欄位名可以省略
mysql> insert into stu values(4,'rose','女','重慶');
# `Query OK, 1 row affected (0.00 sec)`

插入預設值和空值

  • 語法
    • insert into 表名 values (值1, 值2, null, default);
    • default關鍵字用來插入預設值,null用來插入空值
mysql> insert into stu values (5,'jake',null,default);
# `Query OK, 1 row affected (0.05 sec)`

插入多條資料

mysql> insert into stu values (6,'李白','男','四川'),(7,'杜甫','男','湖北');
# `Query OK, 2 rows affected (0.00 sec)`
# `Records: 2  Duplicates: 0  Warnings: 0`

更新資料

  • 語法
    • update 表名 set 欄位=值 [where 條件];
-- 將berry性別改為女
mysql> update stu set sex='女' where stuname='berry';
# `Query OK, 1 row affected (0.06 sec)`

-- 將編號是1號的學生性別改成女,地址改為上海。
mysql> update stu set sex='女',`add`='上海' where id=1;
# `Query OK, 1 row affected (0.00 sec)`

刪除資料

  • 語法

    • delete from 表名 [where 條件];
  • delete from 表和truncate table 表的區別

    • delete from 遍歷表記錄,一條一條的刪除
    • truncate table 將原表銷燬,再建立一個同結構的新表。就清空表而言,這種方法效率高
-- 刪除1號學生
mysql> delete from stu where id=1;

-- 刪除名字是berry的學生
mysql> delete from stu where stuname='berry';
# `Query OK, 1 row affected (0.00 sec)`

-- 刪除所有資料
mysql> delete from stu;
# `Query OK, 5 rows affected (0.00 sec)`

查詢資料

  • 語法
    • select 列名 from 表名;
-- 查詢id欄位的值
mysql> select id from stu;

-- 查詢id,stuname欄位的值
mysql> select id,stuname from stu;、

-- 查詢所有欄位的值
mysql> select * from stu;

編碼設定

  • 語法
    • set names gbk; 一次性設定客戶端和伺服器通訊的編碼
    • set character_set_client=gbk; 更改接受客戶端指令的編碼
    • 設定什麼編碼取決於客戶端的編碼

校對集

  • 語法
    • collate=utf8_general_ci; 不區分大小寫
    • collate=utf8_bin; 按二進位制編碼比較,區別大小寫
mysql> create table stu1(
    -> name char(1)
    -> )charset=utf8 collate=utf8_general_ci;
# `Query OK, 0 rows affected (0.05 sec)`

mysql> create table stu2(
    -> name char(1)
    -> )charset=utf8 collate=utf8_bin;
# `Query OK, 0 rows affected (0.05 sec)`

mysql> insert into stu1 values ('a'),('B');
# `Query OK, 2 rows affected (0.00 sec)`
# `Records: 2  Duplicates: 0  Warnings: 0`

mysql> insert into stu2 values ('a'),('B');
# `Query OK, 2 rows affected (0.00 sec)`
# `Records: 2  Duplicates: 0  Warnings: 0`