1. 程式人生 > >linux學習37-MySQL資料庫2

linux學習37-MySQL資料庫2

MySQL資料庫2

  • 資料庫建立
  • 表操作,增、刪、改、查、分組、排序等
  • SQL語句例項
  • 多表操作
  • 檢視及自定義函式

1 多例項操作

  • 實現多例項需要手動建立的檔案
    1. 使用者以及組
    2. 資料庫的檔案目錄
    3. 配置檔案
    4. 資料庫的啟動指令碼
    5. 資料庫存放系統內容的資料庫
  • 相同版本資料庫實現多例項, 這裡以yum安裝方式為例 同一個版本的資料庫程式,來實現多例項,其二進位制程式可以不改動,賬號可以相同,相關配置需獨立建設,比如資料庫的資料夾,配置檔案,服務的啟動指令碼定義各自的埠號
    1. 計劃建立3個同版本例項,使用的埠號為3306,3307,3308;安裝軟體,由於是基於同一個版本,所以安裝一次軟體即可,yum安裝會自動生成賬號
      [
      [email protected] ~]$yum install mariadb-server
    2. 規劃目錄存放路徑,建立目錄,結構如下所示
      [[email protected] /data]$mkdir /data/mysql/{3306,3307,3308}/{etc,data,socket,log,bin,pid} -p
      [[email protected] /data]$tree
      .
      └── mysql
          ├── 3306
          │   ├── bin
          │   ├── data
          │   ├── etc
          │   ├── log
          │   ├── pid
          │   └── socket
      ..
      .... <==3307/3308結構相同,這裡省略
      將建成的目錄及檔案,所屬組及所有者都改為mysql
      [[email protected] /data]$chown -R mysql.mysql mysql
      
    3. 生成資料庫必要檔案,安裝包內自帶的指令碼mysql_install_db,支援help,可以檢視修改幫助,這裡需要修改的路徑為資料庫路徑,使用者名稱
      [root@hai7-8 /data]$/usr/bin/mysql_install_db  --help
      '執行三次,分別生成3306,3307,3308的資料庫檔案'
      [root@hai7-8 /data]$/usr/bin/mysql_install_db  --
      datadir=/data/mysql/3306/data --user=mysql [root@hai7-8 /data]$/usr/bin/mysql_install_db --datadir=/data/mysql/3307/data --user=mysql [root@hai7-8 /data]$/usr/bin/mysql_install_db --datadir=/data/mysql/3308/data --user=mysql
    4. 準備配置檔案,拷貝系統自帶的my.cnf作為模板來修改
      '1. 拷貝模板檔案'
      [[email protected] /data]$cp /etc/my.cnf  /data/mysql/3306/etc/
      '2. 修改模板為我們規劃的路徑'
      [[email protected] /data]$vim mysql/3306/etc/my.cnf 
      [mysqld]
      port=3306                        <==預設為3306埠,使用此埠可以不用指定,非預設埠需要指定
      datadir=/data/mysql/3306/data    <==存放資料路徑
      socket=/data/mysql/3306/socket/mysql.sock    <==socket檔案路徑
      symbolic-links=0                             <==預設,不需要修改
      [mysqld_safe]
      log-error=/data/mysql/3306/log/mariadb.log   <==日誌檔案路徑
      pid-file=/data/mysql/3306/pid/mariadb.pid    <==程序檔案路徑
      #!includedir /etc/my.cnf.d                   <==註釋掉此項
      '3. 拷貝修改後的檔案,分別建立3307,3308的配置檔案,將檔案內容修改為3307和3308'
      [[email protected] /data]$cp  mysql/3306/etc/my.cnf mysql/3307/etc/my.cnf 
      [[email protected] /data]$cp  mysql/3306/etc/my.cnf mysql/3308/etc/my.cnf 
      
    5. 準備服務啟動指令碼,指令碼內容如下命名為mysqld,拷貝到各例項的bin目錄下
      [[email protected] /data]$cp mysqld  /data/mysql/3306/bin/
      [[email protected] /data]$cp /data/mysql/3306/bin/mysqld  /data/mysql/3307/bin/
      [[email protected] /data]$cp /data/mysql/3306/bin/mysqld  /data/mysql/3308/bin/
      '將配置檔案埠已經根目錄修改後,加上執行許可權'
      [[email protected] /data]$chmod +x /data/mysql/3306/bin/mysqld 
      [[email protected] /data]$chmod +x /data/mysql/3307/bin/mysqld 
      [[email protected] /data]$chmod +x /data/mysql/3308/bin/mysqld 
      
      指令碼內容
      #!/bin/bash
      
      port=3306                 <==埠變數
      mysql_user="root"         <==啟動mysql的使用者身份
      mysql_pwd=""              <==指定root口令
      cmd_path="/usr/bin"       <==二進位制程式路徑,如果是二進位制安裝這裡是/usr/local/bin,編譯安裝為編譯時指定的路徑
      mysql_basedir="/mysqldb"  <==以哪個目錄為根,這裡要修改為上面規劃的/data/mysql
      mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
      
      function_start_mysql()    <==負責啟動mysql的函式,關鍵部分為通過mysqld_safe程式,讀取--defaults-file=的配置檔案
      {
          if [ ! -e "$mysql_sock" ];then
            printf "Starting MySQL...\n"
            ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
          else
            printf "MySQL is running...\n"
            exit
          fi
      }
      
      
      function_stop_mysql()    <==負責停止mysql的函式,關鍵部分為通過mysqladmin shutdown關閉指定埠的mysql
      {
          if [ ! -e "$mysql_sock" ];then
             printf "MySQL is stopped...\n"
             exit
          else
             printf "Stoping MySQL...\n"
             ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
         fi
      }
      
      
      function_restart_mysql()   <==負責重啟mysql的函式
      {
          printf "Restarting MySQL...\n"
          function_stop_mysql
          sleep 2
          function_start_mysql
      }
      
      case $1 in
      start)
          function_start_mysql
      ;;
      stop)
          function_stop_mysql
      ;;
      restart)
          function_restart_mysql
      ;;
      *)
          printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
      esac
      
    6. 啟動各例項的mysql服務,檢視埠號
      '1. 啟動服務'
      [[email protected] /data]$/data/mysql/3306/bin/mysqld start
      [[email protected] /data]$/data/mysql/3307/bin/mysqld start
      [[email protected] /data]$/data/mysql/3308/bin/mysqld start
      '2. 檢視埠號'
      [[email protected] /data]$ss -ntl
      State      Recv-Q Send-Q         Local Address:Port          Peer Address:Port              
      LISTEN     0      50                  *:3306                         *:*                  
      LISTEN     0      50                  *:3307                         *:*                  
      LISTEN     0      50                  *:3308                         *:*            
      
    7. 啟動資料庫指定埠號,或者指定sock檔案
      '指定socket檔案連線,使用-S(大S)選項,加上sock檔案路徑'
      [[email protected] /data]$mysql -S /data//mysql/3306/socket/mysql.sock 
      '指定埠號為-P選項'
      [[email protected] /data]$mysql -P 3306  -h127.0.0.1
      
    8. 修改資料庫口令
      [[email protected] /data]$mysqladmin  -uroot  -S socket/mysql.sork   password "123"
      
    9. 將各例項設定為開機啟動,
      '1. 拷貝服務啟動指令碼到init.d下,自定義名稱'
      [[email protected] /data]$cp /data/mysql/3306/bin/mysqld /etc/init.d/mysql3306
      '2. 增加開機啟動需要的內容'
      [roo[email protected] /data]$vim /etc/init.d/mysql3306
      #!/bin/bash
      #chkconfig: 345  20  50       <==增加此行,345級別可以啟動,啟動序號為20,關閉序號50
      #description: mysql 3306      <==增加此行,描述資訊
      '3. 確定有執行許可權後,將其加入啟動列表'
      [[email protected] /data]$chkconfig --add mysql3306
      '或者放到/etc/rc.local中'
      

2 建立資料庫

  • 獲取資訊

    1. 獲取命令使用幫助: HELP KEYWORD;
    2. 檢視資料庫列表: SHOW DATABASES;
    3. 檢視支援所有字符集: SHOW CHARACTER SET;
    4. 檢視支援所有排序規則: SHOW COLLATION;
    5. 檢視當前mysql版本資訊 status
  • 建立資料庫

    1. 建立資料庫命令:create database 首先檢視幫助說明
      MariaDB [(none)]>help create database 
      
      建立命令語法 在mysql中database和schema是等效的,其他資料庫有區別
      CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name  [create_specification] ...
      `[IF NOT EXISTS]`用來判斷資料庫是否存在的引數
      `[create_specification]`用來定義資料庫的子句
      
      create_specification子句
      '1. 定義字符集:儘可能選擇UTF8的字符集,可以通過`show character set`檢視預設支援的字符集,utf8mb4可以支援特殊符號,比如表情包'
         [DEFAULT] CHARACTER SET [=] charset_name   
      '2. 定義排序規則:字符集有預設的排序規則,一般不需要指定,檢視排序規則`SHOW COLLATION`'
         [DEFAULT] COLLATE [=] collation_name	    
      
    2. 建立一個數據庫,檢視其預設字符集
      '1. 建立名為db1的資料庫'
      MariaDB [(none)]> create database db1;
      '2. 檢視建立時系統預設完整命令'
      MariaDB [(none)]> show create database db1;  <==檢視命令
      | db1      | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ |   
      '系統會加上預設引數,預設的字符集為utf8,10版本以前預設的為latin1'
      
    3. 使用者指定字符集輸入示例,建立資料庫db2,子句指定字符集為utf8mb4
      MariaDB [(none)]> CREATE DATABASE  db2  CHARACTER  SET=utf8mb4;
      
    4. 建立的資料庫,會在程式家目錄下生成相應的庫目錄,沒有資料前只有一個檔案.opt
      [[email protected] data]$cat mysql/db2/db.opt 
      default-character-set=utf8mb4          <==預設字符集
      default-collation=utf8mb4_general_ci   <==預設排序方法
      
    5. 既然資料庫是以目錄方式存在的,也可以在家目下建立一個目錄當做資料庫
      [[email protected] mysql]$cp db1 db3 -ar
      [[email protected] mysql]$ll
      drwx------ 2 mysql mysql       20 Oct  6 09:31 db1
      drwx------ 3 mysql mysql       31 Oct  6 10:07 db3    <==許可權所屬都沒有改變,連其下的db.opt一起復制
      '在資料庫中檢視資料庫列表'
      MariaDB [mysql]> show databases;
      +--------------------+
      | Database           |
      +--------------------+
      | db1                |
      | db2                |
      | db3                |     <==可以生成
      
    6. 檢視資料庫列表: 命令為SHOW DATABASES
      MariaDB [(none)]> SHOW DATABASES;
      +--------------------+
      | Database           |
      +--------------------+
      | db1                |
      | db2                |
      | information_schema |
      | mysql              |
      | performance_schema |
      | test               |
      +--------------------+
      
    7. 切換資料庫,使用命令use db_name;
      MariaDB [(none)]> use db2     
      Database changed
      MariaDB [db2]>   <==中括號中設定的為當前資料庫,可以看到切換到db2中
      
  • 刪除資料庫

    1. 命令語法 DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
    2. 示例
      MariaDB [mysql]> drop database  IF EXISTS  test     <==如果為空就刪除,避免誤刪除
      

3 建立表

  • 表結構 二維關係(橫行縱列)

    1. 表名:儘可能和存放的實體密切相關,表名大小寫敏感(例如修改或搜尋時)
    2. 欄位:
      1. 欄位名:例如姓名、性別,大小寫不敏感
      2. 欄位資料型別:需要宣告此欄位資料型別
      3. 修飾符:用於定義欄位屬性
    3. 約束,索引:應該建立在經常用作查詢條件的欄位上
  • 獲取資訊

    1. 幫助 HELP CREATE TABLE;
    2. 檢視所有支援的引擎 SHOW ENGINES
    3. 查看錶列表 SHOW TABLES [FROM db_name]
    4. 查看錶結構 DESC [db_name.]tb_name
    5. 查看錶建立命令,顯示建立此表的各種引數 SHOW CREATE TABLE tbl_name
    6. 查看錶狀態 SHOW TABLE STATUS LIKE 'tbl_name'
      橫向顯示
      MariaDB [db2]> SHOW TABLE STATUS LIKE 'newcoc2';
      縱向顯示
      MariaDB [db2]> SHOW TABLE STATUS LIKE 'newcoc2'\G
      
    7. 檢視庫中所有表狀態 SHOW TABLE STATUS FROM db_name
      橫向顯示
      MariaDB [db2]> SHOW TABLE STATUS FROM hellodb;<== ;可以替換為\g
      縱向顯示
      MariaDB [db2]> SHOW TABLE STATUS FROM hellodb\G
      
  • 建立表方法

    1. 直接建立

      CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
      (create_definition,...)
      [table_options]
      [partition_options]
      
    2. 通過查詢現存表建立;新表會被直接插入查詢而來的資料

      CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
      [(create_definition,...)]
      [table_options] 
      [partition_options]select_statement
      
    3. 通過複製現存的表的表結構建立,但不復制資料

      CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
      { LIKE old_tbl_name | (LIKE old_tbl_name) }
      
  • 引數說明

    1. 建表描述(create_definition,…) 格式為:(col1 type1 修飾符, col2 type2 修飾符, …)
      1. col :欄位的名稱
      2. type:欄位型別
      3. 修飾符:來修飾此欄位的特性
    2. 表選項[table_options]
      1. 在表建立時指明其使用的儲存引擎,同一庫中不同表可以使用不同的儲存引擎,建議使用同一種,預設為InnoDB ENGINE [=] engine_name

      2. 指定行的格式,一般情況預設,避免帶來資料庫壓力

        ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
        
  • 修飾符

    1. 所有型別
    型別 描述
    INDEX 索引
    NULL 資料列可包含NULL值。允許為空
    NOT NULL 資料列不允許包含NULL值,不允許為空
    DEFAULT 定義預設值,防止出現空值
    PRIMARY KEY 主鍵
    UNIQUE KEY 唯一鍵
    CHARACTER SET name 表可以自定義使用的字符集,不建議單獨指定
    1. 數值型
    型別 描述
    AUTO_INCREMENT 自動遞增,適用於整數型別,例如職工編號
    UNSIGNED 無符號,表示全為正數
  • 刪除表 DROP TABLE [IF EXISTS] tb_name 示例,刪除表newcoc

    MariaDB [db2]> DROP TABLE IF EXISTS newcoc;
    

3.1 資料型別

  • 資料型別解決資料以下問題

    1. 資料長什麼樣?
    2. 資料需要多少空間來存放?
  • MySql支援多種內建型別:

    1. 數值型別
    2. 日期/時間型別
    3. 字串(字元)型別
  • 選擇正確的資料型別對於獲得高效能至關重要,三大原則:

    1. 更小的通常更好,儘量使用可正確儲存資料的最小資料型別
    2. 簡單就好,簡單資料型別的操作通常需要更少的CPU週期
    3. 儘量避免NULL,包含為NULL的列,對MySQL更難優化

在這裡插入圖片描述

  • 資料型別-數值型

    1. 整數型

      數值型-整數 資料大小 取值範圍
      tinyint(m) 1個位元組 範圍(-128~127)
      smallint(m) 2個位元組 範圍(-32768~32767)
      mediumint(m) 3個位元組 範圍(-8388608~8388607)
      int(m) 4個位元組 範圍(-2147483648~2147483647)
      igint(m) 8個位元組 範圍(±9.22*10的18次方)
      1. 加上unsigned修飾符,表示沒有負數,則最大值翻倍 如:tinyintunsigned的取值範圍為(0~255)
      2. int(m)裡的m是表示SELECT查詢結果集中的顯示寬度 並不影響實際的取值範圍,規定了MySQL的一些互動工具(例如MySQL命令列客戶端)用來顯示字元的個數。對於儲存和計算來說,Int(1)和Int(20)是相同的
      3. BOOL,BOOLEAN:布林型,是TINYINT(1)的同義詞。zero值被視為假,非zero值視為真
    2. 浮點型(float和double),近似值

      數值型-浮點 資料大小 描述
      float(m,d) 單精度浮點型8位精度(4位元組) m總個數,d小數位
      double(m,d) 雙精度浮點型16位精度(8位元組) m總個數,d小數位

      示例1 設一個欄位定義為float(6,3),如果插入一個數123.45678,實際資料庫裡存的是123.457,但總個數還以實際為準,即6位 示例2 在實際工作中,如果遇到財務資料,通常將元、角、分單獨列段表示,避免小數

    3. 定點數

      數值型-定點 描述
      mal(m,d) 引數m<65 是總個數,d<30且d<m 是小數位
      1. 在資料庫中存放的是精確值,存為十進位制
      2. 浮點型別在儲存同樣範圍的值時,通常比decimal使用更少的空間。float使用4個位元組儲存。double佔用8個位元組
      3. 因為需要額外的空間和計算開銷,所以應該儘量只在對小數進行精確計算時才使用decimal——例如儲存財務資料。但在資料量比較大的時候,可以考慮使用bigint代替decimal
      4. MySQL5.0和更高版本將數字打包儲存到一個二進位制字串中(每4個位元組存9個數字)。例如,decimal(18,9)小數點兩邊將各儲存9個數字,一共使用9個位元組:小數點前的數字用4個位元組,小數點後的數字用4個位元組,小數點本身佔1個位元組
  • 資料型別-字元型

    型別 是否可變 最大長度
    char(n) 固定長度 最多255個字元
    varchar(n) 可變長度 最多65535個字元
    tinytext 可變長度 最多255個字元
    text 可變長度 最多65535個字元
    mediumtext 可變長度 最多2的24次方-1個字元
    longtext 可變長度 最多2的32次方-1個字元
    BINARY(M) 固定長度 可存二進位制或字元,長度為0-M位元組
    VARBINARY(M) 可變長度 可存二進位制或字元,允許長度為0-M位元組
    1. char和varchar的區別

      1. char(n) 若存入字元數小於n,則以空格補於其後,查詢之時再將空格去掉。所以char型別儲存的字串末尾不能有空格,varchar不限於此。
      2. char(n) 固定長度,char(4)不管是存入幾個字元,都將佔用4個位元組,varchar是存入的實際字元數+1個位元組(n< n>255),所以varchar(4),存入3個字元將佔用4個位元組。
      3. char型別的字串檢索速度要比varchar型別的快 在這裡插入圖片描述
    2. varchar和text區別

      1. varchar可指定n,text不能指定,內部儲存varchar是存入的實際字元數+1個位元組(n< n>255),text是實際字元數+2個位元組。
      2. text型別不能有預設值
      3. varchar可直接建立索引,text建立索引要指定前多少個字元
      4. varchar查詢速度快於text
    3. 內建型別:

      1. ENUM列舉:列出範圍,從中選擇一個
      2. SET集合:可以選擇任何好多個的組合
  • 資料型別-二進位制資料(BLOB)

    1. BLOB和text儲存方式不同,TEXT以文字方式儲存,英文儲存區分大小寫,而Blob是以二進位制方式儲存,不分大小寫
    2. BLOB儲存的資料只能整體讀出
    3. TEXT可以指定字符集,BLOB不用指定字符集
  • 資料型別-日期時間型別

    1. date:日期’2008-12-2’
    2. time:時間’12:25:36’
    3. datetime:日期時間’2008-12-2 22:06:44’
    4. timestamp:自動儲存記錄修改時間,記錄只要發生改變值就會更新,即使是復原記錄也會更新時間
    5. YEAR(2), YEAR(4):年份以2|4個字元表示

3.2 建立示例

  • 建立新表 students,自定義屬性
    MariaDB [(none)]> CREATE TABLE students (             <==建立命令
        -> id int unsigned AUTO_INCREMENT  primary key ,  <==()內為表描述,定義型別屬性等
        'ID,資料型別為int,自動遞增AUTO_INCREMENT,設為主鍵(pk),主鍵不能為空'
        -> name varchar (30) not null,
       ' 姓名,資料型別為varchar,佔30個字元(30),不允許為空'
        -> sex enum('m','f'),
        '性別,規定枚為m或f,只能在此區間選擇一個'
        -> age tinyint  unsigned  default 20,
       ' 年齡,資料型別為tinyint,全為正數unsigned,預設值default為20'
        -> PRIMARY KEY(id,name)     <==沒有此行,如果要定義複合主鍵,前面的內容就不能定義,主鍵只能有一個
       ' 如果使用複合主鍵,表示方法如上所示,在最後逗號隔開為獨立項'
        -> );
    
  • 查看錶的建立內容,以上例的students為例
    方法一
    MariaDB [db2]> SHOW CREATE TABLE students
    方法二
    MariaDB [db2]> DESC students ;
    
  • 查詢表內容,以hellodb資料庫中的coc表為例,命令為 SELECT * FROM coc
    '1. 列出現有資料庫'
    MariaDB [db2]> show databases;
    '2. 進入選定資料庫'
    MariaDB [db2]> use hellodb
    '3. 列出資料庫內所有表列表 '
    MariaDB [hellodb]> show tables
    '4. 檢視coc表格' 
    MariaDB [hellodb]> SELECT * FROM coc;<==select表示查詢,[ * ]表示所有欄位,from表示從那張表查
    +----+---------+----------+
    | ID | ClassID | CourseID |
    +----+---------+----------+
    |  1 |       1 |        2 |
    |  2 |       1 |        5 |
    
  • 通過查詢現存表建立;新表會被直接插入查詢而來的資料,新表為newcoc,舊錶為coc
    '建立表格'
    MariaDB [hellodb]> CREATE TABLE newcoc SELECT * FROM coc
    '比較新舊兩張表的內容,結構與內容基本相同'
    MariaDB [hellodb]> SELECT * FROM newcoc;
    +----+---------+----------+
    | ID | ClassID | CourseID |
    +----+---------+----------+
    |  1 |       1 |        2 |
    |  2 |       1 |        5 |
    
    跨資料庫,以hellodb資料庫表格為模板,在db2資料庫中建表newcoc
    '1. 切換至db2資料庫'
    MariaDB [hellodb]> use db2    
    '2. 語法與上例相同,查詢地址加上資料庫名稱以點與表隔開,表示為`hellodb.coc`'
    MariaDB [db2]> CREATE TABLE newcoc SELECT * FROM hellodb.coc  
    
  • 通過複製現存的表的表結構建立,但不復制資料
    '1. 以hellodb.coc為模板,在db2資料庫中建立架構類似的表格newcoc2'
    MariaDB [db2]> CREATE TABLE newcoc2 LIKE hellodb.coc   <==命令格式
    '2. 檢視結構'
    MariaDB [db2]> desc newcoc2;     <==結構相同
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | ID       | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
    | ClassID  | tinyint(3) unsigned  | NO   |     | NULL    |                |
    | CourseID | smallint(5) unsigned | YES  |     | NULL    |                |
    +----------+----------------------+------+-----+---------+----------------+
    '3. 查看錶內容'
    MariaDB [db2]> select * from newcoc2;
    Empty set (0.00 sec)              <==表內容為空
    
    方法2:給定查詢命令一個不能匹配的條件,返回空置,只有表結構,建立空值的查詢結果,就是表結構
    MariaDB [db2]> CREATE TABLE newcoc3 SELECT * FROM hellodb.coc  where  1=0;
    

3.3 表文件存放說明

在mysql中建立的資料庫以及表格,都會在mysql的家目錄下生成對應目錄和檔案,10.2版本在資料庫下表格檔案是一對,分別存放表結構和表資料,如下所示

[[email protected] db2]$ll   /mysql/db2/
total 304
-rw-rw---- 1 mysql mysql    67 Oct  6 09:44 db.opt
-rw-rw---- 1 mysql mysql   976 Oct  6 14:38 newcoc2.frm     <==表結構
-rw-rw---- 1 mysql mysql 98304 Oct  6 14:38 newcoc2.ibd     <==表資料
-rw-rw---- 1 mysql mysql   487 Oct  6 14:33 newcoc.frm
-rw-rw---- 1 mysql mysql 98304 Oct  6 14:33 newcoc.ibd
-rw-rw---- 1 mysql mysql  1115 Oct  6 11:25 students.frm
-rw-rw---- 1 mysql mysql 98304 Oct  6 11:25 students.ibd

老版本比如映象檔案中自帶的5.5版,資料庫下只存放各表的結構檔案.frm,所有資料統一放在mysql目錄下的ibdata1檔案,不好區分,檔案超,需要通過修改配置檔案,將資料獨立生成檔案,在mysqld塊下增加如下引數

[[email protected]  support-files]$vim /etc//my.cnf 
[mysqld]
innodb_file_per_table= on    <==資料庫的每一個表都生成獨立的檔案10.2後版本,預設開啟

4 表操作

Help ALTER TABLE 檢視幫助

4.1 欄位

  • 新增欄位:add

    1. 語法格式 ADD col1 data_type[FIRST|AFTER col_name]
    2. 引數說明
    引數 描述
    col1 加入欄位的欄位名
    data_type 資料型別
    FIRST 在表的最前面加入
    AFTER col_name 在指定欄位後加入
    1. 示例 顯示錶students的建立資訊,以下各例將在此表基礎上進行
      MariaDB [db2]> desc students
      +-------+---------------------+------+-----+---------+----------------+
      | Field | Type                | Null | Key | Default | Extra          |
      +-------+---------------------+------+-----+---------+----------------+
      | id    | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
      | name  | varchar(30)         | NO   |     | NULL    |                |
      | sex   | enum('m','f')       | YES  |     | NULL    |                |
      +-------+---------------------+------+-----+---------+----------------+
      
      :在students表name後新增一行tel,資料型別為char佔用11各位元組
      MariaDB [db2]> ALTER TABLE students ADD tel  char(11) AFTER name ;
      
      再次檢視students的建立資訊
      MariaDB [db2]> desc students
      | name  | varchar(30)         | NO   |     | NULL    |                |
      | tel   | char(11)            | YES  |     | NULL    |                |    <==新增欄位資訊
      
  • 刪除欄位

    1. 引數為drop
    2. 示例,刪除上例中增加的欄位tel
      MariaDB [db2]> ALTER TABLE students DROP  tel ;
                    | 表操作命令 |  表名  | 引數|刪除欄位|
      
  • 修改表名

    1. 引數為RENAME
    2. 示例:將表students改名為S1
      MariaDB [db2]> ALTER TABLE students RENAME S1  ;
      
  • 修改欄位屬性

    1. 引數為MODIFY
    2. 示例:修改S1表的id段屬性,原屬性為int,修改為tinyint
      MariaDB [db2]> ALTER TABLE S1 MODIFY id tinyint;
      
  • 修改欄位名CHANGE COLUMN

    1. 引數為CHANGE COLUMN
    2. 示例:將表S1中tel欄位修改為num,資料型別為char(15)
      MariaDB [db2]> ALTER TABLE S1 CHANGE COLUMN tel num char(15) ;
      
  • 索引:

    1. 查看錶上的索引

      1. 語法格式:SHOW INDEXES FROM [db_name.]tbl_name;
      2. 示例:檢視資料庫db2中S1表的索引
        MariaDB [db2]> SHOW INDEXES FROM db2.S1 \G
        
    2. 新增索引:

      1. 引數:add index
      2. 示例:為S1表的name欄位增加索引
        MariaDB [db2]> ALTER TABLE S1 ADD INDEX(name)\G
        
    3. 刪除索引:

      1. 引數:drop index
      2. 示例:刪除上例中name欄位的索引
        MariaDB [db2]> ALTER TABLE S1 DROP index name;
        MariaDB [db2]> DROP INDEX name on S1;
        
  • 增加唯一鍵

    1. 語法格式 ALTER TABLE students ADD UNIQUE KEY(name);
    2. 示例:後面講唯一鍵時詳見

4.2 DML語句(INSERT, DELETE, UPDATE)

  • INSERT:一次插入一行或多行資料

    1. 語法

      
                  
                 

      相關推薦

      linux學習37-MySQL資料庫2

      MySQL資料庫2 資料庫建立 表操作,增、刪、改、查、分組、排序等 SQL語句例項 多表操作 檢視及自定義函式 1 多例項操作 實現多例項需要手動建立的檔案 使用者以及組 資料庫的檔案目錄 配置檔案 資料庫的啟動指令碼 資料庫存放系統內容的資料庫

      linux學習記錄-------mysql安裝

      adb mon .rpm 分享 密碼 tro post mysql x86_64 1、下載,打開 http://dev.mysql.com/downloads/mysql/ 選擇開發者版本,不需要註冊登陸的,點擊下載後左下角有一行小字:No thanks, just sta

      Linux學習之路--http-2基礎設置及訪問限制【15】---20180108

      first 配置 特定 http modules rmi 目錄訪問控制 可重復 als 一、HTTP軟件1、http服務器應用http服務器程序 httpd apache nginx lighttpd應用程序服務器 IIS .asp tomca

      linux學習記錄-------mysql授權遠程連接

      nbsp password pri roo 指定 leg 默認 option IV Linux開啟MySQL遠程連接的設置步驟 。 MySQL默認root用戶只能本地訪問,不能遠程連接管理MySQL數據庫,那麽Linux下如何開啟MySQL遠程連接? 設置步驟如下: 1、登

      linux學習之路:2.基本指令(2

      inux 可執行文件 選項 說明 獨立 選項說明 img color 配置 一、在線求助:man page 與info page 1.man(manual:操作說明) page 我想查看日歷,所以我輸入man cal 效果如圖: 圖中CAL(1)中,在不同的指令中數字的含

      Linux下安裝MySQL資料庫mysql-5.7.11

      Linux下安裝MySQL資料庫(壓縮包方式安裝) https://www.cnblogs.com/xiaotao726/p/6562265.html PS:9、建立In ln -s /usr/local/mysql/ /usr/bin/ 連線資料庫時會顯示:[[email protecte

      linux系統修改mysql資料庫root密碼

      剛開始時,我是這樣修改的: 首先登入MySQL。 mysql> use mysql; mysql> update user set password=password(‘123’) where user=’root’ and host=’localhost’; mysql>

      ecs雲伺服器linux系統安裝mysql資料庫

      Linux64安裝mysql資料庫流程簡介 Mysql官網上下載mysql資料庫壓縮包到本地。 通過xftp上傳壓縮包到linux系統的usr/local資料夾下。 在Linux系統終端執行解壓指令 tar -zxvf (壓縮包名字) 出現以下畫面表示解壓成功 新

      linux centos下mysql資料庫的主從複製環境搭建

      有兩臺MySQL資料庫伺服器Master和slave,Master為主伺服器,slave為從伺服器,初始狀態時,Master和slave中的資料資訊相同,當Master中的資料發生變化時,slave也跟著發生相應的變化,使得master和slave的資料資訊同步,達到備份的目的。 原理圖如下:

      Linux CentOS7 安裝mysql資料庫

      注意:在CentOS7中,已經使用MariaDB替代了MySQL資料庫。 1、安裝: # yum install -y mariadb mariadb-server 2、拷貝配置檔案: # cp /usr/share/mysql/my-huge.cnf /etc/my.cnf

      Linux伺服器安裝Mysql資料庫

      CentOS 7.4 下yum安裝MYSQL5.7.2 解除安裝 先停掉mysql程序 沒有安裝過的可以直接跳過 [root@iZwz9c6jlipu33po7lw2kgZ mysql]# netstat -antp pkill -9 mysqld rpm -qa|g

      linux--解決登陸mysql資料庫出現 “Access denied for user 'root'@'localhost' (using password: YES)”的問題

      我的平臺為redhat-linux,其它版本linux類同。 請按照下列步驟依此執行,親測有效: 1.切換為root使用者,停止mysql服務,service mysqld stop。 2.在當前終端中輸入mysqld_safe --user=mysql --skip-grant-t

      linux定時備份mysql資料庫

      1、檢視磁碟空間情況: [[email protected] backup]# df -h 檔案系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 17G 2.7G 15G 16

      Linux CentOS7 配置MYSQL資料庫主從

      1、在主資料庫裡建立一個同步賬號 每個從資料庫會使用一個MySQL賬號來連線主資料庫,所以我們要在主資料庫裡建立一個賬號,並且該賬號要授予REPLICATION SLAVE 許可權,你可以為每個從資料庫分別建立賬號,當然也可以用同一個!你可以用原來的賬號不一定要新創賬號,但你應該注意,這個賬號和密碼會被明文存

      十五、python學習MySQL資料庫(二):資料庫的操作

       一、資料庫的操作: 1.資料庫操作的概述: 在資料庫操作中,基本操作都是圍繞增刪改查來操作。簡稱CRUD C Create 建立 R Read/Retrieve 查詢 U Update 修改 D Delete 刪除 2.資料庫操作 在數操作資料庫時,所有的資料

      十七、python學習MySQL資料庫(四): 資料庫程式設計

      一、python資料庫操作: 1.資料庫程式設計概述: 資料庫程式設計就是針對資料庫的操作,通過編寫程式的方式,讓程式做為資料庫的客戶端進行資料庫操作。這種通過使用程式程式碼的方式去連線資料庫伺服器,通過和伺服器進行互動完成對資料庫的增刪改查的方式,就稱為資料庫程式設計。

      Linux下操作MySQL資料庫常用命令

      目錄 5.查詢表 9.退出 1.連線資料庫 mysql -u -root -p 輸入密碼 2.檢視資料庫 show databases;  3.開啟資料庫

      Linux 下實現 MySQL 資料庫定時自動備份

      備份是什麼?           為什麼要備份?   容災方案建設   儲存介質   光碟  磁帶  硬碟&n

      linux下,mysql資料庫的忘記密碼,檢視使用者,以及修改使用者資訊

      linux下,mysql資料庫的忘記密碼,檢視使用者,以及修改使用者資訊       剛好遇到的,也是自己不熟悉的部分,因此查了一些資料,大概把這幾個給總結一下。 一、資料庫忘記密碼 1、如果是root使用者忘記密碼的話,那就沒

      linux下安裝mysql資料庫

      linux下安裝mysql 下載安裝包 上傳安裝包到伺服器上 解壓安裝 1、解壓到user/local下 tar vxf mysql-5.7.14-1.el6.x86_64.rpm-bundle.tar -C /usr/local 2、依次執行一下命令: [