日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[MySQL] 零基础学MySQL 08

發布時間:2024/1/1 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [MySQL] 零基础学MySQL 08 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本博客是【韓順平講MySQL】零基礎一周學會MySQL -sql mysql教程 mysql視頻 mysql入門視頻的學習筆記

文章目錄

        • 自增長
        • MySQL索引
        • 索引機制
        • 創建索引
        • 刪除索引、查詢索引
        • 創建索引的規則

自增長

一個問題:在某張表中,存在一個id列(整數),我們希望在添加記錄的時候,該列從1開始,自動地增長,該如何處理呢?

字段名 整形 primary key auto_increment

添加自增長字段的方式
如果字段1是自增長的,給字段1賦值要寫null,或者不給字段1賦值。

insert into xxx (字段1,字段2......) values(null,'值'......); insert into xxx (字段2,字段3......) values('值','值'......); insert into xxx values(null,'值1','值2'......);
#自增長 CREATE TABLE t24(id INT PRIMARY KEY AUTO_INCREMENT,email VARCHAR(32) NOT NULL DEFAULT '' ,`name` VARCHAR(32) NOT NULL DEFAULT '') DESC t24; #測試自增長的使用 INSERT INTO t24 (id,email,`name`) VALUES(NULL,'jack@qq.com','jack'); INSERT INTO t24 VALUES(NULL,'tom@qq.com','tom'); #如果不是自增長的話,下面這個語法是錯誤的 INSERT INTO t24 (email,`name`) VALUES('lhq@qq.com','lhq'); SELECT * FROM t24;


自增長使用細節:

  • 一般來說,自增長和主鍵配合使用
  • 自增長也可以單獨使用,但是需要配合一個unique
  • 自增長修飾的字段為整數類型的(雖然小數也可以但非常少這樣使用)
  • 自增長默認從1開始,你也可以通過如下命令修改
  • ALTER TABLE t25 AUTO_INCREMENT=100;

    5.如果添加數據時,給自增長字段(列)指定的有值,則以指定的值為準。如果指定了自增長,一般來說,就按照自增長的規則來添加數據

    INSERT INTO t25 VALUES(666,'lhq@qq.com','lhq');


    6.如果設置了自增長,刪除掉某條記錄后,自增長不會自動填補,會在刪除數據的id上加一

    MySQL索引

    說起提高數據庫性能,索引是最物美價廉的東西了。不用加內存,不用改程序,不用調sql,查詢速度就可能提高百倍千倍。

    這里我們舉例說明索引的好處【構建海量表 有8000000條數】

    我們已經提前準備好了一個數據庫和海量表。

    #在沒有創建索引時,我們查詢一條記錄 SELECT * FROM empWHERE empno=1234567


    在沒有創建索引前,emp.ibd文件大小是524,288KB

    #使用索引來優化一下,體驗索引有多牛 #empno_index索引名稱 #ON emp (empno) 表示在emp表的empno列創建索引 CREATE INDEX empno_index ON emp (empno)

    創建索引后,emp.ibd文件大小是655,360KB

    得出結論,創建的索引本身也會占用磁盤空間

    這里聯想到“以空間換時間”的算法思想。

    SELECT * FROM empWHERE empno=1234568


    提升速度非常顯著!


    我們在ename上沒有創建索引,那么查詢ename時依然很慢

    #創建索引后,只對創建了索引的列有效 SELECT * FROM emp WHERE ename='axJxCT';

    索引機制

    索引的原理

    圖片來自【韓順平講MySQL】零基礎一周學會MySQL -sql mysql教程 mysql視頻 mysql入門

    索引的代價
    1.磁盤占用會變大
    2.對update delete insert語句的效率會有影響
    以刪除為例,刪除一條數據會導致整個索引數據結構的改變,需要重新更新調整數據結構,所以對速度會有影響。

    在項目中,select操作比update、delete、insert多得多。

    創建索引

    索引的類型

  • 主鍵索引?如果某個列是主鍵,那它自然就是主索引 (primary key)
  • CREATE TABLE t1(id int primary key,#主鍵,同時也是索引,稱為主鍵索引name varchar(32));
  • 唯一索引?(unique)
  • CREATE TABLE t2(id int unique,#id是唯一的,同時也是索引,稱為unique索引name varchar(32));
  • 普通索引?(index)

  • 全文索引?(fulltext) [適用于MyISAM]
    ?一般開發不使用Mysql自帶的全文索引,而是使用全文搜索 Solr 和 ElasticSearch (ES)

  • #演示MySQL索引的使用 #創建索引 CREATE TABLE t26(id INT,`name` VARCHAR(32)); #查詢表是否有索引 SHOW INDEXES FROM t26; #添加唯一索引 CREATE UNIQUE INDEX id_index ON t26 (id); #添加普通索引 create index id_index on t26(id); #如何選擇唯一索引和普通索引 #1.如果某列的值是不會重復的,則優先考慮unique索引,否則使用普通索引 #添加普通索引的另一個方法 -- alter table t26 add index id_index (id)#添加主鍵索引 #1.建表時指定primary key #2.alter table t26 add primary key(id); ALTER TABLE t26 ADD PRIMARY KEY(id);

    刪除索引、查詢索引

    #刪除索引 DROP INDEX id_index ON t26; SHOW INDEX FROM t26; #刪除主鍵索引 ALTER TABLE t26 DROP PRIMARY KEY;#修改索引就是先刪除,再添加新的索引#查詢索引 #1. SHOW INDEX FROM t26; #2. SHOW INDEXES FROM t26; #3. SHOW KEYS FROM t26; #4. DESC t26;

    練習:建立主鍵索引
    要求:創建一張訂單表order(id,商品名,訂購人,數量)要求id號為主鍵,請使用兩種方式來創建主鍵。

    CREATE TABLE order1(id INT PRIMARY KEY,goods_name VARCHAR(32),order_people VARCHAR(32),nums INT); SHOW INDEXES FROM order1;CREATE TABLE order2(id INT,goods_name VARCHAR(32),order_people VARCHAR(32),nums INT); ALTER TABLE order2 ADD PRIMARY KEY(id); SHOW INDEXES FROM order1;

    練習:建立唯一索引
    要求:創建一張特價菜譜表menu(id,菜譜名,廚師,點餐人身份證,價格)要求id號為主鍵,點餐人身份證是unique,請使用兩種方式來創建unique

    CREATE TABLE menu1(id INT PRIMARY KEY,food_name VARCHAR(32),cook_name VARCHAR(32),customer_idcard VARCHAR(32) UNIQUE,price INT); SHOW INDEXES FROM menu1;CREATE TABLE menu2(id INT PRIMARY KEY,food_name VARCHAR(32),cook_name VARCHAR(32),customer_idcard VARCHAR(32),price INT); CREATE UNIQUE INDEX customer_idcard_index ON menu2(customer_idcard); SHOW INDEXES FROM menu2;

    練習:創建普通索引
    要求:創建一張運動員表sportman(id,名字,特長)要求id號為主鍵,名字為普通索引。請使用三種方式來創建索引。

    CREATE TABLE sportman1(id INT PRIMARY KEY,`name` VARCHAR(32),special_skill VARCHAR(32)); CREATE INDEX name_index ON sportman1(`name`); SHOW INDEXES FROM sportman1;CREATE TABLE sportman2(id INT PRIMARY KEY,`name` VARCHAR(32),special_skill VARCHAR(32)); ALTER TABLE sportman2 ADD INDEX name_index(`name`); SHOW INDEXES FROM sportman2;CREATE TABLE sportman3(id INT,`name` VARCHAR(32),special_skill VARCHAR(32)); ALTER TABLE sportman3 ADD PRIMARY KEY (id); CREATE INDEX name_index ON sportman3(`name`); SHOW INDEXES FROM sportman3;

    創建索引的規則

    小結:在哪些列上適合使用索引

  • 較頻繁的作為查詢條件的字段應該創建索引
    select * from emp where empno=1
  • 唯一性太差的字段不適合單獨創建索引,即使頻繁作為查詢條件
    例如:性別
  • 更新非常頻繁的字段不適合創建索引
    select * from emp where logincount=1
  • 不會出現在WHERE子句中的字段不該被創建索引
  • 總結

    以上是生活随笔為你收集整理的[MySQL] 零基础学MySQL 08的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。