天天看點

mysql的庫和表相關操作

一、資料庫介紹

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&gt; mysqld </code><code>-</code><code>-</code><code>install</code>

<code>C:\Users\Administrator&gt; net start MySQL                   </code><code>#啟動mysql資料庫</code>

<code>C:\Users\Administrator&gt; mysql                         </code><code>#預設使用者不用密碼可以直接登入</code>

<code>mysql&gt; select user();                               </code><code>#檢視目前登入使用者,顯示的是ODBC使用者</code>

<code>C:\Users\Administrator&gt; 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&gt; net stop MySQL</code>

<code>C:\Users\Administrator&gt; 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&gt; mysql </code><code>-</code><code>uroot </code><code>-</code><code>p</code>

<code>mysql &gt; 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 &gt; flush privileges;</code>

<code>mysql&gt; exit;</code>

<code>C:\Users\Administrator&gt;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&gt;taskkill </code><code>/</code><code>F </code><code>/</code><code>PID </code><code>6316</code>               <code>#結束mysql服務</code>

<code>C:\Users\Administrator&gt;net start MySQL                  </code><code>#啟動mysql服務</code>

<code>C:\Users\Administrator&gt; 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&gt; 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&gt; show engines;                      </code><code>#顯示所有的存儲引擎</code>

<code>mysql&gt; use db1</code>

<code>mysql&gt; create table t1(</code><code>id</code> <code>int</code><code>)engine</code><code>=</code><code>innodb;</code>

<code>mysql&gt; create table t2(</code><code>id</code> <code>int</code><code>)engine</code><code>=</code><code>myisam;</code>

<code>mysql&gt; create table t3(</code><code>id</code> <code>int</code><code>)engine</code><code>=</code><code>memory;</code>

<code>mysql&gt; create table t4(</code><code>id</code> <code>int</code><code>)engine</code><code>=</code><code>blackhole;</code>

<code>mysql&gt; show tables;                          </code><code>#檢視db1庫下的所有的表名</code>

<code>mysql&gt; desc t1;  </code>

<code>                            </code><code>#檢視t1表的表結構</code>

<code>#memory存儲引擎,在重新開機mysql或者重新開機機器後,表内資料清空</code>

<code>#blackhole存儲引擎,往表内插入任何資料,都相當于丢入黑洞,表内永遠不存記錄</code>

<code>mysql&gt; create table db1.f2 select user,host </code><code>from</code> <code>mysql.user;          </code><code>#複制表</code>

<code>mysql&gt; 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&gt; 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 &gt; alter table service engine = innodb;

#2.添加字段

<code>mysql &gt; alter table student10</code>

<code>        </code><code>-</code><code>&gt; add name varchar(</code><code>20</code><code>) </code><code>not</code> <code>null,</code>

<code>        </code><code>-</code><code>&gt; 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 &gt; 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 &gt; 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 &gt; alter table student10 drop sex;

mysql &gt; alter table service drop mac;

#4.修改字段類型modify

mysql &gt; alter table student10 modify age int(3);

mysql &gt; alter table student10 modify id int(11) not null primary key auto_increment;    // 修改為主鍵

#5.增加限制(針對已有的主鍵增加auto_increment)

mysql &gt; alter table student10 modify id int(11) not null auto_increment;

#6.對已經存在的表增加複合主鍵

mysql &gt; alter table service2 add primary key(host_ip, port);

#7.增加主鍵

mysql &gt; alter table student1 modify name varchar(10) not null primary key;

#8.增加主鍵和自動增長

mysql &gt; alter table student1 modify id int not null primary key auto_increment;

#9.删除主鍵

a.删除自增限制

mysql &gt; alter table student10 modify id int(11) not null;

b.删除主鍵

mysql &gt; 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,如需轉載請自行聯系原作者

下一篇: puppet部署