1. 程式人生 > 其它 >【UnityShader】凹凸對映(世界空間下)

【UnityShader】凹凸對映(世界空間下)

1、環境需要

mysql資料庫的環境 mysql-installer-community-5.7.28.0.msi

資料庫的視覺化操作工具SQLyog-11.2.5-0.x64.exe

安裝完以後找到安裝路徑下bin目錄 在此目錄下開啟cmd 輸入mysql -uroot -p #### ,檢查是否安裝成功,這裡的###表示登入資料庫的密碼

成功登入會顯示

開啟視覺化工具,輸入對應埠號和賬號密碼,即可開啟對應資料庫視覺化介面

2、資料庫概述

  資料庫的操作包括SQL語句,約束,分頁

3、SQL語句

  Structural query language-----SQL分為以下三種類型

  DML:Data Manipulation Language 資料操作語言

  DDL:Data Definition Language 資料定義語言

  DCL:Data Control Language 資料控制語言

  3.1 DML

    查詢操作

    #查詢表中所有內容

    select *

    from 表名 ;

    #查詢表中指定內容

    select 欄位名1,欄位名2,........

    from 表名;

    #查詢滿足判斷條件的內容

    select *                #注意這裡的判斷條件  大於>,小於<,等於=,大於等於>=,小於等於<=,不等於<>,也可以加邏輯運算子 與and,或or,^非 
    from 表名        #模糊查詢也可以作為判斷條件 用法:select * from 表 where name like '_\_%';
    where 判斷條件;     #
%表示任意個數任意字元, _表示任意一個字元 ,\_轉義字元,
     #查詢條件的轉移字元也可以用關鍵字escape宣告
    WHERE first_name LIKE '_$_%' ESCAPE '$'; # escape:指定轉義字元

    #特殊運算子

    in(等於列表中的任意一個) any( 和子查詢=中某一個值比較) all(和子查詢中所有的值進行比較)

    #排序

# 查詢所有部門的名字,location_id,員工數量和工資平均值

SELECT employees.`department_id`,departments.`department_name`,departments.`location_id`,AVG
(salary),COUNT(1) FROM employees JOIN departments ON employees.`department_id` = departments.`department_id` GROUP BY employees.`department_id`,departments.`department_name`; ORDER BY employees.`department_id` asc #ORDER BY是負責排序的,此地方結果按department_id排序,預設增序, 有(desc/asc)倆個選項

    #表的連線  


  /*

    #表本身自己連線 vs 不同的表連線
    自連線 vs 非自連線

    #連線的表以表中某個值相等的連線 vs 笛卡爾積(全集)或外連線
    等值連線 vs 非等值連線

    #以下詳細說明
    內連線 vs 外連線
  */

/*
內連線: 合併具有同一列的兩個以上的表的行, 結果集中不包含一個表與另一個表不匹配的行
外連線: 兩個表在連線過程中除了返回滿足連線條件的行以外還返回左(或右)表中不滿足條件的行 ,這種連線稱為左(或右) 外連線。沒有匹配的行時, 結果表中相應的列為空(NULL). 
*/
#內連線 :獲取所有員工的姓名和部門名稱
select e.first_name,d.department_name
from employees e join departments d
on e.department_id = d.department_id;

#左外連線 :獲取所有的員工及部門名稱
select e.first_name,d.department_name
from employees e left join departments d
on e.department_id = d.department_id;

#右外連線 :獲取所有的部門及員工
select e.first_name,d.department_name
from employees e right join departments d
on e.department_id = d.department_id;
#將右外連線變成左外連線
select e.first_name,d.department_name
from departments d left join employees e
on e.department_id = d.department_id;
#總結:外連線包括內連線裡面不滿足條件且是某一個表的全集。

    #sql自帶的函式

#單行函式
/*
LOWER('SQL Course') : 將內容全部轉為小寫 UPPER('SQL Course') :將內容全部轉為大寫 CONCAT('Hello', 'World') : 將兩個字元進行拼接 SUBSTR('HelloWorld',1,5) : 將字串從1的位置開始擷取子串長度為5。(索引從1開始) LENGTH('HelloWorld') : 字串長度 INSTR('HelloWorld', 'W') :w在當前字串中首次出現的位置 LPAD(salary,10,'*') :向右對齊 RPAD(salary, 10, '*') :向左對齊 TRIM('H' FROM 'HelloWorld') : 去除字串兩端指定的字元H REPLACE('abcd','b','m') : 將當前字串中的b替換成m ROUND: 四捨五入 ROUND(45.926, 2) 45.93 TRUNCATE: 截斷 TRUNCATE(45.926) 45 MOD: 求餘 MOD(1600, 300) 100 now() : 當前日期和時間 #注意組函式,只能出現在分組裡面(having)或查詢語句(select)上
/*
組函式
AVG() :求平均數
SUM(): 求和
MAX():求最大值
MIN() :求最小值
COUNT() : 求數量

#avg()和sum() : 注意只能運算數值型別的資料
#處理的資料不包括null

#max()和min() :注意只能運算數值,日期,字串

count(欄位名) : 統計的時候不包括null
count(*) : 統計表中所有的資料的條數(個別欄位為null不受影響)。
count(數值) : 統計表中所有的資料的條數。
    每條資料都會"存放"該數值然後統計該數值的個數。
    效率比count(*)高
*/
/*
#通用函式
IFNULL(commission_pct,0) : 如果commission_pct中的內容為null那麼就用0替換 ----------------------等值------------------------ case 欄位名 when 值1 then 相應的操作1 when 值1 then 相應的操作2 .... else 相應的操作 end ----------------------非等值---------------- case when 條件1 then 相應的操作1 when 條件2 then 相應的操作2 .... else 相應的操作 end
*/

#if表示式
#if(條件表示式,值1,值2) :如果條件表示式的值為true結果為值1,否則為值2
#去重函式
#distinct 欄位名: 去除重複的資料
   

    #分組和過濾

#分組group by
#過濾having 
/*
    select 欄位名1,欄位名299
    from 表名
    group by 欄位名1,欄位名2......
*/
/*
 having 過濾條件
 
 having和where的不同點?
 1.having後面可以現出組函式,where後面不能出現組函式
 2.過濾條件如果可以出現在where或having後面,那麼優先放在where後面(不影響結果)
*/

    #插入和刪除(對錶裡的資料操作)

#插入單行資料
insert into 表名(欄位名1,欄位名2...) values(value1,value2......)
#插入多行資料
insert into 表名(欄位名1,欄位名2...) values(value1,value2......),(value1,value2......).....
#如果插入資料時是全欄位插入,那麼表名後面的欄位可以省略
insert into 表名 values(value1,value2......)
#基於現有的表中的資料插入到當前表中
#注意:資料型別必須保持一致
insert into 表名(欄位名1,欄位名2....)
select 欄位名1,欄位名2.....
from 表名

#刪除表資料
delete from 表名; #刪除表中所有內容
delete from 表名 where 過濾條件;

#修改表中所有的指定欄位的值
update 表名 set 欄位名1=value1,欄位名2=value2... 
update 表名 set 欄位名1=value1,欄位名2=value2...  where 過濾條件

#刪除的區別
1.truncate刪除的內容不能回滾,delete刪除的內容可以回滾(前提是要開啟事務)
2.如果刪除的資料不用回滾那麼優先truncate因為效率高一些

  3.2DDL建立和管理表

    #一般操作

#建立庫
create database 庫名;
#刪除庫
drop database 庫名;
#選庫
use 庫名;
#檢視庫中所有的表
show tables;
#刪除表
drop table 表名;
#查看錶和庫的資訊
show create database/table 庫名/表名;
#指定庫的編碼集
create database 庫名 character set '編碼集';
#指定表的編碼集
create table 表名(
欄位名 型別
.......
)character set ‘編碼集’

    #建立表

        注意常見的資料型別

INT

從-2^31到2^31-1的整型資料。儲存大小為 4個位元組

CHAR(size)

定長字元資料。若未指定,預設為1個字元,最大長度255

VARCHAR(size)

可變長字元資料,根據字串實際長度儲存,必須指定長度

FLOAT(M,D)

單精度,M=整數位+小數位,D=小數位。 D<=M<=255,0<=D<=30,預設M+D<=6

DOUBLE(M,D)

雙精度。D<=M<=255,0<=D<=30,預設M+D<=15

DATE

日期型資料,格式’YYYY-MM-DD’

BLOB

二進位制形式的長文字資料,最大可達4G

TEXT

長文字資料,最大可達4G

    1、白手起家法

create table 表名(
id int,
name varchar(20),
........
)

    2、根據查詢表的結果建立表(沒有原表的約束條件)

create table 表名
select 欄位名1.......
from 表名;

    #對錶進行操作(增減列和行)

    對錶名修改 alter table 原表名 rename to 新表名;

    格式: alter table 表名 add/drop/modify/change column .....

#新增列
ALTER TABLE person ADD COLUMN sex CHAR;
#修改列的名稱
ALTER TABLE person CHANGE COLUMN age2 age3 CHAR;
#修改列的型別
ALTER TABLE person MODIFY COLUMN sex INT;
#刪除列
ALTER TABLE person DROP COLUMN birthday;
#清空表
TRUNCATE TABLE emp;

  3.3DCL資料庫事務

講事務就要談案例

例子:小A到銀行取錢給小B轉賬1000元

處理過程: 小A賬戶-1000元 ------------ 小B賬戶+1000元

事務完成

但是,當小A賬戶錢扣掉後,銀行停電或出現意外時,事務終止,此時就會出現錯誤,小A的錢扣掉了,但是小B的錢沒加

問題的解決:引入事務概念

      當任務開始進行時,開啟事務

      任務順利完成時,結束事務,也可以說時提交事務

      當出現錯誤時,資料開始回滾到開啟事務的狀態,然小A和小B賬號的資料回到沒有轉賬的狀態

mysql中的事務操作

開啟事務 :set autocommit=false;
提交事務 :commit;
回滾事務 : rollback;

java中事務的處理

try{
   1.開啟事務 : set autocommit=false;
   2.AA-100 : 900 
   ---------發生異常了--------
   3.BB+100 : 執行不了
    commit;
}catch(Exception e){
    回滾資料;
}finally{
    set autocommit=true;
}

4、約束

  #約束的種類

/*
    NOT NULL 非空約束,規定某個欄位不能為空
    UNIQUE  唯一約束,規定某個欄位在整個表中是唯一的
    PRIMARY KEY  主鍵(非空且唯一)
    FOREIGN KEY  外來鍵
    DEFAULT  預設值
    CHECK  檢查約束(mysql不支援)
*/
/*
  約束: 列級約束 vs 表級約束
  列級約束 :只能約束一列。
  表級約束 :可以同時約束多列。
  注意 :not null和default只有列級約束。
*/

  #約束的建立

  1、建立表時增加約束

#新增列級約束
CREATE TABLE stu(
id INT PRIMARY KEY,#主鍵約束(非空且唯一,只要是表一定有主鍵約束)
age INT DEFAULT 18,#如果沒有給該欄位插入資料那麼預設插入18
NAME VARCHAR(20) NOT NULL,
sid INT UNIQUE #唯一維束內容不能相同
);
#新增表級約束
CREATE TABLE stu2(
id INT,
age INT,
NAME VARCHAR(20),
passwd VARCHAR(20),
sid INT,
#新增表級約束--可以同時約束多個列
CONSTRAINT stu_id PRIMARY KEY(id),
CONSTRAINT stu_name_pwd UNIQUE(NAME,passwd)
);

  2、表建立成功之後新增約束

/*
primary key

新增約束 : alter table 表名 add primary key (欄位名)

修改約束 : alter table 表名 modify  欄位名 型別 primary key

刪除約束 : alter table 表名 drop primary key

unique:

新增約束 : alter table 表名  add unique(欄位名)

新增約束 : alter table 表名 add constraint  索引名 unique(欄位名)

修改約束 :alter table 表名 modify 欄位名 型別  unique

刪除約束 :alter table 表名 **drop** index 索引名
*/
#表建立成功以後新增約束
CREATE TABLE s(
id INT,
NAME VARCHAR(20),
age INT
)
#新增約束
ALTER TABLE s ADD PRIMARY KEY(id);
INSERT INTO s(id,NAME,age) VALUES(1,"aa",20);

DROP TABLE s;
ALTER TABLE s MODIFY  id INT PRIMARY KEY;

#刪除約束 -- 仍然保留不能為null
ALTER TABLE s DROP PRIMARY KEY;
DESC s;
/*

not null

新增約束:alter table 表名 modify 欄位名 欄位型別 not null

刪除約束 :alter table 表名 modify 欄位名 欄位型別 null

default:

設定預設約束 : alter table tb_name alter 欄位名 set default value;

刪除預設約束 : alter table tb_name alter 欄位名 **drop** default;

foreign key:

新增約束 :  ALTER TABLE 表名  ADD  [CONSTRAINT emp_dept_id_fk]   FOREIGN KEY(dept_id) 

            REFERENCES dept(dept_id);

刪除約束 :alter table 表名 **drop** foreign key  索引名

*/

  3、外來鍵

#格式
CONSTRAINT 索引名 FOREIGN KEY(欄位名) 
REFERENCES 主表名(欄位名)
#注意事項
建立表:應該先建立主表再建立從表
​新增內容:先新增主表再新增從表
​刪除內容:先刪除從表再刪除主表
注:有外來鍵約束的主表和從表,刪除主表後,從表也會被刪除


#當建立表後新增外來鍵約束
#刪除索引
ALTER TABLE emp
DROP FOREIGN KEY 索引名;
#新增約束
ALTER TABLE emp
ADD [CONSTRAINT 索引名] FOREIGN KEY(dept_id) 
REFERENCES dept(dept_id);

5、limit分頁

limit 索引值,資料的條數
#公式:
#(當前頁數-1)*每頁條數,每頁條數
注意:索引值是從0開始的
    用來分批獲取表中的資料(分頁)