下載地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads
1 在MySQL官網(wǎng)下載zip文件,
2 在任意位置保存解壓。這里在E盤創(chuàng)建MySQL目錄
E:\MySQL\
3 E:\Monkey\mysql-5.7.16-winx64\目錄創(chuàng)建data目錄。
4 在命令行運(yùn)行E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --initialize-insecure進(jìn)行mysql服務(wù)端初始化,默認(rèn)的創(chuàng)建了root用戶 密碼為空
1 啟動(dòng)服務(wù)端:E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld
2 啟動(dòng)客戶端:E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysql -uroot -p # 密碼為空
3 執(zhí)行show databases;
結(jié)果如下:
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" 啟動(dòng)服務(wù) "net stop MySQL"停止服務(wù)
移除:
E:\MySQL\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --remove
yum list installed |grep mysql
//若Linux自帶mysql,將其卸載
yum -y remove mysql-libs.x86_64
在官網(wǎng)下載yum包 url:https://dev.mysql.com/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 # 啟動(dòng)
Starting mysqld:[ OK ] # 表示安裝成功
安裝編譯源碼所需的包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
之后下載并解包文件
wget http://cdn.mysql.com/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目錄下會(huì)存在一個(gè)my.cnf,需要將此文件更名為其他的名字,如:/etc/my.cnf.bak,否則,該文件會(huì)干擾源碼安裝的MySQL的正確配置,造成無法啟動(dòng)。
注冊為系統(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 # 使用默認(rèn)配置文件
服務(wù)啟動(dòng):
service mysql start
MySQL啟動(dòng)后
連接數(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;
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不限的用戶
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)限
在mysql數(shù)據(jù)庫下的user表,這張表存放著用戶的信息
use mysql;
select user,Host from user;
對用戶的操作也可以修改這張表,但是不建議這樣做!
數(shù)值型:
類型 | 大小 | 范圍(有符號(hào)) | 范圍(無符號(hào)) | 用途 |
---|---|---|---|---|
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) | 單精度 浮點(diǎn)數(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) | 雙精度 浮點(diǎn)數(shù)值 |
字符串類型
類型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字節(jié) | 定長字符串 |
VARCHAR | 0-65535 字節(jié) | 變長字符串 |
TINYBLOB | 0-255字節(jié) | 不超過 255 個(gè)字符的二進(jìn)制字符串 |
TINYTEXT | 0-255字節(jié) | 短文本字符串 |
BLOB | 0-65 535字節(jié) | 二進(jìn)制形式的長文本數(shù)據(jù) |
TEXT | 0-65 535字節(jié) | 長文本數(shù)據(jù) |
MEDIUMBLOB | 0-16 777 215字節(jié) | 二進(jìn)制形式的中等長度文本數(shù)據(jù) |
MEDIUMTEXT | 0-16 777 215字節(jié) | 中等長度文本數(shù)據(jù) |
LONGBLOB | 0-4 294 967 295字節(jié) | 二進(jìn)制形式的極大文本數(shù)據(jù) |
LONGTEXT | 0-4 294 967 295字節(jié) | 極大文本數(shù)據(jù) |
日和期時(shí)間類型
類型 | 大小 | 范圍 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3字節(jié) | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3字節(jié) | '-838:59:59'/'838:59:59' | HH:MM:SS | 時(shí)間值或持續(xù)時(shí)間 |
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 | 混合日期和時(shí)間值 |
TIMESTAMP | 4字節(jié) | 1970-01-01 00:00:00/2038結(jié)束時(shí)間是第 2147483647 秒,北京時(shí)間 2038-1-19 11:14:07,格林尼治時(shí)間 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和時(shí)間值,時(shí)間戳 |
創(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ù),但是自增計(jì)數(shù)不會(huì)被刪除 單純的清掉數(shù)據(jù)
truncate table tablename; # 清空表,相當(dāng)于新的表 自增計(jì)數(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)建:定義表的列時(shí)預(yù)料外鍵字段,之后 constraint fk_t1_t2 foreign key (friend_id) references tablename1(id)); constaint ... foreign key 預(yù)留字段名 references 被關(guān)聯(lián)表名(字段名)
表的補(bǔ)充
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: 自增步長
基于會(huì)話級(jí)別:
show session variables like 'auto_inc%'; 查看全局變量
set session auto_increment_increment=2; 設(shè)置會(huì)話步長
# set session auto_increment_offset=10;
基于全局級(jí)別:
show global variables like 'auto_inc%'; 查看全局變量
set global auto_increment_increment=2; 設(shè)置會(huì)話步長
# set global auto_increment_offset=10;
SqlServer:自增步長:
基于表級(jí)別:
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
外鍵約束本身就實(shí)現(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));
實(shí)現(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));
所有的索引都有一個(gè)共有的作用:加速查找
主鍵約束即在表中定義一個(gè)主鍵來唯一確定表中每一行數(shù)據(jù)的標(biāo)識(shí)符。主鍵可以是表中的某一列或者多列的組合,其中由多列組合的主鍵稱為復(fù)合主鍵。主鍵應(yīng)該遵守下面的規(guī)則:
主鍵聲明的兩種方式:
1、直接在定義字段的時(shí)候聲明為主鍵,但是這樣只能聲明單一字段為主鍵無法聲明 復(fù)合主鍵。
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)系的兩個(gè)表,通過關(guān)系表來唯一確定關(guān)系的時(shí)候,關(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 三個(gè)字段 沒有主鍵
# 添加主鍵
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)合主鍵
主表和從表:
主表(父表):對于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的表就是主表。
從表(子表):對于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中外鍵所在的表就是從表。
外鍵的聲明:
定義時(shí)聲明本篇上述 一對多對應(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表添加外鍵約束
聲明唯一約束的兩種方式:
1、在定義字段時(shí)聲明,這樣的方式像聲明主鍵一樣,同樣的無法聲明聯(lián)合唯一。
create table unique_table0(name char(32) unique ,
company char(32);
2、在字段聲明全部結(jié)束的時(shí)候單獨(dú)的聲明唯一索引,這樣可以聲明成多個(gè)字段的唯一索引 即聯(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;
索引的詳細(xì)介紹戳這里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)該選擇一個(gè)數(shù)據(jù)最整齊、最緊湊的數(shù)據(jù)列(如一個(gè)整數(shù)類型的數(shù)據(jù)列)來創(chuàng)建索引。
索引的通用方法
# 查看索引
show index from table_name;
# 其中 Key_name 字段為索引名
# 刪除索引
drop index index_name on table_name;
普通索引方法
–直接創(chuàng)建索引(length表示使用名稱前1ength個(gè)字符)
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)建表的時(shí)候同時(shí)創(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);
注意命名時(shí)的習(xí)慣了嗎?使用“表名字段1名字段2名”的方式
唯一索引就是唯一約束,與普通索引類似,除索引列的值必須唯一外跟普通索引無異。創(chuàng)建方法和普通索引類似。也就是說唯一約束的創(chuàng)建方式也可以由索引的創(chuàng)建方式創(chuàng)建。
唯一索引簡化了MySQL對這個(gè)索引的管理工作,這個(gè)索引也因此而變得更有效率。
唯一索引是MySQL會(huì)在有新記錄插入數(shù)據(jù)表時(shí),自動(dòng)檢查新記錄的這個(gè)字段的值是否已經(jīng)在某個(gè)記錄的這個(gè)字段里出現(xiàn)過了。
必須為主鍵字段創(chuàng)建一個(gè)索引,這個(gè)索引就是所謂的”主索引”。主索引與唯一索引的唯一區(qū)別是:前者在定義時(shí)使用的關(guān)鍵字是PRIMARY而不是UNIQUE。
如果為某個(gè)外鍵字段定義了一個(gè)外鍵約束條件,MySQL就會(huì)定義一個(gè)內(nèi)部索引來幫助自己以最有效率的方式去管理和使用外鍵約束條件。
MySQL從3.23.23版開始支持全文索引和全文檢索,fulltext索引僅可用于 MyISAM 表;他們可以從CHAR、VARCHAR或TEXT列中作為CREATE TABLE語句的一部分被創(chuàng)建,或是隨后使用ALTER TABLE 或CREATE INDEX被添加。////對于較大的數(shù)據(jù)集,將你的資料輸入一個(gè)沒有FULLTEXT索引的表中,然后創(chuàng)建索引,其速度比把資料輸入現(xiàn)有FULLTEXT索引的速度更為快。不過切記對于大容量的數(shù)據(jù)表,生成全文索引是一個(gè)非常消耗時(shí)間非常消耗硬盤空間的做法。
文本字段上的普通索引只能加快對出現(xiàn)在字段內(nèi)容最前面的字符串(也就是字段內(nèi)容開頭的字符)進(jìn)行檢索操作。如果字段里存放的是由幾個(gè)、甚至是多個(gè)單詞構(gòu)成的較大段文字,普通索引就沒什么作用了。這種檢索往往以LIKE %word%的形式出現(xiàn),這對MySQL來說很復(fù)雜,如果需要處理的數(shù)據(jù)量很大,響應(yīng)時(shí)間就會(huì)很長。
這類場合正是全文索引(full-text index)可以大顯身手的地方。在生成這種類型的索引時(shí),MySQL將把在文本中出現(xiàn)的所有單詞創(chuàng)建為一份清單,查詢操作將根據(jù)這份清單去檢索有關(guān)的數(shù)據(jù)記錄。全文索引即可以隨數(shù)據(jù)表一同創(chuàng)建,也可以等日后有必要時(shí)再使用下面這條命令添加:
ALTER TABLE table_name ADD FULLTEXT(column1, column2)
有了全文索引,就可以用SELECT查詢命令去檢索那些包含著一個(gè)或多個(gè)給定單詞的數(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)
多個(gè)單列索引與單個(gè)多列索引的查詢效果不同,因?yàn)閳?zhí)行查詢時(shí),MySQL只能使用一個(gè)索引,會(huì)從多個(gè)索引中選擇一個(gè)限制最為嚴(yán)格的索引。
平時(shí)用的SQL查詢語句一般都有比較多的限制條件,所以為了進(jìn)一步榨取MySQL的效率,就要考慮建立組合索引。例如上表中針對title和time建立一個(gè)組合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))。建立這樣的組合索引,其實(shí)是相當(dāng)于分別建立了下面兩組組合索引:
–title,time
–title
為什么沒有time這樣的組合索引呢?這是因?yàn)镸ySQL組合索引“最左前綴”的結(jié)果。簡單的理解就是只從最左面的開始組合。并不是只要包含這兩列的查詢都會(huì)用到該組合索引,如下面的幾個(gè)SQL所示
–使用到上面的索引
SELECT * FROM article WHREE title=’測試’ AND time=1234567890;
SELECT * FROM article WHREE title=’測試’;
–不使用上面的索引
SELECT * FROM article WHREE time=1234567890;
排序 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 "張_" # 以張開頭的 兩個(gè)字的
select * from table_name where name like "_浩_%" # 三個(gè)字的 并且中間是 浩 的
日期查詢
select * form table_name where date_key between '2019-10-10' and '2019-10-10';
MySQL比較運(yùn)算符
比較運(yùn)算符 | 說明 |
---|---|
= | 等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
<=> | 安全的等于,不會(huì)返回 UNKNOWN |
<> 或!= | 不等于 |
IS NULL 或 ISNULL | 判斷一個(gè)值是否為 NULL |
IS NOT NULL | 判斷一個(gè)值是否不為 NULL |
LEAST | 當(dāng)有兩個(gè)或多個(gè)參數(shù)時(shí),返回最小值 |
GREATEST | 當(dāng)有兩個(gè)或多個(gè)參數(shù)時(shí),返回最大值 |
BETWEEN AND | 判斷一個(gè)值是否落在兩個(gè)值之間 |
IN | 判斷一個(gè)值是IN列表中的任意一個(gè)值 |
NOT IN | 判斷一個(gè)值不是IN列表中的任意一個(gè)值 |
LIKE | 通配符匹配 |
REGEXP | 正則表達(dá)式匹配 |
sum() 求和
avg() 求平均(期望)
max() 最大值
min() 最小值
conut() 計(jì)數(shù)(求有多少個(gè)記錄)
對聚合函數(shù)的結(jié)果進(jìn)行二次篩選的時(shí)候,條件 應(yīng)該跟在having后 而不是 where 后面。
創(chuàng)建表:part 并插入數(shù)據(jù):
create table part(id int,
name char(32));
創(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));
select part_id,count(part_id) from person group by(part_id);
select * from person,part where part.id = person.part_id; # 有時(shí)候性能可能會(huì)不如下面
select * from person inner join part on part.id = person.part_id; # 性能可能會(huì)更好一些
注意 使用 where 子句定義連接條件比較簡單明了,而 inner join 語法是 ANSI SQL 的標(biāo)準(zhǔn)規(guī)范,使用 inner join 連接語法能夠確保不會(huì)忘記連接條件,而且 where 子句在某些時(shí)候會(huì)影響查詢的性能。
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)實(shí)出來
每個(gè)部門有多少個(gè)人:
select part.name,count(person.name) from person left join part on part.id = person.part_id group by(part.name);
聯(lián)系客服