mysql-(數(shù)據(jù)庫基礎(chǔ))

mysql

  • 什么是數(shù)據(jù)(data):硬盤中存的東西......

  • 數(shù)據(jù)庫:

    • 數(shù)據(jù)庫是存儲在一起的相關(guān)數(shù)據(jù)的集合,這些數(shù)據(jù)是結(jié)構(gòu)化的,無有害的或不必要的冗余,并為多種應(yīng)用服務(wù)
  • 數(shù)據(jù)庫的優(yōu)點

    • 數(shù)據(jù)按照一定的數(shù)據(jù)模型組織描述和存儲
    • 可為各種用戶共享
    • 冗余度較小,節(jié)省存儲空間
    • 易擴(kuò)展,編寫有關(guān)數(shù)據(jù)庫管理
  • 數(shù)據(jù)庫管理系統(tǒng)(Database Management System)

    • 是一種操縱和管理數(shù)據(jù)庫的大型軟件,適用于建立使用和維護(hù)數(shù)據(jù)庫,簡稱DBMS。
    • 作用:他對于數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安全性和完整性。
  • mysql命令

    mysql -h host_name -u user_name -ppassword
    mysql-h:當(dāng)前連接服務(wù)器不在同臺主機(jī)時,填寫主機(jī)名或IP地址
    mysql-u:登錄mysql用戶名
    mysql-p:登錄mysql密碼
    登錄過程

    mysql -u root -ppassword
    show databases;//顯示所有數(shù)據(jù)庫
    use XXX;
    show tables;//顯示所有的表
    select * from XXX;//進(jìn)入查看該表
    \q:退出
    
  • 數(shù)據(jù)庫由一批數(shù)據(jù)構(gòu)成的有序集合,這些數(shù)據(jù)被分門別類的存放在一些結(jié)構(gòu)化的數(shù)據(jù)表里(table)里,而數(shù)據(jù)之間又往往存在交叉引用的關(guān)系,這種關(guān)系使數(shù)據(jù)庫又被稱為關(guān)系型數(shù)據(jù)庫

  • 數(shù)據(jù)存儲的完整性

    • 有一對必選的有一堆可選的方案以保持完整性。
    • 約束方法:唯一約束、主鍵約束、標(biāo)識列
    • 約束方法:限制數(shù)據(jù)類型、檢查約束、外鍵約束(保證程序表中的數(shù)據(jù)不孤立)、默認(rèn)值、非空約束。
    • 約束方法:規(guī)則,存儲過程,觸發(fā)器。
  • 完整性包括

    • 輸入的類型是否正確?
    • 輸入的格式是否正確?
    • 是否在允許的范圍內(nèi)?
    • 是否存在重復(fù)輸入?
    • 是否符合其他特定要求?

SQL

  • 什么是SQL(Structured Query Language(結(jié)構(gòu)化查詢語言))
    • SQL是專為數(shù)據(jù)庫而建立的操作命令集,是一種功能齊全的數(shù)據(jù)庫語言。在使用它時,只需要發(fā)出“做什么”的命令,“怎么做”是不用使用者考慮的。
  • SQL語句
    • SQL用;結(jié)尾,否則認(rèn)為語句未結(jié)束
    • ->代表SQL語句未結(jié)束
    • 取消SQL語句用\c
    • SQL語句關(guān)鍵字和函數(shù)名不區(qū)分大小寫(Linux區(qū)分,Windows不區(qū)分)
    • 使用函數(shù)時,函數(shù)名和后面的括號之間不能有空格
  • 使用字符串需要轉(zhuǎn)義字符


    Paste_Image.png

數(shù)據(jù)類型

  • CHAR和VARCHAR類型
    • CHAR類型和VARCHAR類型長度都是0~255之間的大小,他們之間的差別是mysql處理存儲的方式
    • CHAR把這個大小視為值得準(zhǔn)確大小,(用空格填補(bǔ)比較短的值)
    • VARCHAR把它視為最大值并只使用字符串實際使用的需要字節(jié)數(shù),較小的值存入VARCHAR類型的字段時,將不會用空格填補(bǔ)。(較長值仍然會被截斷)
  • 數(shù)值列類型
    • mysql為除了NULL值外的所有通用數(shù)據(jù)提供了列類型。列類型是一種手段,通過該手段可以描述表類需要什么類型的表。


      Paste_Image.png

      Paste_Image.png
  • 時間和日期類型


    Paste_Image.png
    • 說明
      • 每個時間和日期列類型都有一個零值,當(dāng)插入非法數(shù)值時就用零值來添加
      • 表示日期時必須先按:年,月,日的順序給出
      • DATE ,TIME ,DATETIME分別是存儲日期,時間與日期和時間的組合,其格式為“YYYY-MM-DD”,“hh:mm: ss”和“YYYY-MM-DD hh:mm: ss”,對于DATETIME類型,日期和時間部分都需要
        TIMESTAMP
      • 時間戳列類型以YYYYMMDDhhmmss的格式來表示值,其取值范圍是19700101000000到2037年的某個時間,主要用于記錄更改或創(chuàng)建某個記錄

  • 創(chuàng)建表
:create table 表名(
列名1  列類型  [<列的完整性約束>],
列名2  列類型  [<列的完整性約束>], 
        ... ...   );
create database test01;//創(chuàng)建名為test01的庫
use test01;//進(jìn)入庫
show tables;//查看庫內(nèi)有幾張表
creat table data11(showtime time);//創(chuàng)建一行一列的表,表名data11,列名show time
insert into data11 values('11:11:11'),('11:11'),(111111);//插入數(shù)據(jù)
select * from data11;//查看表
Paste_Image.png
create table data12(f_data date,f_time);
insert into data12 (f_data,f_time)     values('1978-4-6',123421),(650503,'3:4:1');
Paste_Image.png
create table data12(f_data date,f_time);
insert into data14('1999-11-11 11:11:11','2002-11-11 11:11:11');
insert into data14 values(now(),null);
Paste_Image.png
create table t1(num1 int not null,num2 int);
insert into t1(-1,-2) values(10);
Paste_Image.png
create tablet2(num1 int null,num2 int) 
insert into t2(num2) values(10);
Paste_Image.png
create table t3(num1 int default 100,num2 int);
insert into t3(num2) values(2);
Paste_Image.png
create table t4(num2 int zerofill);
insert into t4 values(2);
Paste_Image.png
create table t5(num1 int unique,num2 int);
insert into t5 values(1,2);
insert into t5 values(1,2);
Paste_Image.png
create table t6(num1 int auto_increment unique not null,num2 int);
insert into t6 (num2)values(10);
insert into t6 (num2)values(10);
insert into t6 (num2)values(10);
Paste_Image.png
insert into t6 values(100,10);
insert into t6 (num2)values(10);
Paste_Image.png
delete from t6;
insert into t6 (num2)values(10);
Paste_Image.png

引用完整性

  • 主鍵和外鍵

    • 數(shù)據(jù)表之間的關(guān)聯(lián)/引用關(guān)系是依靠具體的主鍵(primary key)和外鍵(foreign key)建立起來的。
    • 主鍵:幫助MySQL以最快的速度把一條特點的數(shù)據(jù)記錄的位置確定下來。
      • 主鍵必須是唯一的
      • 主鍵應(yīng)該是緊湊的,因此整數(shù)類型比較適合
    • 外鍵:引用另外一個數(shù)據(jù)表的某條記錄。
      • 外鍵列類型盡可能與主鍵列類型保持一致
      • 外鍵列應(yīng)該加上NOT NULL
  • 注意點

    1. 當(dāng)主表中沒有對應(yīng)的記錄時,不能將記錄添加到子表
    2. 不能更改主表中的值而導(dǎo)致子表中的記錄孤立
    3. 子表存在與主表對應(yīng)的記錄,不能從主表中刪除該行
    4. 刪除主表前,先刪子表
  • 插入insert

    • 直接在外鍵插入信息,會報錯
    主鍵
    create table student(
        sid int not null auto_increment,
        name varchar(20) not null,
        primary key(sid)
    );
    外鍵(自動檢查外鍵是否匹配,僅適用InnoDB)
    create table score(
        cid int not null auto_increment primary key,
        score int,
        sid int,
        foreign key(sid) references student(sid)
    );
    
    insert into score (score,sid) values(100,1);
    
    Paste_Image.png
    insert into student (name) values('ssh');
    
    Paste_Image.png
    insert into score (score,sid) values(100,1);
    
    Paste_Image.png
    • 直接刪除主鍵會報錯
    delete from studnet;
    drop from student;
    
    Paste_Image.png
    • 插入中文
    create table t7(name char(20),id int);
    insert into t7 values('ssh',1);
    insert into t7 values('孫蘇徽',1);
    
    Paste_Image.png
    create table t7(name char(20),id int) default     charset=utf8;
    insert into t7 values('ssh',1);
    insert into t7 values('孫蘇徽',1);
    
    Paste_Image.png

更改表結(jié)構(gòu)

  1. add 列名 建表語句 [first | after 列名]
    • 可以為表添加一列,如果沒指定first或者after,則在列尾添加一列,否則在指定列添加新列
  2. add primary key (列名)
    • 為表添加一個主鍵,如果主鍵已經(jīng)存在,則出現(xiàn)錯誤
  3. add foreign key(列名) references
    • 表名(列名)為表添加一個外鍵
  4. alter 列名 set default 默認(rèn)值
    • 可以更改指定列默認(rèn)值
  5. change 舊列名 新列名 <建表語句> [first | after 列名]
    • 可以更改列類型和列名稱,如果原列的名字和新列的名字相同
  6. modify 列名 <建表語句> [first | after 列名]
    • 和change的作用相同
  7. drop 列名 //可以刪除一列
  8. drop primary key //可以刪除主鍵
  9. engine 類型名 //可以改變表類型
  10. rename as 新表名 //可以將表名更改
  • alter各種使用
    • 新建一個列
    alter table t8 add address int after name;
    desc t8;
    select * from t8;
    
    Paste_Image.png
    • 設(shè)address默認(rèn)值
    alter table t8 alter address set default 100;
    desc t8;
    
    Paste_Image.png
    • change id為number 屬性char(20)
    alter table t8 change id number char(20);
    desc t8;
    select * from t8;
    
    Paste_Image.png

    Paste_Image.png
    • change name 屬性
    alter table t8 change name name int;
    desc t8;
    select * from t8;
    
    Paste_Image.png
    • modify使用
    alter table t8 modify name char(20);
    
    Paste_Image.png
    • drop使用
    alter table t8 drop address;
    
    Paste_Image.png
    • rename使用
    alter table t8 rename as t9;
    
    Paste_Image.png

mysql運算符

  • select
    • select 與binary
    select 'x'<>'X';
    select binary 'x'<>'X';
    
    Paste_Image.png
    • between
    select 10 between 10 and 100;
    
    Paste_Image.png
    select 'x' between 'a' and 'z';
    
    Paste_Image.png
    select 7 in(1,2,3,4,5,6,7);
    select 7 in(1,2,3,4,5,6);
    
    Paste_Image.png
  • NULL
    • IS NULL 或者 IS NOT NULL來測定是否為空
    • 可以使用特殊的<=>運算符,MySQL稱為”NULL安全的等于”運算符。這意味著即使當(dāng)包含在比較運算符中的表達(dá)式含有一個NULL值時,MySQL也會為比較運算符返回一個真值或假值。


      Paste_Image.png
  • 通配符
    • “%” (百分號) 代表任意長度(長度可以為0)的字符串
      • a%b表示以a開頭,以b結(jié)尾的任意長度的字符串。如acb,addgb,ab 等都滿足該匹配串
    • “_”(下橫線) 代表任意單個字符
      • a_b表示以a開頭,以b結(jié)尾的長度為3的任意字符串。如acb,afb等都滿足該匹配串
    select 'mysql' like '%SQL',binary 'mysql' like '%SQL'
    
    Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容