一、資料庫介紹
1、資料庫的由來
我們之前所學,資料要想永久儲存,都是儲存于檔案中,毫無疑問,一個檔案僅僅隻能存在于某一台機器上,這樣就帶來了許多問題:
(1)程式所有的元件就不可能運作在一台機器上
(2)資料安全問題
(3)并發問題
總結:我們在編寫任何程式之前,都需要事先寫好基于網絡操作一台主機上檔案的程式(socket服務端與用戶端程式),于是有人将此類程式寫成一個專門的處理軟體,這就是mysql等資料庫管理軟體的由來,mysql不僅僅解決的是資料共享的問題,還有查詢效率,安全性等一系列問題,總之,把程式員從資料管理中解脫出來,專注于自己的程式邏輯的編寫。
2、資料庫說明
資料庫伺服器 -:運作資料庫管理軟體
資料庫管理軟體:管理 - 資料庫
資料庫:即檔案夾,用來組織檔案 / 表
表:即檔案,用來存放多行内容 / 多條記錄
3、mysql介紹
MySQL是一個關系型資料庫管理系統
(1)分兩大類:
關系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql語句通用
非關系型:mongodb,redis,memcache
(2)可以簡單的了解為:
關系型資料庫需要有表結構
非關系型資料庫是key-value存儲的,沒有表結構
二、操作
1、mysql資料庫環境準備
環境:window7_X86_64
版本:mysql-5.6.38-winx64.zip
下載下傳位址:https://dev.mysql.com/downloads/mysql/
檔案路徑:E:\mysql-5.6.38-winx64
添加到環境變量:計算機---->屬性---->進階系統設定---->環境變量---->系統變量---->path---->E:\mysql-5.6.38-winx64\bin\;
2、登入和設定密碼
1
2
3
4
5
<code>C:\Users\Administrator> mysqld </code><code>-</code><code>-</code><code>install</code>
<code>C:\Users\Administrator> net start MySQL </code><code>#啟動mysql資料庫</code>
<code>C:\Users\Administrator> mysql </code><code>#預設使用者不用密碼可以直接登入</code>
<code>mysql> select user(); </code><code>#檢視目前登入使用者,顯示的是ODBC使用者</code>
<code>C:\Users\Administrator> mysqladmin </code><code>-</code><code>uroot </code><code>-</code><code>p password </code><code>"123"</code> <code>#設定root賬号的密碼是123</code>
3、重置密碼
6
7
8
9
10
11
12
13
14
<code>C:\Users\Administrator> net stop MySQL</code>
<code>C:\Users\Administrator> mysqld </code><code>-</code><code>-</code><code>skip</code><code>-</code><code>grant</code><code>-</code><code>tables</code>
<code>新打開一個終端操作:</code>
<code>C:\Users\Administrator> mysql </code><code>-</code><code>uroot </code><code>-</code><code>p</code>
<code>mysql > update mysql.user </code><code>set</code> <code>password</code><code>=</code><code>password("</code><code>") where user='root' and host="</code><code>localhost";</code>
<code>mysql > flush privileges;</code>
<code>mysql> exit;</code>
<code>C:\Users\Administrator>tasklist |findstr mysql </code><code>#檢視mysql服務的程序号</code>
<code>mysqld.exe </code><code>6316</code> <code>Console </code><code>1</code> <code>454</code><code>,</code><code>544</code> <code>K</code>
<code>C:\Users\Administrator>taskkill </code><code>/</code><code>F </code><code>/</code><code>PID </code><code>6316</code> <code>#結束mysql服務</code>
<code>C:\Users\Administrator>net start MySQL </code><code>#啟動mysql服務</code>
<code>C:\Users\Administrator> mysql </code><code>-</code><code>uroot </code><code>-</code><code>p </code><code>#登入不需要密碼了</code>
4、同一字元編碼
#mysql5.5以上的配置檔案配置
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
mysql> show variables like '%char%'; #檢視字元編碼
5、SQL語言介紹
SQL語言主要用于存取資料、查詢資料、更新資料和管理關系資料庫系統,SQL語言由IBM開發。SQL語言分為3種類型:
#1、DDL語句 資料庫定義語言: 資料庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER
#2、DML語句 資料庫操縱語言: 插入資料INSERT、删除資料DELETE、更新資料UPDATE、查詢資料SELECT
#3、DCL語句 資料庫控制語言: 例如控制使用者的通路權限GRANT、REVOKE
(1)操作檔案夾
增:create database db1 charset utf8;
查:show databases;
改:alter database db1 charset latin1;
删除: drop database db1;
(2)操作檔案
先切換到檔案夾下:use db1
增:create table t1(id int, name char);
查:show tables
改:alter table t1 modify name char(3); alter table t1 change name name1 char(2);
删:drop table t1;
(3)操作檔案中的内容/記錄
增:insert into t1 values(1, 'egon1'), (2, 'egon2'), (3, 'egon3');
查:select * from t1;
改:update t1 set name = 'sb' where id = 2;
删:delete from t1 where id = 1;
清空表:
delete from t1; # 如果有自增id,新增的資料,仍然是以删除前的最後一樣作為起始。
truncate table t1; 資料量大,删除速度比上一條快,且直接從零開始,
auto_increment 表示:自增
primary key 表示:限制(不能重複且不能為空);加速查找
6、庫操作
(1)檢視資料庫
show databases;
show create database db1;
select database();
(2)選擇資料庫
USE 資料庫名
(3) 删除資料庫
DROP DATABASE 資料庫名;
(4)修改資料庫
alter database db1 charset utf8;
7、表操作
(1)建立表
#注意:
1. 在同一張表中,字段名是不能相同
2. 寬度和限制條件可選
3. 字段名和類型是必須的
15
<code>mysql> show engines; </code><code>#顯示所有的存儲引擎</code>
<code>mysql> use db1</code>
<code>mysql> create table t1(</code><code>id</code> <code>int</code><code>)engine</code><code>=</code><code>innodb;</code>
<code>mysql> create table t2(</code><code>id</code> <code>int</code><code>)engine</code><code>=</code><code>myisam;</code>
<code>mysql> create table t3(</code><code>id</code> <code>int</code><code>)engine</code><code>=</code><code>memory;</code>
<code>mysql> create table t4(</code><code>id</code> <code>int</code><code>)engine</code><code>=</code><code>blackhole;</code>
<code>mysql> show tables; </code><code>#檢視db1庫下的所有的表名</code>
<code>mysql> desc t1; </code>
<code> </code><code>#檢視t1表的表結構</code>
<code>#memory存儲引擎,在重新開機mysql或者重新開機機器後,表内資料清空</code>
<code>#blackhole存儲引擎,往表内插入任何資料,都相當于丢入黑洞,表内永遠不存記錄</code>
<code>mysql> create table db1.f2 select user,host </code><code>from</code> <code>mysql.user; </code><code>#複制表</code>
<code>mysql> create table db1.f3 select user,host </code><code>from</code> <code>mysql.user where </code><code>1</code><code>=</code><code>2</code><code>; </code><code>#隻複制表結構(查詢的結果不存在,沒有值)</code>
<code>mysql> create table db1.f4 like mysql.user; </code><code>#隻複制表結構</code>
(2)日期類型
<code>create table student(</code>
<code> </code><code>id</code> <code>int</code><code>,</code>
<code> </code><code>name char(</code><code>16</code><code>),</code>
<code> </code><code>born_year year,</code>
<code> </code><code>birth_date date,</code>
<code> </code><code>class_time time,</code>
<code> </code><code>reg_time datetime</code>
<code>);</code>
<code>insert into student values(</code><code>1</code><code>,</code><code>'wang'</code><code>,now(),now(),now(),now()); </code><code>#插入目前時間</code>
<code>insert into student values(</code><code>2</code><code>,</code><code>'wang'</code><code>,</code><code>'1999'</code><code>,</code><code>'1999-11-11'</code><code>,</code><code>'11:11:11'</code><code>,</code><code>"1990-11-11 11:11:11"</code><code>); </code><code>#插入指定時間</code>
(3)字元類型
#char類型:定長,簡單粗暴,浪費空間,存取速度快
字元長度範圍:0-255(一個中文是一個字元,是utf8編碼的3個位元組)
#varchar類型:變長,精準,節省空間,存取速度慢
字元長度範圍:0-65535(如果大于21845會提示用其他類型 。mysql行最大限制為65535位元組,字元編碼為utf-8)
#常用字元串系列:char與varchar
注:雖然varchar使用起來較為靈活,但是char資料類型的處理速度更快,有時甚至可以超出varchar處理速度的50%。是以,使用者在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡
#寬度代表的是字元的個數
create table t6(name char(5));
create table t7(name varchar(5));
(4)修改表ALTER TABLE
文法:
#1.修改表名
ALTER TABLE 表名 RENAME 新表名;
#2.增加字段
ALTER TABLE 表名
ADD 字段名 資料類型[完整性限制條件…],
ADD 字段名 資料類型[完整性限制條件…];
ADD 字段名 資料類型[完整性限制條件…] FIRST;
ADD 字段名 資料類型[完整性限制條件…] AFTER 字段名;
#3.删除字段
DROP 字段名;
#4.修改字段
MODIFY 字段名 資料類型[完整性限制條件…];
CHANGE 舊字段名 新字段名 舊資料類型[完整性限制條件…];
CHANGE 舊字段名 新字段名 新資料類型[完整性限制條件…];
#5.删除表
DROP TABLE 表名;
示例:
#1.修改存儲引擎
mysql > alter table service engine = innodb;
#2.添加字段
<code>mysql > alter table student10</code>
<code> </code><code>-</code><code>> add name varchar(</code><code>20</code><code>) </code><code>not</code> <code>null,</code>
<code> </code><code>-</code><code>> add age </code><code>int</code><code>(</code><code>3</code><code>) </code><code>not</code> <code>null default </code><code>22</code><code>;</code>
<code> </code>
<code>mysql > alter table student10 add stu_num varchar(</code><code>10</code><code>) </code><code>not</code> <code>null after name; </code><code>/</code><code>/</code> <code>添加name字段之後</code>
<code>mysql > alter table student10 add sex enum(</code><code>'male'</code><code>, </code><code>'female'</code><code>) default </code><code>'male'</code> <code>first; </code><code>/</code><code>/</code> <code>添加到最前面</code>
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 auto_increment;
#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;
(5)枚舉類型與集合類型
字段的值隻能在給定範圍中選擇,如單選框,多選框
enum 單選 隻能在給定的範圍内選一個值
set 多選 在給定的範圍内可以選擇一個或一個以上的值
<code>create table employee(</code>
<code> </code><code>name char(</code><code>10</code><code>),</code>
<code> </code><code>sex enum(</code><code>'male'</code><code>,</code><code>'female'</code><code>,</code><code>'other'</code><code>),</code>
<code> </code><code>hobbies </code><code>set</code><code>(</code><code>'play'</code><code>,</code><code>'eat'</code><code>,</code><code>'music'</code><code>,</code><code>'read'</code><code>)</code>
<code>insert into employee values(</code><code>1</code><code>,</code><code>'li'</code><code>,</code><code>'male'</code><code>,</code><code>'music,read'</code><code>);</code>
<code>insert into employee values(</code><code>2</code><code>,</code><code>'wang'</code><code>,</code><code>'xxxx'</code><code>,</code><code>'music,read'</code><code>);</code>
<code></code>
本文轉自 宋鵬超 51CTO部落格,原文連結:http://blog.51cto.com/qidian510/2072077,如需轉載請自行聯系原作者