乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MySQL基礎(chǔ)筆記整理

       丹楓無跡 2022-03-17

      MySQL安裝和啟動

      Windows下安裝和啟動服務(wù)

      下載地址:https://dev./downloads/mysql/5.7.html#downloads

      安裝

      1 在MySQL官網(wǎng)下載zip文件,

      img

      2 在任意位置保存解壓。這里在E盤創(chuàng)建MySQL目錄

      E:\MySQL\

      3 E:\Monkey\mysql-5.7.16-winx64\目錄創(chuàng)建data目錄。

      4 在命令行運行E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --initialize-insecure進行mysql服務(wù)端初始化,默認的創(chuàng)建了root用戶 密碼為空

      配置和啟動

      1 啟動服務(wù)端:E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld

      2 啟動客戶端:E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysql -uroot -p # 密碼為空

      3 執(zhí)行show databases;

      結(jié)果如下:

      img

      4 添加環(huán)境變量,把E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin添加到Windows的環(huán)境變量(添加環(huán)境變量:https://jingyan.baidu.com/article/47a29f24610740c0142399ea.html)

      5 Windows服務(wù):

      注冊:

      E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --install
      注冊之后可以用 "net start MySQL" 啟動服務(wù) "net stop MySQL"停止服務(wù)

      移除:

      E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --remove

      Linux 下安裝和啟動服務(wù)

      yum安裝

      yum list installed |grep mysql  
      
      //若Linux自帶mysql,將其卸載
      yum -y remove mysql-libs.x86_64
      
      在官網(wǎng)下載yum包 url:https://dev./downloads/repo/yum/
      yum localinstall mysql57-community-release-el6-11.noarch.rpm
      
      yum repolist enabled |grep "mysql.*-community.*"  # 看是否成功添加yum倉庫
      
      yum install mysql-community-server    # 安裝
      
      service mysqld start    # 啟動
      
      Starting mysqld:[ OK ]  # 表示安裝成功
      

      源碼安裝

      安裝編譯源碼所需的包

       yum -y install make gcc-c++ cmake bison-devel  ncurses-devel
      

      之后下載并解包文件

      wget http://cdn./Downloads/MySQL-5.6/mysql-5.6.14.tar.gz
      tar xvf mysql-5.6.14.tar.gz
      

      編譯安裝

      cd mysql-5.6.14
      cmake .
      
      -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
      
      make && make install
      

      MySQL的初始化

      cd /usr/local/mysql
      scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
      

      注意:在/etc目錄下會存在一個my.cnf,需要將此文件更名為其他的名字,如:/etc/my.cnf.bak,否則,該文件會干擾源碼安裝的MySQL的正確配置,造成無法啟動。

      注冊為系統(tǒng)服務(wù):

      cd /usr/local/mysql/support-files
      
      cp mysql.server /etc/rc.d/init.d/mysql   # 注冊服務(wù)
      
      cp my-default.cnf /etc/my.cnf    # 使用默認配置文件
      

      服務(wù)啟動:

      service mysql start 
      

        

      MySQL之SQL基礎(chǔ)語句

      數(shù)據(jù)庫相關(guān)

      MySQL啟動后

      連接數(shù)據(jù)庫:

      mysql -uroot -ppassword    # u 后面跟用戶名 p 后面是密碼
      

      查看數(shù)據(jù)庫:

      show databases;
      

      使用數(shù)據(jù)庫:

      use databases;
      

      查看數(shù)據(jù)庫中所有表:

      show tables; 
      

      創(chuàng)建數(shù)據(jù)庫:(create database + 數(shù)據(jù)庫名)

      create database test_db_name
      

      刪除數(shù)據(jù)庫:(drop database + 數(shù)據(jù)庫名)

      drop database dbname;
      

      用戶相關(guān)

      創(chuàng)建用戶:

      create user 'monkey’@'192.168.2.2’ identified by 'passwod’;
      # 創(chuàng)建名為 'monkey’ 密碼為’password’ 登陸IP只能為:192.168.2.2 的用戶
      
      create user 'monkey’@'192.168.2.%' identified by 'password’;
      # 創(chuàng)建名為 'monkey’ 密碼為’password’ 登陸IP為:192.168.2 網(wǎng)段的用戶
      
      create user 'monkey’@'%' identified by 'password’;
      # 創(chuàng)建名為 'monkey’ 密碼為’password’ 登陸IP不限的用戶
      

      對用戶進行授權(quán):

      grant select,insert,update  on test_db_name.table1 to 'monkey’@'%';
      # 對 monkey 用戶 開放數(shù)據(jù)庫:test_db_name 下表:table1 的查 插 更新的權(quán)限
      
      grant all privileges  on test_db_name.table1 to 'monkey’@'%';
      # 對 monkey 用戶 開放數(shù)據(jù)庫:test_db_name 下表:table1 的所有權(quán)限
      
      revoke all privileges  on test_db_name.table1 from 'monkey’@'%';			  
      # 取消權(quán)限
      

      關(guān)于用戶:

      在mysql數(shù)據(jù)庫下的user表,這張表存放著用戶的信息

      use mysql;
      select user,Host from user;
      

        img

      對用戶的操作也可以修改這張表,但是不建議這樣做!

      數(shù)據(jù)表相關(guān)

      數(shù)據(jù)的字段類型

      數(shù)值型

      類型 大小 范圍(有符號) 范圍(無符號) 用途
      TINYINT 1 字節(jié) (-128,127) (0,255) 小整數(shù)值
      SMALLINT 2 字節(jié) (-32 768,32 767) (0,65 535) 大整數(shù)值
      MEDIUMINT 3 字節(jié) (-8 388 608,8 388 607) (0,16 777 215) 大整數(shù)值
      INT或INTEGER 4 字節(jié) (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整數(shù)值
      BIGINT 8 字節(jié) (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數(shù)值
      FLOAT 4 字節(jié) (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 單精度 浮點數(shù)值
      DOUBLE 8 字節(jié) (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 雙精度 浮點數(shù)值

      字符串類型

      類型 大小 用途
      CHAR 0-255字節(jié) 定長字符串
      VARCHAR 0-65535 字節(jié) 變長字符串
      TINYBLOB 0-255字節(jié) 不超過 255 個字符的二進制字符串
      TINYTEXT 0-255字節(jié) 短文本字符串
      BLOB 0-65 535字節(jié) 二進制形式的長文本數(shù)據(jù)
      TEXT 0-65 535字節(jié) 長文本數(shù)據(jù)
      MEDIUMBLOB 0-16 777 215字節(jié) 二進制形式的中等長度文本數(shù)據(jù)
      MEDIUMTEXT 0-16 777 215字節(jié) 中等長度文本數(shù)據(jù)
      LONGBLOB 0-4 294 967 295字節(jié) 二進制形式的極大文本數(shù)據(jù)
      LONGTEXT 0-4 294 967 295字節(jié) 極大文本數(shù)據(jù)

      日和期時間類型

      類型 大小 范圍 格式 用途
      DATE 3字節(jié) 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
      TIME 3字節(jié) '-838:59:59'/'838:59:59' HH:MM:SS 時間值或持續(xù)時間
      YEAR 1字節(jié) 1901/2155 YYYY 年份值
      DATETIME 8字節(jié) 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和時間值
      TIMESTAMP 4字節(jié) 1970-01-01 00:00:00/2038結(jié)束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和時間值,時間戳

      數(shù)據(jù)表的創(chuàng)建和增加

      創(chuàng)建表:

      create table tablename(
      				id int auto_increment primary key,
      				name varchar(32),
      				age int
      			)engine=innodb default charset=utf8;
      

      其中 語法:create table +tablename(列名1 類型 其他,

                       列名2 類型 其他 ) engine = innodb default charset=utf-8

      engine 指明數(shù)據(jù)庫建表引擎為 innodb (支持事務(wù)操作)。

      myisam 不支持事務(wù)。

      default charset=utf-8 指明數(shù)據(jù)表的編碼字符集 為 utf-8。

      在表中添加數(shù)據(jù)(三種)

      insert into tablename(name,age) values('monkey’,18);
      			
      insert into tablename(name,age) values('JIAJIA’,18),('xiaoliu’,18);
      # 可以跟多條記錄,一元組的形式添加
      			
      insert into tablename(name,age) select name,age from tablename2;
      # 從別的表查找數(shù)據(jù) 寫入 
      

      刪除表中數(shù)據(jù)不刪除表(三種):

      delete from tablename;    # 刪除數(shù)據(jù),但是自增計數(shù)不會被刪除 單純的清掉數(shù)據(jù)
      truncate table tablename;    # 清空表,相當(dāng)于新的表 自增計數(shù) 0
      delete from tb1 where id > 10    # 跟條件
      

      刪除表:

      drop table tablename;    # 刪除表 
      

      表中插入數(shù)據(jù):

      insert into t1(id,name) values(100,'monkey’);
      

      修改數(shù)據(jù)

      update tablename set age=1024;
      update tablename set age=2048 where age=18;
      

      查看數(shù)據(jù)

      select * from tablename; # 查看表的所有行列
      select  name,age from tablename;    # 查看name和age 列
      

      外鍵

      create table tablename1(id int auto_increment primary key ,
      name char(32));
      
      create table tablename2(id int auto_increment primary key ,
      name char(32),
      friend_id int,
      constraint fk_t1_t2 foreign key (friend_id) references tablename1(id));
      

        外鍵的創(chuàng)建:定義表的列時預(yù)料外鍵字段,之后 constraint fk_t1_t2 foreign key (friend_id) references tablename1(id)); constaint ... foreign key 預(yù)留字段名 references 被關(guān)聯(lián)表名(字段名)

      表的補充

      desc t;    # 查看t 的表結(jié)構(gòu)
      		
      show create table t;    # 查看創(chuàng)建t的創(chuàng)建語句
      		
      show create table t \G;    # 橫向查看
      		
      alter table t10 AUTO_INCREMENT=10000;    # 設(shè)置自增的起始值
      			
      

      MySQL的自增問題

      自增的起始值:

      alter table t10 AUTO_INCREMENT=10000;    # 設(shè)置自增的起始值
      

      MySQL: 自增步長
      基于會話級別:

      show session variables like 'auto_inc%';	查看全局變量
      set session auto_increment_increment=2; 設(shè)置會話步長
      # set session auto_increment_offset=10;
      

      基于全局級別:

      show global variables like 'auto_inc%';	查看全局變量
      set global auto_increment_increment=2; 設(shè)置會話步長
      # set global auto_increment_offset=10;
      

      SqlServer:自增步長:

      基于表級別:

      CREATE TABLE `table1` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      ) ENGINE=InnoDB AUTO_INCREMENT=3, 步長=2 DEFAULT CHARSET=utf8
      # 自增起始值為 3 步長為 2
      
      CREATE TABLE `table2` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      ) ENGINE=InnoDB AUTO_INCREMENT=9, 步長=3 DEFAULT CHARSET=utf8
      # 自增起始值為 9 步長為 3
      

      約束與索引

      三種約束關(guān)系

      一對多約束

      外鍵約束本身就實現(xiàn)了一對多的約束

      create table tablename1(id int auto_increment primary key ,
      name char(32));
      
      create table tablename2(id int auto_increment primary key ,
      name char(32),
      friend_id int,
      constraint fk_t1_t2 foreign key (friend_id) references tablename1(id));
      

      一對一約束

      實現(xiàn)一對一約束 外鍵 加 唯一索引

      create table class(id int auto_increment primary key ,
      name char(32));
      
      create table teacher(id int auto_increment primary key ,
      name char(32),
      class_id int,
      unique (class_id),
      constraint fk_class_teacher foreign key (class_id) references class(id));
      

      多對多約束

      通過一張關(guān)系表和外鍵約束建立多對多的映射關(guān)系

      create table class(id int auto_increment primary key ,
      name char(32));
      
      create table student(id int auto_increment primary key ,
      name char(32),
      class_id int);
      
      create table student_class_relation(id int auto_increment primary key ,
      student_id int,
      class_id int,
      constraint fk_relation_class foreign key (class_id)references class(id),
      constraint fk_relation_student foreign key (student_id)references student(id));
      

      主鍵外鍵唯一約束

      所有的索引都有一個共有的作用:加速查找

      主鍵:


      主鍵約束即在表中定義一個主鍵來唯一確定表中每一行數(shù)據(jù)的標(biāo)識符。主鍵可以是表中的某一列或者多列的組合,其中由多列組合的主鍵稱為復(fù)合主鍵。主鍵應(yīng)該遵守下面的規(guī)則:

          • 每個表只能定義一個主鍵。
          • 主鍵值必須唯一標(biāo)識表中的每一行,且不能為 NULL,即表中不可能存在兩行數(shù)據(jù)有相同的主鍵值。這是唯一性原則。
          • 一個列名只能在復(fù)合主鍵列表中出現(xiàn)一次。
          • 復(fù)合主鍵不能包含不必要的多余列。當(dāng)把復(fù)合主鍵的某一列刪除后,如果剩下的列構(gòu)成的主鍵仍然滿足唯一性原則,那么這個復(fù)合主鍵是不正確的。這是最小化原則。

      主鍵聲明的兩種方式

      1、直接在定義字段的時候聲明為主鍵,但是這樣只能聲明單一字段為主鍵無法聲明 復(fù)合主鍵?!?/p>

      create table class(id int auto_increment primary key , 
      name char(32));
      

      2、在字段定義全部結(jié)束之后聲明主鍵,這樣既可以聲明單一的主鍵,也可以聲明為 復(fù)合主鍵。

      create table person(name char(32) not null,
      part char(32) not null ,
      company char(32) not null ,
      primary key (part,company,name));
      

      聯(lián)合主鍵

      當(dāng)建立多對多關(guān)系的兩個表,通過關(guān)系表來唯一確定關(guān)系的時候,關(guān)系表的主鍵稱為 聯(lián)合主鍵。

      例如: 多對多示例中的

      student_class_relation 表中的 id int auto_increment primary key 字段。

      創(chuàng)建表后修改主鍵約束

      create table user(id int, name char(32), sex char(4));
      # 創(chuàng)建 user表 包含 id name sex 三個字段 沒有主鍵
      
      # 添加主鍵
      alter table user add primary key(id);     # 將id字段設(shè)置為主鍵
      
      # 修改主鍵
      alter table user drop primary key,add primary key(name);    # 刪除原主鍵 將name設(shè)置為新的主鍵
      
      # 將主鍵改為 復(fù)合主鍵
      alter table username drop primary key,add primary key(id,name);  # 主鍵改為id 和 name的聯(lián)合主鍵
      

      外鍵:


      主表和從表:

      主表(父表):對于兩個具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的表就是主表。

      從表(子表):對于兩個具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中外鍵所在的表就是從表。

          • 父表必須已經(jīng)存在于數(shù)據(jù)庫中,或者是當(dāng)前正在創(chuàng)建的表。如果是后一種情況,則父表與子表是同一個表,這樣的表稱為自參照表,這種結(jié)構(gòu)稱為自參照完整性。
          • 必須為父表定義主鍵。
          • 主鍵不能包含空值,但允許在外鍵中出現(xiàn)空值。也就是說,只要外鍵的每個非空值出現(xiàn)在指定的主鍵中,這個外鍵的內(nèi)容就是正確的。
          • 在父表的表名后面指定列名或列名的組合。這個列或列的組合必須是父表的主鍵或候選鍵。
          • 外鍵中列的數(shù)目必須和父表的主鍵中列的數(shù)目相同。
          • 外鍵中列的數(shù)據(jù)類型必須和父表主鍵中對應(yīng)列的數(shù)據(jù)類型相同。

      外鍵的聲明:

          定義時聲明本篇上述 一對多對應(yīng)關(guān)系

      創(chuàng)建表后修改外鍵:

      alter table <數(shù)據(jù)表名> add constraint <索引名>
      foreign key(<列名>) refrences <主表名> (<列名>);
      
      alter table user add part_id int;    # 為user表添加 part_id列 作為外鍵
      alter table user add constraint fk_part_user foreign key(part_id) references part(id);     # 為user表添加外鍵約束
      

      唯一約束


          • 唯一約束也叫唯一索引,MySQL唯一約束(Unique Key)要求該列唯一,允許為空,但只能出現(xiàn)一個空值。唯一約束可以確保一列或者幾列不出現(xiàn)重復(fù)值。
          • 唯一約束允許為空,但是不允許有重復(fù),主鍵約束不允許為空,不允許重復(fù)。
          • 唯一約束可以對多個字段設(shè)置,聯(lián)合唯一索引。
          • 注意 唯一索引中的空值允許重復(fù),即可以有多個空值記錄存在。

      聲明唯一約束的兩種方式:

      1、在定義字段時聲明,這樣的方式像聲明主鍵一樣,同樣的無法聲明聯(lián)合唯一。

      create table unique_table0(name char(32) unique ,
      company char(32);
      

      2、在字段聲明全部結(jié)束的時候單獨的聲明唯一索引,這樣可以聲明成多個字段的唯一索引 即聯(lián)合唯一索引。

      create table unique_table1(name char(32) ,
      part char(32) ,
      company char(32) ,
      unique (part,company,name));
      

      ***創(chuàng)建表后修改唯一約束:*

      **

      *創(chuàng)建唯一約束:*

      create table t1(id int, name char(32));
      
      # way 1:  alter table '數(shù)據(jù)表名' add  constraint '索引名'  unique('要添加的字段名’);
      alter table t1 add  constraint unique_id_name unique(id,name);
      
      # way 2:  create unique index 索引名 on 數(shù)據(jù)表名(字段名);
      create unique index unique_id_name unique(id,name);
      

      *刪除唯一約束*

      # way 1:  alter table 數(shù)據(jù)表名 drop index 刪除的索引名;
      alter table t1 drop index unique_id_name;
      
      # way 2:  drop index 索引名 on 數(shù)據(jù)表名;
      drop index unique_id_name on t1;
      

      索引

      索引的詳細介紹戳這里url:

      普通索引

        普通索引(由關(guān)鍵字KEY或INDEX定義的索引)的唯一任務(wù)是加快對數(shù)據(jù)的訪問速度。因此,應(yīng)該只為那些最經(jīng)常出現(xiàn)在查詢條件(WHERE column = …)或排序條件(ORDER BY column)中的數(shù)據(jù)列創(chuàng)建索引。只要有可能,就應(yīng)該選擇一個數(shù)據(jù)最整齊、最緊湊的數(shù)據(jù)列(如一個整數(shù)類型的數(shù)據(jù)列)來創(chuàng)建索引。

      索引的通用方法

      # 查看索引
      show index from table_name;
      # 其中 Key_name 字段為索引名
      
      # 刪除索引 
      drop index index_name on table_name;
      

      普通索引方法

      –直接創(chuàng)建索引(length表示使用名稱前1ength個字符)  
      CREATE INDEX index_name ON table_name(column_name(length))  
      –修改表結(jié)構(gòu)的方式添加索引  
      ALTER TABLE table_name ADD INDEX index_name ON (column_name)  
      –創(chuàng)建表的時候同時創(chuàng)建索引  
      CREATE TABLE table_name (  
      id int(11) NOT NULL AUTO_INCREMENT ,  
      title char(255) NOT NULL ,  
      PRIMARY KEY (id),  
      INDEX index_name (title)  
      ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;   
      建立復(fù)合索引 。  
      CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);  
        注意命名時的習(xí)慣了嗎?使用“表名字段1名字段2名”的方式  
      

      唯一索引

        唯一索引就是唯一約束,與普通索引類似,除索引列的值必須唯一外跟普通索引無異。創(chuàng)建方法和普通索引類似。也就是說唯一約束的創(chuàng)建方式也可以由索引的創(chuàng)建方式創(chuàng)建。

        唯一索引簡化了MySQL對這個索引的管理工作,這個索引也因此而變得更有效率。

        唯一索引是MySQL會在有新記錄插入數(shù)據(jù)表時,自動檢查新記錄的這個字段的值是否已經(jīng)在某個記錄的這個字段里出現(xiàn)過了。

      主鍵索引

        必須為主鍵字段創(chuàng)建一個索引,這個索引就是所謂的”主索引”。主索引與唯一索引的唯一區(qū)別是:前者在定義時使用的關(guān)鍵字是PRIMARY而不是UNIQUE。

      外鍵索引

        如果為某個外鍵字段定義了一個外鍵約束條件,MySQL就會定義一個內(nèi)部索引來幫助自己以最有效率的方式去管理和使用外鍵約束條件。

      全文索引

        MySQL從3.23.23版開始支持全文索引和全文檢索,fulltext索引僅可用于 MyISAM 表;他們可以從CHAR、VARCHAR或TEXT列中作為CREATE TABLE語句的一部分被創(chuàng)建,或是隨后使用ALTER TABLE 或CREATE INDEX被添加。////對于較大的數(shù)據(jù)集,將你的資料輸入一個沒有FULLTEXT索引的表中,然后創(chuàng)建索引,其速度比把資料輸入現(xiàn)有FULLTEXT索引的速度更為快。不過切記對于大容量的數(shù)據(jù)表,生成全文索引是一個非常消耗時間非常消耗硬盤空間的做法。
      文本字段上的普通索引只能加快對出現(xiàn)在字段內(nèi)容最前面的字符串(也就是字段內(nèi)容開頭的字符)進行檢索操作。如果字段里存放的是由幾個、甚至是多個單詞構(gòu)成的較大段文字,普通索引就沒什么作用了。這種檢索往往以LIKE %word%的形式出現(xiàn),這對MySQL來說很復(fù)雜,如果需要處理的數(shù)據(jù)量很大,響應(yīng)時間就會很長。
        這類場合正是全文索引(full-text index)可以大顯身手的地方。在生成這種類型的索引時,MySQL將把在文本中出現(xiàn)的所有單詞創(chuàng)建為一份清單,查詢操作將根據(jù)這份清單去檢索有關(guān)的數(shù)據(jù)記錄。全文索引即可以隨數(shù)據(jù)表一同創(chuàng)建,也可以等日后有必要時再使用下面這條命令添加:
        ALTER TABLE table_name ADD FULLTEXT(column1, column2)
        有了全文索引,就可以用SELECT查詢命令去檢索那些包含著一個或多個給定單詞的數(shù)據(jù)記錄了。下面是這類查詢命令的基本語法:
        SELECT * FROM table_name
        WHERE MATCH(column1, column2) AGAINST('word1’, 'word2’, 'word3’)
        上面這條命令將把column1和column2字段里有word1、word2和word3的數(shù)據(jù)記錄全部查詢出來。

      –創(chuàng)建表的適合添加全文索引  
      CREATE TABLE table_name (  
      id int(11) NOT NULL AUTO_INCREMENT ,  
      content text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,  
      PRIMARY KEY (id),  
      FULLTEXT (content)  
      );  
      –修改表結(jié)構(gòu)添加全文索引  
      ALTER TABLE table_name ADD FULLTEXT index_name(column_name)  
      –直接創(chuàng)建索引  
      CREATE FULLTEXT INDEX index_name ON table_name (column_name)  
      

      單列、多列索引

        多個單列索引與單個多列索引的查詢效果不同,因為執(zhí)行查詢時,MySQL只能使用一個索引,會從多個索引中選擇一個限制最為嚴格的索引。

      組合(復(fù)合)索引

        平時用的SQL查詢語句一般都有比較多的限制條件,所以為了進一步榨取MySQL的效率,就要考慮建立組合索引。例如上表中針對title和time建立一個組合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))。建立這樣的組合索引,其實是相當(dāng)于分別建立了下面兩組組合索引:
      –title,time
      –title
      為什么沒有time這樣的組合索引呢?這是因為MySQL組合索引“最左前綴”的結(jié)果。簡單的理解就是只從最左面的開始組合。并不是只要包含這兩列的查詢都會用到該組合索引,如下面的幾個SQL所示
      –使用到上面的索引
      SELECT * FROM article WHREE title=’測試’ AND time=1234567890;
      SELECT * FROM article WHREE title=’測試’;
      –不使用上面的索引
      SELECT * FROM article WHREE time=1234567890;

      SQL高級查找

      條件查詢

      排序 order by

      select * form table_name order by id desc    # 從大到小
      select * form table_name order by id asc    # 從小到大
      

      限制 limit

      select * form table_name order by id asc limit 10    # 取查詢結(jié)果的前10條
      
      select * form table_name order by id asc limit 20,10    # 取查詢結(jié)果從第20條開始 往后查10條
      
      select * form table_name order by id asc limit 10 offset 20   # 取查詢結(jié)果從第20條開始 往后查10條
      

      模糊查尋 like

      %表示任意長度的字符 _表示單字符

      select * from table_name where name like "張%"    # 以張開頭的
      
      select * from table_name where name like "%張%"    # 包含張的
      
      select * from table_name where name like "%張"    # 以張結(jié)尾的
      
      select * from table_name where name like "張_"    # 以張開頭的 兩個字的  
      
      select * from table_name where name like "_浩_%"    # 三個字的 并且中間是 浩 的 
      

      日期查詢

      select * form table_name where date_key between '2019-10-10' and '2019-10-10';
      

      MySQL比較運算符

      比較運算符 說明
      = 等于
      < 小于
      <= 小于等于
      > 大于
      >= 大于等于
      <=> 安全的等于,不會返回 UNKNOWN
      <> 或!= 不等于
      IS NULL 或 ISNULL 判斷一個值是否為 NULL
      IS NOT NULL 判斷一個值是否不為 NULL
      LEAST 當(dāng)有兩個或多個參數(shù)時,返回最小值
      GREATEST 當(dāng)有兩個或多個參數(shù)時,返回最大值
      BETWEEN AND 判斷一個值是否落在兩個值之間
      IN 判斷一個值是IN列表中的任意一個值
      NOT IN 判斷一個值不是IN列表中的任意一個值
      LIKE 通配符匹配
      REGEXP 正則表達式匹配

      分組聚合

      聚合函數(shù):

      sum() 求和

      avg() 求平均(期望)

      max() 最大值

      min() 最小值

      conut() 計數(shù)(求有多少個記錄)

      對聚合函數(shù)的結(jié)果進行二次篩選的時候,條件 應(yīng)該跟在having后 而不是 where 后面。

      創(chuàng)建表:part 并插入數(shù)據(jù):

      create table part(id int,
      name char(32));
      

      img

      創(chuàng)建表:person 并插入數(shù)據(jù):

      create table person(name char(32),
      part_id int,
      constraint fk_part_person foreign key(part_id) references part(id));
      

      img

      select part_id,count(part_id) from person group by(part_id);
      

      img

      內(nèi)鏈接查詢

      select * from person,part where part.id = person.part_id;  # 有時候性能可能會不如下面 
      select * from person inner join part on part.id = person.part_id;  # 性能可能會更好一些
      

      注意 使用 where 子句定義連接條件比較簡單明了,而 inner join 語法是 ANSI SQL 的標(biāo)準(zhǔn)規(guī)范,使用 inner join 連接語法能夠確保不會忘記連接條件,而且 where 子句在某些時候會影響查詢的性能。

      外鏈接查詢

      select * from person left join part on part.id = person.part_id; 
      
      select * from person right join part on part.id = person.part_id;  
      

      注意 關(guān)于 left 和 right :兩張表 連表查詢,left 就是left 左邊的表呃記錄要全部顯示出來 right 就是 right 右邊的表要全部現(xiàn)實出來

      分組聚合查詢

      每個部門有多少個人:

      select part.name,count(person.name) from person left join part on part.id = person.part_id group by(part.name);
      

      img

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多