MySQL數據庫--基礎簡述

MySQL數據庫--基礎簡述

1.15.1 MySQL簡介

  • Mysql是最流行的RDBMS(Relational Database Management System:關係數據庫管理系統),特別是在WEB應用方面。
  • 數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,
  • 每一個數據庫都有一個或多個不一樣的API用於建立,訪問,管理,搜索和複製所保存的數據。
  • 所謂的關係型數據庫,是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。
  • RDBMS即關係數據庫管理系統(Relational Database Management System)的特色:html

    • 1.數據以表格的形式出現
    • 2.每行爲各類記錄名稱
    • 3.每列爲記錄名稱所對應的數據域
    • 4.許多的行和列組成一張表單
    • 5.若干的表單組成database
  • 在咱們開始學習MySQL 數據庫前,讓咱們先了解下RDBMS的一些術語:python

數據庫: 數據庫是一些關聯表的集合。.
    數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
    列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
    行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
    冗餘:存儲兩倍數據,冗餘下降了性能,但提升了數據的安全性。
    主鍵:主鍵是惟一的。一個數據表中只能包含一個主鍵。你可使用主鍵來查詢數據。
    外鍵:外鍵用於關聯兩個表。
    複合鍵:複合鍵(組合鍵)將多個列做爲一個索引鍵,通常用於複合索引。
    索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。相似於書籍的目錄。
    參照完整性: 參照的完整性要求關係中不容許引用不存在的實體。與實體完整性是關係模型必須知足的完整性約束條件,目的是保證數據的一致性。
SQL:
  • SQL: 結構化查詢語言(Structured Query Language)簡稱SQL,是最重要的關係數據庫操做語言.
  • 有上百種數據庫產品都支持SQL,如:MySQL、DB二、ORACLE、INGRES、SYBASE、SQLSERVER...
  • 結構化查詢語言包含6個部分:
1. 數據查詢語言(DQL:Data Query Language):SELECT
    2. 數據操做語言(DML:Data Manipulation Language):INSERT,UPDATE和DELETE
    3. 事務處理語言(TPL):BEGIN TRANSACTION,COMMIT和ROLLBACK
    4. 數據控制語言(DCL):GRANT(受權)或REVOKE(回收權限)
    5. 數據定義語言(DDL):CREATE、ALTER和DROP
    6. 指針控制語言(CCL):DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操做
  • 在本節中,會讓你們快速掌握Mysql的基本知識,並輕鬆使用Mysql數據庫。
mysql數據庫的安裝:
鏈接數據庫:
mysql -h 主機名 -u 用戶名  -p密碼  庫名

   C:\>mysql  --採用匿名帳號和密碼登錄本機服務
   C:\>mysql -h localhost -u root -proot   --採用root帳號和root密碼登錄本機服務
   C:\>mysql -u root -p   --推薦方式默認登錄本機
     Enter password: ****

   C:\>mysql -u root -p mydb  --直接進入mydb數據庫的方式登錄

   SQL語句中的快捷鍵
   \G 格式化輸出(文本式,豎立顯示)
   \s 查看服務器端信息
   \c 結束命令輸入操做
   \q 退出當前sql命令行模式
   \h 查看幫助

1.15.2. SQL的基本操做

數據庫操做:
mysql> show databases;                              --查看當前用戶下的全部數據庫
mysql> create database [if not exists] 數據庫名;  --建立數據庫
mysql> use test;                                 --選擇進入test數據庫
mysql> show create database 數據庫名\G               --查看建數據庫語句 
mysql> select database();                           --查看當前所在的數據庫位置 
mysql> drop database [if exists] 數據庫名;           --刪除一個數據庫
數據表操做:
mysql> show tables;             --查看當前庫下的全部表格
mysql> desc tb1;                  --查看tb1的表結構。
mysql> show create table 表名\G  --查看錶的建表語句。
mysql> create table demo(        --建立demo表格
    -> name varchar(16) not null,
    -> age int,
    -> sex enum('w','m') not null default 'm');
Query OK, 0 rows affected (0.05 sec)

mysql> show columns from demo;  --查看錶結構
mysql> desc demo;                  --查看錶結構
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| name  | varchar(16)   | NO   |     | NULL    |       |
| age   | int(11)       | YES  |     | NULL    |       |
| sex   | enum('w','m') | NO   |     | m       |       |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql>drop table if exists mytab;  -- 嘗試刪除mytab表格
數據操做:
--添加一條數據
    mysql> insert into demo(name,age,sex) values('zhangsan',20,'w');
    Query OK, 1 row affected (0.00 sec)

    --不指定字段名來添加數據
    mysql> insert into demo values('lisi',22,'m'); 
    Query OK, 1 row affected (0.00 sec)

    --指定部分字段名來添加數據
    mysql> insert into demo(name,age) values('wangwu',23); 
    Query OK, 1 row affected (0.00 sec)

    --批量添加數據
    mysql> insert into demo(name,age,sex) values('aaa',21,'w'),("bbb",22,'m');
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    mysql> select * from demo; --查詢數據

    mysql> update demo set age=24 where name='aaa';  --修改
    Query OK, 1 row affected (0.02 sec)
    Rows matched: 1  Changed: 1  Warnings: 0

    mysql> delete from demo where name='bbb';  --刪除
    Query OK, 1 row affected (0.00 sec)

1.15.3 MySQL數據結構類型及操做:

MySQL的數據類型分爲三個類:數值類型、字串類型、日期類型 。 還有一個特殊的值:NULL。
1 數值類型:
    *tinyint(1字節) 0~255  -128~127
    smallint(2字節)
    mediumint(3字節)
    *int(4字節)
    bigint(8字節)
    *float(4字節)   float(6,2)
    *double(8字節)  
    decimal(自定義)字串形數值

2 字串類型
    普通字串
    *char    定長字串        char(8)  
    *varchar 可變字串 varchar(8)

    二進制類型
    tinyblob
    blob
    mediumblob
    longblob

    文本類型
    tinytext
    *text      經常使用於<textarea></textarea>
    mediumtext
    longtext

    *enum枚舉
    set集合

3 時間和日期類型:
    date  年月日
    time  時分秒
    *datetime 年月日時分秒
    timestamp 時間戳
    year 年

4 NULL值
    NULL意味着「沒有值」或「未知值」
    能夠測試某個值是否爲NULL
    不能對NULL值進行算術計算
    對NULL值進行算術運算,其結果仍是NULL
    0或NULL都意味着假,其他值都意味着真
MySQL的運算符:
算術運算符:+ - * / % 
    比較運算符:= > < >= <= <> != 
    數據庫特有的比較:in,not in, is null,is not null,like, between and 
    邏輯運算符:and or not
表的字段約束:
unsigned 無符號(正數)
    zerofill 前導零填充
    auto_increment 自增
    default    默認值
    not null  非空
    PRIMARY KEY 主鍵 (非null並不重複)
    unique 惟一性   (能夠爲null但不重複)
    index 常規索引
建表語句格式:
create table 表名(
   字段名 類型 [字段約束],
   字段名 類型 [字段約束],
   字段名 類型 [字段約束],
   ...
  );
mysql> create table stu(
    -> id int unsigned not null auto_increment primary key,
    -> name varchar(8) not null unique,
    -> age tinyint unsigned,
    -> sex enum('m','w') not null default 'm',
    -> classid char(6)
    -> );
Query OK, 0 rows affected (0.05 sec)


mysql> desc stu;
+---------+---------------------+------+-----+---------+----------------+
| Field   | Type                | Null | Key | Default | Extra          |
+---------+---------------------+------+-----+---------+----------------+
| id      | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| name    | varchar(8)          | NO   | UNI | NULL    |                |
| age     | tinyint(3) unsigned | YES  |     | NULL    |                |
| sex     | enum('m','w')       | NO   |     | m       |                |
| classid | char(6)             | YES  |     | NULL    |                |
+---------+---------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> show create table stu\G  --查看建表的語句
*************************** 1. row ***************************
       Table: stu
Create Table: CREATE TABLE `stu` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(8) NOT NULL,
  `age` tinyint(3) unsigned default NULL,
  `sex` enum('m','w') NOT NULL default 'm',
  `classid` char(6) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
修改表結構:
格式: alter table 表名 action(更改選項);
 更改選項:
    1. 添加字段:alter table 表名 add 字段名信息
        例如:
            -- 在user表的最後追加一個num字段 設置爲int not null
            mysql> alter table user add num int not null;

            -- 在user表的email字段後添加一個age字段,設置int not null default 20;
            mysql> alter table user add age int not null default 20 after email;

            -- 在user表的最前面添加一個aa字段設置爲int類型
            mysql> alter table user add aa int first;

    2. 刪除字段:alter table 表名 drop 被刪除的字段名
        例如:-- 刪除user表的aa字段
             mysql> alter table user drop aa;

    3. 修改字段:alter table 表名 change[modify] 被修改後的字段信息
        其中:change能夠修改字段名, modify 不修改
        例如:
        -- 修改user表中age字段信息(類型),(使用modify關鍵字的目的不修改字段名)
        mysql> alter table user modify age tinyint unsigned not null default 20;
        -- 修改user表的num字段改成mm字段並添加了默認值(使用change能夠改字段名)
        mysql> alter table user change num mm int not null default 10;

    4. 添加和刪除索引
        -- 爲user表中的name字段添加惟一性索引,索引名爲uni_name;
        mysql> alter table user add unique uni_name(name);
        -- 爲user表中的email字段添加普通索引,索引名爲index_eamil
        mysql> alter table user add index index_email(email);
        -- 將user表中index_email的索引刪除
        mysql> alter table user drop index index_email;

    5. 更改表名稱:
        ALTER TABLE 舊錶名 RENAME AS 新表名

    6. 更改AUTO_INCREMENT初始值:
        ALTER TABLE 表名稱 AUTO_INCREMENT=1

    7. 更改表類型:
        ALTER TABLE 表名稱 ENGINE="InnoDB"

MySQL數據庫中的表類型通常經常使用兩種:MyISAM和InnoDB
區別:MyISAM類型的數據文件有三個frm(結構)、MYD(數據)、MYI(索引)
      MyISAM類型中的表數據增 刪 改速度快,不支持事務,沒有InnoDB安全。

      InnoDB類型的數據文件只有一個 .frm
      InnoDB類型的表數據增 刪 改速度沒有MyISAM的快,但支持事務,相對安全。

1.15.4 數據的DML操做:添加數據,修改數據,刪除數據

添加數據:
格式: insert into 表名[(字段列表)] values(值列表...);

    --標準添加(指定全部字段,給定全部的值)
    mysql> insert into stu(id,name,age,sex,classid) values(1,'zhangsan',20,'m','lamp138');
    Query OK, 1 row affected (0.13 sec)

    mysql>
    --指定部分字段添加值
    mysql> insert into stu(name,classid) value('lisi','lamp138');
    Query OK, 1 row affected (0.11 sec)

    -- 不指定字段添加值
    mysql> insert into stu value(null,'wangwu',21,'w','lamp138');
    Query OK, 1 row affected (0.22 sec)

    -- 批量添加值
    mysql> insert into stu values
        -> (null,'zhaoliu',25,'w','lamp94'),
        -> (null,'uu01',26,'m','lamp94'),
        -> (null,'uu02',28,'w','lamp92'),
        -> (null,'qq02',24,'m','lamp92'),
        -> (null,'uu03',32,'m','lamp138'),
        -> (null,'qq03',23,'w','lamp94'),
        -> (null,'aa',19,'m','lamp138');
    Query OK, 7 rows affected (0.27 sec)
    Records: 7  Duplicates: 0  Warnings: 0
修改操做:
格式:update 表名 set 字段1=值1,字段2=值2,字段n=值n... where 條件 

    -- 將id爲11的age改成35,sex改成m值
    mysql> update stu set age=35,sex='m' where id=11;
    Query OK, 1 row affected (0.16 sec)
    Rows matched: 1  Changed: 1  Warnings: 0

    -- 將id值爲12和14的數據值sex改成m,classid改成lamp92
    mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14 --等價於下面
    mysql> update stu set sex='m',classid='lamp92' where id in(12,14);
    Query OK, 2 rows affected (0.09 sec)
    Rows matched: 2  Changed: 2  Warnings: 0
刪除操做:
格式:delete from 表名 [where 條件]

    -- 刪除stu表中id值爲100的數據
    mysql> delete from stu where id=100;
    Query OK, 0 rows affected (0.00 sec)

    -- 刪除stu表中id值爲20到30的數據
    mysql> delete from stu where id>=20 and id<=30;
    Query OK, 0 rows affected (0.00 sec)

    -- 刪除stu表中id值爲20到30的數據(等級於上面寫法)
    mysql> delete from stu where id between 20 and 30;
    Query OK, 0 rows affected (0.00 sec)

    -- 刪除stu表中id值大於200的數據
    mysql> delete from stu where id>200;
    Query OK, 0 rows affected (0.00 sec)

1.15.5 數據的DQL操做:數據查詢

格式:
select [字段列表]|* from 表名
    [where 搜索條件]
    [group by 分組字段 [having 子條件]]
    [order by 排序 asc|desc]
    [limit 分頁參數]
各類查詢:
mysql> select * from stu;
    +----+----------+-----+-----+---------+
    | id | name     | age | sex | classid |
    +----+----------+-----+-----+---------+
    |  1 | zhangsan |  20 | m   | lamp138 |
    |  2 | lisi     |  20 | m   | lamp138 |
    |  3 | wangwu   |  21 | w   | lamp138 |
    |  4 | zhaoliu  |  25 | w   | lamp94  |
    |  5 | uu01     |  26 | m   | lamp94  |
    |  6 | uu02     |  28 | w   | lamp92  |
    |  7 | qq02     |  24 | m   | lamp92  |
    |  8 | uu03     |  32 | m   | lamp138 |
    |  9 | qq03     |  23 | w   | lamp94  |
    | 10 | aa       |  19 | m   | lamp138 |
    | 11 | sad      |  35 | m   | lamp94  |
    | 12 | tt       |  25 | m   | lamp92  |
    | 13 | wer      |  25 | w   | lamp94  |
    | 14 | xx       |  25 | m   | lamp92  |
    | 15 | kk       |   0 | w   | lamp94  |
    +----+----------+-----+-----+---------+
    15 rows in set (0.00 sec)

    1. where條件查詢
    1. 查詢班級爲lamp138期的學生信息
    mysql> select * from stu where classid='lamp138';

    2. 查詢lamp138期的男生信息(sex爲m)
    mysql> select * from stu where classid='lamp138' and sex='m';

    3. 查詢id號值在10以上的學生信息
    mysql> select * from  stu where id>10;

    4. 查詢年齡在20至25歲的學生信息
    mysql> select * from stu where age>=20 and age<=25;
    mysql> select * from stu where age between 20 and 25;

    5. 查詢年齡不在20至25歲的學生信息
    mysql> select * from stu where age not between 20 and 25;
    mysql> select * from stu where age<20 or age>25;

    6. 查詢id值爲1,8,4,10,14的學生信息
    select * from stu where id in(1,8,4,10,14);
    mysql> select * from stu where id=1 or id=8 or id=4 or id=10 or id=14;

    7. 查詢lamp138和lamp94期的女生信息
    mysql> select * from stu where classid in('lamp138','lamp94') and sex='w';
    mysql> select * from stu where (classid='lamp138' or classid='lamp94') and sex='w

1.15.6 數據庫受權、備份和恢復

受權:
格式:grant 容許操做 on 庫名.表名 to 帳號@來源 identified by '密碼';

    --實例:建立zhangsan帳號,密碼123,受權lamp61庫下全部表的增/刪/改/查數據,來源地不限
    mysql> grant select,insert,update,delete on lamp61.* to zhangsan@'%' identified by '123';
    mysql> grant all on *.* to zhangsan@'%' identified by '123';
    Query OK, 0 rows affected (0.00 sec) 

    -- 受權一個用戶(zhangsan)密碼123,能夠對全部的庫,全部的表作全部操做。
    mysql> grant all on *.* to zhangsan@'%' identified by '123';
    Query OK, 0 rows affected (0.17 sec)

    --刷新生效,不然就要重啓MySQL服務才能夠。
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

    --瀏覽當前MySQL用戶信息
    mysql> select user,host,password from mysql.user;
    +----------+-----------------+-------------------------------------------+
    | user     | host            | password                                  |
    +----------+-----------------+-------------------------------------------+
    | root     | localhost       | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
    | root     | 127.0.0.1       |                                           |
    |          | localhost       |                                           |
    | zhangsan | %               | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
    | admin    | 192.168.112.132 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
    +----------+-----------------+-------------------------------------------+
    5 rows in set (0.00 sec)

    -- 移除一些權限
    -- revoke:只刪除了用戶權限,但沒有刪除這個用戶
    mysql> revoke insert,delete on *.* from admin@192.168.112.132 identified by'123';

    -- 查看指定用戶的權限信息
    mysql> show grants for xbb@localhost;
    +------------------------------------------------------------------------------------------------------------+
    | Grants for xbb@localhost                                                                                   |
    +------------------------------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'xbb'@'localhost' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' |
    +------------------------------------------------------------------------------------------------------------+

    --drop user:刪除了整個用戶及其權限(包括數據字典中的數據)
    mysql> drop user 'xbb'@'localhost';
    Query OK, 0 rows affected (0.00 sec)

    mysql> select user,host from mysql.user;
    +------------------+-----------+
    | user             | host      |
    +------------------+-----------+
    | root             | 127.0.0.1 |
    | debian-sys-maint | localhost |
    | root             | localhost |
    | root             | wangxg    |
    +------------------+-----------+
    4 rows in set (0.00 sec)
備份與恢復(導入和導出)
-- 將lamp138庫導出
D:\>mysqldump -u root -p lamp138 >lamp138.sql
Enter password:

---- 將lamp138庫中的stu表導出
D:\>mysqldump -u root -p lamp138 stu >lamp138_stu.sql
Enter password:

-- 將lamp138庫導入
D:\>mysql -u root -p lamp138<lamp138.sql
Enter password:

-- 將lamp138庫中stu表導入
D:\>mysql -u root -p lamp138<lamp138_stu.sql
Enter password:

1.15.7 MySQL的多表聯查

  • 表之間的關係有:1對1 1對多 多對多
1. 嵌套查詢:一個查詢的結果是另外sql查詢的條件:
    如:查詢stu表中年齡最大的是誰?
    mysql> select * from stu where age=(select max(age) from stu);
    mysql> select * from stu where age in(select max(age) from stu); --(子查詢結果是多條時使用in查詢)
    +----+------+------+-----+----------+
    | id | name | age  | sex | classid  |
    +----+------+------+-----+----------+
    | 14 | abc  |   33 | w   | python01 |
    +----+------+------+-----+----------+
    1 row in set (0.01 sec)

2. where關聯查詢

    已知:員工personnel表和部門department表,其中員工表中的did字段爲部門表id主鍵關聯。
          查詢全部員工信息,並顯示所屬部門名稱
    要求:顯示字段:員工id  部門 姓名
    mysql> select p.id,d.name,p.name from personnel p,department d where p.did = d.id;
        +----+-----------+-----------+
        | id | name      | name      |
        +----+-----------+-----------+
        |  2 | 人事部    | 李玉剛    |
        | 10 | 人事部    | 阿杜      |
        |  4 | 市場部    | 劉歡      |
        。。。。


3. 鏈接join查詢
    左聯:left join
    右聯:right join
    內聯:inner join

已知以下表所示,商品類別信息表(具備兩層類別關係,經過pid表示,0表示一級類別)
mysql> select * from type;
+----+-----------+------+
| id | name      | pid  |
+----+-----------+------+
|  1 | 服裝      |    0 |
|  2 | 數碼      |    0 |
|  3 | 男裝      |    1 |
|  4 | 手機      |    2 |
|  5 | 相機      |    2 |
|  6 | 電腦      |    2 |
|  7 | 女裝      |    1 |
|  8 | 童裝      |    1 |
|  9 | 食品      |    0 |
| 10 | 零食      |    9 |
| 11 | 特產      |    9 |
| 12 | 休閒裝    |    1 |
+----+-----------+------+
12 rows in set (0.00 sec)

mysql> desc type;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(16)      | NO   |     | NULL    |                |
| pid   | int(10) unsigned | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

-- 查詢二級類別信息,並關聯出他們的父類別名稱
mysql> select  t1.id,t1.name,t2.name  from type t1,type t2 where t1.pid!=0 and t1.pid=t2.id;
+----+-----------+--------+
| id | name      | name   |
+----+-----------+--------+
|  3 | 男裝      | 服裝   |
|  4 | 手機      | 數碼   |
|  5 | 相機      | 數碼   |
|  6 | 電腦      | 數碼   |
|  7 | 女裝      | 服裝   |
|  8 | 童裝      | 服裝   |
| 10 | 零食      | 食品   |
| 11 | 特產      | 食品   |
| 12 | 休閒裝    | 服裝   |
+----+-----------+--------+
9 rows in set (0.01 sec)

--統計每一個一級類別下都有多少個子類別。
mysql> select t1.id,t1.name,count(t2.id) from type t1,type t2 where t1.pid=0 and t1.id=t2.pid group by t1.id;
+----+--------+--------------+
| id | name   | count(t2.id) |
+----+--------+--------------+
|  1 | 服裝   |            4 |
|  2 | 數碼   |            3 |
|  9 | 食品   |            2 |
+----+--------+--------------+
3 rows in set (0.00 sec)

1.15.8 MySQL的其餘操做

1. MySQL的表複製
    複製表結構
    mysql> create table 目標表名 like 原表名;

    複製表數據
    mysql> insert into 目標表名 select * from 原表名; 

2. 數據表的索引
    建立索引
    CREATE INDEX index_name ON table_name (column_list)
    CREATE UNIQUE INDEX index_name ON table_name (column_list)

    刪除索引
    DROP INDEX index_name ON talbe_name

3. mysql視圖
    建立視圖:
    mysql> create view v_t1 as select * from t1 where id>4 and id<11;
    Query OK, 0 rows affected (0.00 sec)

    view視圖的幫助信息:
    mysql> ? view
    ALTER VIEW
    CREATE VIEW
    DROP VIEW

    查看視圖:
    mysql> show tables;

    刪除視圖v_t1:
    mysql> drop view v_t1;

4. MySQL的內置函數
    字符串處理函數
    ---------------------------------------------
    *concat(s1,s2,…Sn) 鏈接s1,s2..Sn爲一個字符串
    insert(str,x,y,instr)將字符串str從第xx位置開始,y字符串的子字符串替換爲字符串str
    lower(str)將全部的字符串變爲小寫
    upper(str)將全部的字符串變爲大寫
    left(str,x)返回字符串中最左邊的x個字符
    rigth(str,y)返回字符串中最右邊的x個字符
    lpad(str,n,pad)用字符串pad對str最左邊進行填充,直到長度爲n個字符串長度
    rpad(str,n,pad)用字符串pad對str最右邊進行填充,直到長度爲n個字符串長度
    trim(str)  去掉左右兩邊的空格
    ltrim(str) 去掉字符串str左側的空格
    rtrim(str) 去掉字符串str右側的空格
    repeat(str,x)   返回字符串str重複x次
    replace(str,a,b)將字符串的的a替換成b
    strcmp(s1,s2)   比較字符串s1和s2
    substring(s,x,y)返回字符串指定的長度
    *length(str)  返回值爲字符串str 的長度    

    數值函數
    -----------------------------------------------------
    *abs(x)    返回x的絕對值
    ceil(x)   返回大於x的最小整數值
    floor(x)  返回小於x的最大整數值
    mod(x,y)  返回x/y的取餘結果
    rand()    返回0~1之間的隨機數
    *round(x,y)返回參數x的四捨五入的有y位小數的值
    truncate(x,y) 返回x截斷爲y位小數的結果

    日期和時間函數
    ---------------------------------------------------
    curdate()  返回當前日期,按照’YYYY-MM-DD’格式
    curtime()  返回當前時間,當前時間以'HH:MM:SS' 
    *now()      返回當前日期和時間,
    *unix_timestamp(date) 返回date時間的unix時間戳
    from_unixtime(unix_timestamp[,format])    返回unix時間的時間
    week(date)        返回日期是一年中的第幾周
    year(date)      返回日期的年份
    hour(time)      返回time的小時值
    minute(time)    返回日time的分鐘值
    monthname(date) 返回date的月份
    *date_fomat(date,fmt) 返回按字符串fmt格式化日期date值
    date_add(date,INTERVAL,expr type) 返回一個日期或者時間值加上一個時間間隔的時間值
    *datediff(expr,expr2)   返回起始時間和結束時間的間隔天數

    //統計時間戳647583423距離當前時間相差天數(生日天數(不考慮年份))
    mysql> select datediff(date_format(from_unixtime(647583423),"2017-%m-%d %h:%i:%s"),now());

    其餘經常使用函數
    ------------------------------------------------------
    *database() 返回當前數據庫名
    version()   返回當前服務器版本
    user()        返回當前登錄用戶名
    inet_aton   返回當前IP地址的數字表示 inet_aton("192.168.80.250");
    inet_ntoa(num) 返回當前數字表示的ip   inet_ntoa(3232256250);
    *password(str)  返回當前str的加密版本
    *md5(str)      返回字符串str的md5值

5. MySQL的事務處理
    關閉自動提交功能(開啓手動事務)
    mysql> set autocommit=0;
    從表t1中刪除了一條記錄
    mysql> delete from t1 where id=11;
    此時作一個p1還原點:
    mysql> savepoint p1;
    再次從表t1中刪除一條記錄:
    mysql> delete from t1 where id=10;
    再次作一個p2還原點:
    mysql> savepoint p2;
    此時恢復到p1還原點,固然後面的p2這些還原點自動會失效: 
    mysql> rollback to p1;
    退回到最原始的還原點:
    mysql> rollback;
    回滾

    開啓自動事務提交(關閉手動事務)
    mysql> set autocommit=1;

6. MySQL的觸發器
    格式:一、觸發器的定義:
      CREATE TRIGGER trigger_name trigger_time trigger_event
        ON tbl_name FOR EACH ROW trigger_stmt

      說明:
      # trigger_name:觸發器名稱
      # trigger_time:觸發時間,可取值:BEFORE或AFTER
      # trigger_event:觸發事件,可取值:INSERT、UPDATE或DELETE。
      # tb1_name:指定在哪一個表上
      # trigger_stmt:觸發處理SQL語句。

    示例:
        mysql> delimiter $$
        mysql> create trigger del_stu before delete on stu for each row
            -> begin
            ->  insert into stu_bak values(old.id,old.name,old.sex,old.age,old.addtime);
            -> end;
            -> $$
        Query OK, 0 rows affected (0.05 sec)

        mysql> delimiter ;

7. mysql日誌
    開啓日誌: 在mysql配置文件中開啓:log-bin=mysql-bin

    查看bin-log日誌:
    mysql>show binary logs;

    查看最後一個bin-log日誌:
    mysql>show master status;

    此時就會多一個最新的bin-log日誌
    mysql>flush logs;

    查看最後一個bin日誌.
    mysql>show master status;

    mysql>reset master;
    清空全部的bin-log日誌
    執行查看bin-log日誌

    備份數據:
    mysqldump -uroot -pwei test -l -F '/tmp/test.sql'
    其中:-F即flush logs,能夠從新生成新的日誌文件,固然包括log-bin日誌 

    // Linux關閉MySQL的命令
    $mysql_dir/bin/mysqladmin -uroot -p shutdown
    // linux啓動MySQL的命令
    $mysql_dir/bin/mysqld_safe &

八、有關慢查詢操做:
    開戶和設置慢查詢時間:
    vi /etc/my.cnf
    log_slow_queries=slow.log
    long_query_time=5
    查看設置後是否生效
    mysql> show variables like "%quer%"; 
    慢查詢次數:
    mysql> show global status like "%quer%";


9 數據庫的恢復
    1. 首先恢復最後一次的備份完整數據
    [root@localhost mnt]# mysql -u root -p mydemo<mydemo_2017-7-26.sql 
    Enter password: 

    2. 查看bin-log日誌
    [root@localhost data]# mysqlbinlog --no-defaults mysql-bin.000009;
      查找到恢復的節點

    3. 執行bin-log日誌文件,恢復最後一塊的增量數據。 
    [root@localhost data]# mysqlbinlog --no-defaults --stop-position="802" mysql-bin.000009|mysql -u root -p123456 mydemo;
相關文章
相關標籤/搜索