MySQL學習筆記(一)
一、概述
1、數據庫、數據庫系統、數據庫管理系統之間的關系?
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。
數據庫管理系統:用來管理數據及數據庫的系統
數據庫系統:數據庫、數據庫管理系統、硬件、操作人員的合在一起的總稱。
數據庫系統包含數據庫管理系統、數據庫及數據庫開發工具所開發的軟件(數據庫應用系統)。
二、mysql的下載安裝
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件。
與其他的大型數據庫LAMP例如 Oracle、DB2、SQL Server等相比,MySQL 自有它的不足之處,但是這絲毫也沒有減少它受歡迎的程度。對於一般的個人使用者和中小型企業來說,MySQL提供的功能已經綽綽有余,而且由於 MySQL是開放源碼軟件,因此可以大大降低總體擁有成本
下面就Mysql的linux與Windows版本的安裝分別介紹:
windows版本
1、下載
網址 http://dev.mysql.com/downloads/mysql/ 下載完成後一路點點點就ok
2、添加環境變量
將剛剛安裝的mysql的bin目錄路徑加入環境變量 環境變量:計算機->右鍵(屬性)->高級系統設置->環境變量-> 修改系統變量中的path,把mysql的bin目錄路徑加上即可(註意分號)
3、將mysql制作成windows服務
命令行輸入 mysqld --install 移除服務: mysqld --remove 註冊成服務後,以後啟動和關閉就可使用以下命令 啟動: net start mysql 關閉: net stop mysql
4、mysql初始化
命令行輸入如下命令
mysqld --initialize-insecure
5、啟動mysql服務
命令行輸入:
mysqld
6、連接mysql
#命令行輸入: mysql -u root -p #提示輸入密碼,由於剛初始化並未設置密碼,直接敲回車
linux版本
這個就比較省事了,一條命令搞定
下載安裝:
yum install mysql-server
啟動服務
mysql.server start
連接mysql
mysql -u root -p
三、數據庫操作
1、顯示數據庫
SHOW DATABASES;
默認數據庫
mysql - 用戶權限相關數據 test - 用於用戶測試數據 information_schema - MySQL本身架構相關數據
2、創建數據庫
#utf-8 CREATE DATABASE 數據庫名稱 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; #如CREATE DATABASE mytest DEFAULT CHARSET utf8 COLLATE utf8_general_ci; #gbk CREATE DATABASE 數據庫名稱 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;#如CREATE DATABASE mytest DEFAULT CHARSET gbk COLLATE gbk_chinese_ci;
3、使用數據庫
USE 數據庫名 #如use mytest
4、查看表
show tables
由於未創建表,現在顯示空表
5、用戶管理與授權
創建用戶
命令: CREATE USER ‘username‘@‘host‘ IDENTIFIED BY ‘password‘; 說明: username:你將創建的用戶名 host:指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠程主機登陸,可以使用通配符% password:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務器 ex: CREATE USER ‘xiaohua‘@‘localhost‘ IDENTIFIED BY ‘123456‘; CREATE USER ‘taiyang‘@‘192.168.1.110_‘ IDENDIFIED BY ‘123456‘; CREATE USER ‘xiaozhu‘@‘%‘ IDENTIFIED BY ‘123456‘;
授權
命令: GRANT privileges ON databasename.tablename TO ‘username‘@‘host‘ 說明: privileges:用戶的操作權限,如SELECT,INSERT,UPDATE等,如果要授予所的權限則使用ALL databasename:數據庫名 tablename:表名,如果要授予該用戶對所有數據庫和表的相應操作權限則可用*表示,如*.* ex: GRANT SELECT, INSERT ON mytest.user TO ‘xiaohua‘@‘%‘; GRANT ALL ON *.* TO ‘xiaohua‘@‘%‘;
設置用戶密碼
命令 SET PASSWORD FOR ‘username‘@‘host‘ = PASSWORD(‘newpassword‘); 如果要修改當前用戶 SET PASSWORD = PASSWORD("newpassword"); ex: SET PASSWORD FOR ‘xiaohua‘@‘%‘ = PASSWORD("123456");
撤銷用戶權限
命令: REVOKE privilege ON databasename.tablename FROM ‘username‘@‘host‘; 說明: privilege, databasename, tablename:同授權部分 ex: REVOKE SELECT ON *.* FROM ‘xiaohua‘@‘%‘;
刪除用戶
命令: DROP USER ‘username‘@‘host‘;
數據表操作
創建表
命令: CREATE TABLE table_name (column_name column_type); 如: create table student( id int not null auto_increment primary key, name varchar(20) not null, age int not null )engine=innodb charset=utf8; 說明: 1、如果你不想字段為 NULL 可以設置字段的屬性為 NOT NULL, 在操作數據庫時如果輸入該字段的數據為NULL ,就會報錯。 2、AUTO_INCREMENT定義列為自增的屬性,一般用於主鍵,數值會自動加1。 3、PRIMARY KEY關鍵字用於定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。 4、ENGINE 設置存儲引擎,CHARSET 設置編碼。
刪除表
命令:
drop table 表名
清空表:
delete from 表名 truncate table 表名 drop table 表名
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。 DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。
TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。
TRUNCATE,DELETE,DROP放在一起比較:
TRUNCATE TABLE:刪除內容、釋放空間但不刪除定義。
DELETE TABLE:刪除內容不刪除定義,不釋放空間。
DROP TABLE:刪除內容和定義,釋放空間。
truncate、delete、drop區別
修改表
添加列:alter table 表名 add 列名 類型 刪除列:alter table 表名 drop column 列名 修改列: alter table 表名 modify column 列名 類型; -- 類型 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、增
命令: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 如: insert into student(name,age) values(‘豆豆‘,8);
2、刪
命令: DELETE FROM table_name [WHERE Clause] 說明:WHERE Clause後面跟的是條件 如: delete from student where age<18; #從student表中刪除年齡小於18的數據
3、改
命令: UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] 說明: 1、你可以同時更新一個或多個字段。 2、你可以在 WHERE 子句中指定任何條件。 3、你可以在一個單獨表中同時更新數據。 如: update student set name=‘xiaohua‘,age=18 where age<18;
4、 查
命令: SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M] 說明: 1、查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用2、WHERE語句來設定查詢條件。 3、SELECT 命令可以讀取一條或者多條記錄。 4、你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數據 5、你可以使用 WHERE 語句來包含任何條件。 6、你可以使用 LIMIT 屬性來設定返回的記錄數。 7、你可以通過OFFSET指定SELECT語句開始查詢的數據偏移量。默認情況下偏移量為0。 如: 查看student表中age等於18的學生的姓名 select name from student where age=18;
5、其他
a、條件 select * from 表 where id > 1 and name != ‘xiaohua‘ and age = 18; select * from 表 where id between 5 and 16; select * from 表 where id in (11,22,33) select * from 表 where id not in (11,22,33) select * from 表 where id in (select nid from 表) b、通配符 select * from 表 where name like ‘xiao%‘ - xiao開頭的所有(多個字符串) select * from 表 where name like ‘xiaohu_‘ - xiaohu開頭的所有(一個字符) c、限制 select * from 表 limit 5; - 前5行 select * from 表 limit 4,5; - 從第4行開始的5行 select * from 表 limit 5 offset 4 - 從第4行開始的5行 d、排序 select * from 表 order by 列 asc - 根據 “列” 從小到大排列 select * from 表 order by 列 desc - 根據 “列” 從大到小排列 select * from 表 order by 列1 desc,列2 asc - 根據 “列1” 從大到小排列,如果相同則按列2從小到大排序 e、分組 select num from 表 group by num select num,nid from 表 group by num,nid select num,nid from 表 where nid > 10 group by num,nid order nid desc select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid select num from 表 group by num having max(id) > 10 特別的:group by 必須在where之後,order by之前 f、連表 無對應關系則不顯示 select A.num, A.name, B.name from A,B Where A.nid = B.nid 無對應關系則不顯示 select A.num, A.name, B.name from A inner join B on A.nid = B.nid A表所有顯示,如果B中無對應關系,則值為null select A.num, A.name, B.name from A left join B on A.nid = B.nid B表所有顯示,如果B中無對應關系,則值為null select A.num, A.name, B.name from A right join B on A.nid = B.nid g、組合 組合,自動處理重合 select nickname from A union select name from B 組合,不處理重合 select nickname from A union all select name from B
基本數據類型
MySQL的數據類型大致分為:數值、時間和字符串
數值類型
時間及日期類型
字符串類型
MySQL學習筆記(一)