MySQL :是用於管理數據的軟件javascript
MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。html
分爲服務端和客戶端(也是基於C/S架構的程序)java
服務端:mysql
客戶端:sql
相似軟件數據庫
在LINUX上可RPM或者yum install 。。。便可安裝上windows
在windows上:服務器
MySQL Installer 連接地址:mysql執行文件session
下載完成以後,下一步 下一步便可 具體可訪問此地址查看架構
Windows (x86, 64-bit), ZIP Archive 訪問地址:官網地址
壓縮包形式好處是能夠放置任意目錄
下載完成以後,好比放到windows上的D盤
一、解壓以後 如上圖
二、初始化工做
以管理的身份運行CMD DOS窗口
例如 路徑爲 D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64
就須要在dos窗口 敲 D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64\bin\mysqld --initialize-insecure 此時便可完成初始化操做
默認生成一個root用戶 密碼爲空
三、啓動服務端
D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64\bin\mysqld 在dos窗口執行此行 會出現socket (accept,recv)阻塞 或者 while 循環 input 的效果
四、客戶端鏈接
D:\mysql-5.7.23-winx64\mysql-5.7.23-winx64\bin\mysql -u root -p 密碼爲空 回車便可進入
發送 show databases ; 指令
打開計算機屬性,高級系統設置,環境變量,系統變量框下的path項點擊編輯,將指針移到開頭加上 ; ,而後在分號前面輸入mysql的bin目錄路徑便可。
這樣每次在dos窗口就不須要加路徑這麼長的前綴了 只須要輸入 mysql -u root -p 等等 就好了
可是系統一關機再開機以後 mysql這個服務是沒有自啓動的,每次重啓機器後 都須要 在管理員dos窗口運行一次 mysqld
這樣每次都須要手動執行一遍mysqld 太麻煩了 這裏就能夠製做成windows服務
可在圖形中點擊啓動按鍵
也可在dos(管理員)輸入 net start MySQL 啓動
net stop MySQL 中止
ps:配置文件中的註釋能夠有中文,可是配置項中不能出現中文
#在mysql的解壓目錄下,新建my.ini,而後配置 #1. 在執行mysqld命令時,下列配置會生效,即mysql服務啓動時生效 [mysqld] ;skip-grant-tables port=3306 character_set_server=utf8 default-storage-engine=innodb innodb_file_per_table=1 #解壓的目錄 basedir=E:\mysql-5.7.19-winx64 #data目錄 datadir=E:\my_data #在mysqld --initialize時,就會將初始數據存入此處指定的目錄,在初始化以後,啓動mysql時,就會去這個目錄裏找數據 #2. 針對客戶端命令的全局配置,當mysql客戶端命令執行時,下列配置生效 [client] port=3306 default-character-set=utf8 user=root password=123 #3. 只針對mysql這個客戶端的配置,2中的是全局配置,而此處的則是隻針對mysql這個命令的局部配置 [mysql] ;port=3306 ;default-character-set=utf8 user=egon password=4573 #!!!若是沒有[mysql],則用戶在執行mysql命令時的配置以[client]爲準
#1. 修改配置文件 [mysqld] default-character-set=utf8 [client] default-character-set=utf8 [mysql] default-character-set=utf8 #mysql5.5以上:修改方式有所改動 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8 #2. 重啓服務 #3. 查看修改結果: \s show variables like '%char%';
數據庫的結構大體也分爲
文件夾【數據庫】
文件【表】
數據行【行】
這樣的結構
SQL語句 歸納即爲(CURD)增改查刪
默認的用戶 超級管理員 : root
初始狀態下,管理員root,密碼爲空,默認只容許從本機登陸localhost 設置密碼 mysqladmin -uroot password "123" 設置初始密碼 因爲原密碼爲空,所以-p能夠不用 mysqladmin -uroot -p"123" password "456" 修改mysql密碼,由於已經有密碼了,因此必須輸入原密碼才能設置新密碼
show databases; use 數據庫名稱; show tables; select * from 表名; select name,age,id from 表名; mysql數據庫user表 use mysql; select user,host from user;
建立用戶 create user '用戶名'@'IP地址' identified by '密碼'; 刪除用戶 drop user '用戶名'@'IP地址'; 修改用戶 rename user '用戶名'@'IP地址'; to '新用戶名'@'IP地址';; 修改密碼 set password for '用戶名'@'IP地址' = Password('新密碼') PS:用戶權限相關數據保存在mysql數據庫的user表中,因此也能夠直接對其進行操做(不建議)
建立用戶: create user '用戶名'@'IP地址' identified by '密碼'; create user '用戶名'@'192.168.1.%' identified by '密碼'; create user '用戶名'@'%(表明任意)' identified by '密碼';
受權: grant select,insert,update on 庫名.表名 to '用戶名'@'%'; grant all privileges(表明除受權外的全部權限) on db.表名 to '用戶名'@'%'; 解除權限 revoke all privileges on db.表名 from '用戶名'@'%'; 實際狀況(DBA: 用戶名密碼 會給對應表 或 庫 的相應權限用戶)show grants for'用戶'@'IP地址'-- 查看權限
all privileges 除grant外的全部權限 select 僅查權限 select,insert 查和插入權限 ... usage 無訪問權限 alter 使用alter table alter routine 使用alter procedure和drop procedure create 使用create table create routine 使用create procedure create temporary tables 使用create temporary tables create user 使用create user、drop user、rename user和revoke all privileges create view 使用create view delete 使用delete drop 使用drop table execute 使用call和存儲過程 file 使用select into outfile 和 load data infile grant option 使用grant 和 revoke index 使用index insert 使用insert lock tables 使用lock table process 使用show full processlist select 使用select show databases 使用show databases show view 使用show view update 使用update reload 使用flush shutdown 使用mysqladmin shutdown(關閉MySQL) super 使用change master、kill、logs、purge、master和set global。還容許mysqladmin調試登錄 replication client 服務器位置的訪問 replication slave 由複製從屬使用
對於目標數據庫以及內部其餘: 數據庫名.* 數據庫中的全部 數據庫名.表 指定數據庫中的某張表 數據庫名.存儲過程 指定數據庫中的存儲過程 *.* 全部數據庫
用戶名@IP地址 用戶只能在該IP下才能訪問 用戶名@192.168.1.% 用戶只能在該IP段下才能訪問(通配符%表示任意) 用戶名@% 用戶能夠在任意IP下訪問(默認IP地址爲%)
create database db1; #建立庫
create database db1 default charset utf8;#建立庫設置字符集 *****
show databases; #查看庫
drop database db1; #刪除庫
alter database db1 charset utf8; #改字符集
create table 表名( 列名 類型 是否能夠爲空, 列名 類型 是否能夠爲空 )engine=innodb default charset=utf8; #引擎innodb 字符集
是否可空,null表示空,非字符串 not null - 不可空 null - 可空
默認值,建立列時能夠指定默認值,當插入數據時若是未主動設置,則自動添加默認值 create table tb1( id int not null defalut 0, num int not null )
自增,若是爲某列設置自增列,插入數據時無需設置此列,默認將自增(表中只能有一個自增列) create table tb1( nid int not null auto_increment primary key, num int null ) 或 create table tb1( nid int not null auto_increment, num int null, index(nid) ) 注意:1、對於自增列,必須是索引(含主鍵)。 2、對於自增能夠設置步長和起始值 show session variables like 'auto_inc%'; set session auto_increment_increment=2; set session auto_increment_offset=10; shwo global variables like 'auto_inc%'; set global auto_increment_increment=2; set global auto_increment_offset=10;
主鍵,一種特殊的惟一索引,不容許有空值,若是主鍵使用單個列,則它的值必須惟一,若是是多列,則其組合必須惟一。 create table tb1( nid int not null auto_increment primary key, num int null ) 或 create table tb1( nid int not null, num int not null, primary key(nid,num) )
外鍵,一個特殊的索引,只能是指定內容 creat table color( nid int not null primary key, name char(16) not null ) create table fruit( nid int not null primary key, smt char(32) null , color_id int not null, constraint fk_cc foreign key (color_id) references color(nid) )
注意點:
引擎 innodb 支持事務,原子性操做
myisam 查詢速度快 不支持事務
auto_increment 表示:自增
修改自增ID起始值:
alter table users AUTO_INCREMENT=123456;
primary key 主鍵 表示: 約束(不能重複且不能爲空); 加速查找
drop table 表名
1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增長字段 ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…], ADD 字段名 數據類型 [完整性約束條件…]; ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] FIRST; ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名; 3. 刪除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 數據類型 [完整性約束條件…]; ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…]; ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…]; 添加主鍵: alter table 表名 add primary key(列名); 刪除主鍵: alter table 表名 drop primary key; alter table 表名 modify 列名 int, drop primary key; 添加外鍵:alter table 從表 add constraint 外鍵名稱(形如:FK_從表_主表) foreign key 從表(外鍵字段) references 主表(主鍵字段); 刪除外鍵:alter table 表名 drop foreign key 外鍵名稱 修改默認值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; 刪除默認值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
示例: 1. 修改存儲引擎 mysql> alter table service -> engine=innodb; 2. 添加字段 mysql> alter table student10 -> add name varchar(20) not null, -> add age int(3) not null default 22; mysql> alter table student10 -> add stu_num varchar(10) not null after name; //添加name字段以後 mysql> alter table student10 -> add sex enum('male','female') default 'male' first; //添加到最前面 3. 刪除字段 mysql> alter table student10 -> drop sex; mysql> alter table service -> drop mac; 4. 修改字段類型modify mysql> alter table student10 -> modify age int(3); mysql> alter table student10 -> modify id int(11) not null primary key auto_increment; //修改成主鍵 5. 增長約束(針對已有的主鍵增長auto_increment) mysql> alter table student10 modify id int(11) not null primary key auto_increment; ERROR 1068 (42000): Multiple primary key defined mysql> alter table student10 modify id int(11) not null auto_increment; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 6. 對已經存在的表增長複合主鍵 mysql> alter table service2 -> add primary key(host_ip,port); 7. 增長主鍵 mysql> alter table student1 -> modify name varchar(10) not null primary key; 8. 增長主鍵和自動增加 mysql> alter table student1 -> modify id int not null primary key auto_increment; 9. 刪除主鍵 a. 刪除自增約束 mysql> alter table student10 modify id int(11) not null; b. 刪除主鍵 mysql> alter table student10 -> drop primary key;
複製表結構+記錄 (key不會複製: 主鍵、外鍵和索引) mysql> create table new_service select * from service; 只複製表結構 mysql> select * from service where 1=2; //條件爲假,查不到任何記錄 Empty set (0.00 sec) mysql> create table new1_service select * from service where 1=2; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> create table t4 like employees;
show tables ; 查全部表 desc tablename; 查看錶結構 desc 庫名.表名;
show create table 表名;
MySQL的數據類型大體分爲:數值、時間和字符串
bit[(M)] 二進制位(101001),m表示二進制位的長度(1-64),默認m=1 tinyint[(m)] [unsigned] [zerofill] 小整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -128 ~ 127. 無符號: 0 ~ 255 特別的: MySQL中無布爾值,使用tinyint(1)構造。 int[(m)][unsigned][zerofill] 整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -2147483648 ~ 2147483647 無符號: 0 ~ 4294967295 特別的:整數類型中的m僅用於顯示,對存儲範圍無限制。例如: int(5),當插入數據2時,select 時數據顯示爲: 00002 bigint[(m)][unsigned][zerofill] 大整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -9223372036854775808 ~ 9223372036854775807 無符號: 0 ~ 18446744073709551615 decimal[(m[,d])] [unsigned] [zerofill] 準確的小數值,m是數字總個數(負號不算),d是小數點後個數。 m最大值爲65,d最大值爲30。 特別的:對於精確數值計算時須要用此類型 decaimal可以存儲精確值的緣由在於其內部按照字符串存儲。 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 單精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。 無符號: -3.402823466E+38 to -1.175494351E-38, 0 1.175494351E-38 to 3.402823466E+38 有符號: 0 1.175494351E-38 to 3.402823466E+38 **** 數值越大,越不許確 **** DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 雙精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。 無符號: -1.7976931348623157E+308 to -2.2250738585072014E-308 0 2.2250738585072014E-308 to 1.7976931348623157E+308 有符號: 0 2.2250738585072014E-308 to 1.7976931348623157E+308 **** 數值越大,越不許確 **** char (m) char數據類型用於表示固定長度的字符串,能夠包含最多達255個字符。其中m表明字符串的長度。 PS: 即便數據小於m長度,也會佔用m長度 varchar(m) varchars數據類型用於變長的字符串,能夠包含最多達255個字符。其中m表明該數據類型所容許保存的字符串的最大長度,只要長度小於該最大值的字符串均可以被保存在該數據類型中。 注:雖然varchar使用起來較爲靈活,可是從整個系統的性能角度來講,char數據類型的處理速度更快,有時甚至能夠超出varchar處理速度的50%。所以,用戶在設計數據庫時應當綜合考慮各方面的因素,以求達到最佳的平衡 text text數據類型用於保存變長的大字符串,能夠組多到65535 (2**16 − 1)個字符。 mediumtext A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters. longtext A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters. enum 枚舉類型, An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.) 示例: CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small'); set 集合類型 A SET column can have a maximum of 64 distinct members. 示例: CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); DATE YYYY-MM-DD(1000-01-01/9999-12-31) TIME HH:MM:SS('-838:59:59'/'838:59:59') YEAR YYYY(1901/2155) DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) TIMESTAMP YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時)
詳細參考: 數據類型介紹
insert into 表 (列名,列名...) values (值,值,值...) insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...) insert into 表 (列名,列名...) select (列名,列名...) from 表
delete from 表 delete from 表 where id=1 and name='xxx'
update 表 set name = 'xxx' where id>1 #where 後跟的是條件
select * from 表 select * from 表 where id > 1 select uid,name,gender as gg from 表 where id > 1
delete from 表名 下次再插入數據 自增鍵從上次表數據id 接着寫 truncate table 表名 下次再插入數據 id從1開始
文件夾:庫 增 create database db1 charset utf8; 刪 drop database db2; 改 alter database db2 charset gbk; 查 show create database db2; 文件:表 須要先進入庫 use 庫名 (切換文件夾) 增 create table tb1( id int auto_increment primary key, name varchar(10), sex char(6) )engine=innodb charset=utf8; 刪 drop table tb1; 改 alter table db2.tb1 modify name char(10); 查 desc tb1; desc db2.tb1; show tables; 文件一行行內容(表內容) 增 insert into db2.tb1(name,sex) values ('mogu','male'), ('小明','female'), ('小火柴','male') ; 刪 delete from db2.tb1 where id >(<,=,!=)num; 改 update db2.tb1 set name='mogugu' where id =3; 查 select * from db2.tb1 ; 索引技術 減小IO 優化查詢 清空表 delete from db2.tb1; 自增id 不清空 truncate db2.tb1; 自增id 也清空