數據庫及mysql

DBMS:Database Management System    數據管理系統

RDBMS:Relational Database Management System 關係數據管理系統

數據的組織結構:

    層次型

    網狀型

    關係型

RDBMS基本功能:

1、數據庫創建、刪除

2、創建表、刪除表、修改表

3、索引的創建、刪除

4、用戶和權限

5、數據增、刪、改

6、查詢


DML:Data Manapulate Language:數據操作語言

    insert,replace,update,delete

DDL:Data Definltion Language:數據定義語言

    create,alter,drop

DCL:Data control Language :數據控制語言

    Grant revoke select

    

RDBMS軟件:

    Oracle,Sybase,Infomix,SQL Server,DB2

    MySQL,PostgreSQL,EnterpriseDB(有免費版,有開源版本)

    MariaDB-->mysql分支

    percona MySQL-->開源,性能比mysql要好

    

DBMS的好處:

    1、數據管理的獨立性

    2、有效地完成數據存取

    3、數據完整性和安全性

    4、數據集中管理

    5、併發存儲與故障恢復

    6、減少應用程序開發時間


DBMS基本組件:

    1、分析器

    2、計劃執行器

    3、優化器

    4、文件的存取方法

    5、緩存器

    6、磁盤空間管理器

    7、故障恢復管理器

    8、事務管理器

    9、鎖管理器


MySQL版本:

    Commulity Edtion

    Enterprise Edtion

MySQL軟件格式:

    軟件包管理器特有的格式

        rpm包

    通用二進制格式,類似綠色軟件,也包含msi,exe的格式

    源程序

mysql.x86_64                        #mysql客戶端                  
mysql-bench.x86_64                  #mysql性能測試       
mysql-connector-java.noarch         #mysql連接驅動        
mysql-connector-odbc.x86_64         #mysql連接驅動       
mysql-devel.i686                    #開發       
mysql-devel.x86_64                                
mysql-libs.i686                     #庫文件    
mysql-server.x86_64                 #mysql服務端程序     
mysql-test.x86_64                   #測試     
php-mysql.x86_64                    #php連接mysql驅動

安裝後的二進制程序
mysql:客戶端

    -u USERNAME

    -p 密碼

    -h MYSQL_SERVER

        linux:Socket,Socket文件路徑爲:/var/lib/mysql/mysql.sock

        windows:共享內存(memory)

用戶:Username@HOST(HOST指哪個客戶端地址來登陸MYSQL服務)

    mysql客戶端:

        交互式模式

        批處理模式

            執行mysql腳本

交互式模式中的命令類別:

    客戶端命令

    服務端命令

        必須使用語句結束符,默認是分號“;”

mysqld:服務端


端口:

    tcp/3306 

用戶和組:

mysql,mysql


mysql數據庫存放目錄:

    /var/lib/mysql/


mysql初始化:

    建立mysql數據庫,包含數據庫的源數據


關係數據庫對象:

    庫

    表

    索引

    視圖

    約束

    存儲函數

    觸發器

    遊標

    用戶

    權限

    事務


表:

    行,列

    表就是一個實體,實體集

        行:row

        列:field,fidld也叫column

字段名稱,數據類型,類型修飾(可以實現限制或者約束)

    數據類型

        字符

            CHAR(n),存n個佔用空間爲n,不足n個,也佔用n個(默認不區分大小寫),最多256個字符

            VARCHAR(n):存n個佔用空間爲n,不足n個,佔用實際使用數+1個(默認不區分大小寫)

                        最多存65536個字符

            BINARY(n):與CHAR類似,區分大小寫

            VARBINARY(n):與VARCHAR類似,區分大小寫

            TEXT(n):不區分大小寫

            BLOB(n):區分大小寫,TEXT與BLOB類似,只是區分大小寫

            

        數值

            精確數值

                整型

                    TINYINT:一個字節,最多表示範圍:正128到負127,或者0-255

                    SMALLINT:兩個字節

                    MEDIUMINT:三個字節

                    INT:四個字節

                    BIGINT:八個字節

                    修飾符:UNSIGNED,無負數



                            NOT NULL

                十進制

                    DECIMAL

            近似數值

                浮點型

                    FLOAT

                    DOUBLE

            日期時間

                    DATE

                    TIME

                    DATETIME

                    STAMP

            布爾

                    0

                    1

            內置:ENUM,SET

DDL:

    CREATE:創建

    ALTER:修改

    DROP:刪除

DML:

    INSERT

    UPDATE

    DELETE

DCL:

    GRANT

    REVOKE

創建數據庫:

    CREATE DATABASE db_name

mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE DATABASE IF NOT EXISTS test_db;   #如果不存在就創建test_db
Query OK, 1 row affected, 1 warning (0.00 sec)

刪除數據庫:

    DROP DATABASE test_db

mysql> DROP DATABASE test_db;
Query OK, 0 rows affected (0.00 sec)

創建表

    CREATE TABLE tb_name(co11,co12,...);

mysql> create table students(Name CHAR(20) NOT NULL,Age TINYINT UNSIGNED,Gender CHAR(1) NOT NULL);
Query OK, 0 rows affected (0.04 sec)

#創建students表,一行內容爲:Name 字符型不超過20個字符,不允許爲空。年齡,一個字節,不能爲負數。性別,字符型,不允許爲空

查看庫中的表

    show tables from db_name

mysql> show tables from mydb;
+----------------+
| Tables_in_mydb |
+----------------+
| students       |
+----------------+
1 row in set (0.00 sec)

查看錶的結構:

    desc table_name 

mysql> desc students;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| Name   | char(20)            | NO   |     | NULL    |       |
| Age    | tinyint(3) unsigned | YES  |     | NULL    |       |
| Gender | char(1)             | NO   |     | NULL    |       |
+--------+---------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

刪除表

    drop table tb_name;

mysql> drop table students;
Query OK, 0 rows affected (0.00 sec)

修改表:

    ALTER TABLE tb_name

        MODIFY:修改

        CHANGE:改變

        ADD:添加

        DROP:刪除

mysql> alter table students add course varchar(100);  #在students中添加course字段
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
#修改表中的course爲Course,必須再次指定字段類型,並調整到Name後面
mysql> alter table students change course Course varchar(100) after Name;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

在客戶端設置默認數據庫:

mysql> USE test;
Database changed

插入數據

    insert into tb_name (col1,col2,...) VALUES|VALUE('STRING',NUM,...);

mysql> insert into students (Name,Gender) value ('LingHuchong','M'),('XiaoLongnv','F');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from students;
+-------------+--------+------+--------+
| Name        | Course | Age  | Gender |
+-------------+--------+------+--------+
| LingHuchong | NULL   | NULL | M      |
| XiaoLongnv  | NULL   | NULL | F      |
+-------------+--------+------+--------+
2 rows in set (0.00 sec)
mysql> insert into students values ('xiaoxiangzi','HaMogong',57,'M');
Query OK, 1 row affected (0.00 sec)
mysql> select * from students;
+-------------+----------+------+--------+
| Name        | Course   | Age  | Gender |
+-------------+----------+------+--------+
| LingHuchong | NULL     | NULL | M      |
| XiaoLongnv  | NULL     | NULL | F      |
| xiaoxiangzi | HaMogong |   57 | M      |
+-------------+----------+------+--------+
3 rows in set (0.00 sec)

修改數據:

    update tb_name SET column=value WHERE 

mysql> update students set Course='pixiejianfa' where Name='XiaoLongnv';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from students;
+-------------+-------------+------+--------+
| Name        | Course      | Age  | Gender |
+-------------+-------------+------+--------+
| LingHuchong | NULL        | NULL | M      |
| XiaoLongnv  | pixiejianfa | NULL | F      |
| xiaoxiangzi | HaMogong    |   57 | M      |
+-------------+-------------+------+--------+
3 rows in set (0.00 sec)

where條件方法:

    選擇:指定以某字段做爲搜索碼,做邏輯比較,篩選符合條件的行;,選擇行

    投影:選擇列

mysql> select Name,Course from students where Gender='M';   #既選擇又投影的方法
+-------------+----------+
| Name        | Course   |
+-------------+----------+
| LingHuchong | NULL     |
| xiaoxiangzi | HaMogong |
+-------------+----------+
2 rows in set (0.00 sec)

刪除數據:

    delete from tb_name where CONDITION;

mysql> delete from students where Course='HaMogong';
Query OK, 1 row affected (0.00 sec)

mysql> select * from students;
+-------------+-------------+------+--------+
| Name        | Course      | Age  | Gender |
+-------------+-------------+------+--------+
| LingHuchong | NULL        | NULL | M      |
| XiaoLongnv  | pixiejianfa | NULL | F      |
+-------------+-------------+------+--------+
2 rows in set (0.00 sec)

select用法:

    select 字段 from tb_name where CONDITION;

    *:所有字段

    where:沒有指定where,表示所有行


DCL:

    create user 'USERNAME'@'HOST'identified by 'PASSWD';

mysql> create user 'jerry'@'%' identified by 'jerry';  #創建用戶,以任意主機登陸
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'jerry'@'%';   #查看用戶權限
+------------------------------------------------------------------------------------------------------+
| Grants for jerry@%                                                                                   |
+------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jerry'@'%' IDENTIFIED BY PASSWORD '*09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0' |
+------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> grant all privileges on *.* to 'root'@'10.189.%.%' identified by '1234';
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host,password from user;
+-------+------------+-------------------------------------------+
| user  | host       | password                                  |
+-------+------------+-------------------------------------------+
| root  | localhost  | *513072B3FC876D3C8D7F4928657127C47A795C41 |
| root  | 127.0.0.1  |                                           |
|       | localhost  |                                           |
| jerry | %          | *09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0 |
| root  | 10.189.%.% | *513072B3FC876D3C8D7F4928657127C47A795C41 |
+-------+------------+-------------------------------------------+


    drop user 'USERNAME'@'HOST';

    

    HOST:

        IP

        HOSTNAME

        NETWORK;

        通配符:

            _:匹配任意單個字符,172.16.0._  

            %:匹配任意字符:jerry@'%'

用戶授權:

    grant pri1,pri2,...on db_name.tb_name to 'username'@'host' [identified by 'passwd'];

#將mydb下的所有表的所有權限授權給jerry@%用戶
mysql> grant all privileges on mydb.* to 'jerry'@'%';  
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'jerry'@'%';   
+------------------------------------------------------------------------------------------------------+
| Grants for jerry@%                                                                                   |
+------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jerry'@'%' IDENTIFIED BY PASSWORD '*09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0' |
| GRANT ALL PRIVILEGES ON `mydb`.* TO 'jerry'@'%'                                                      |
+------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)


取消權限

    pevoke pri1,pri2,... on db_name.tb_name form 'username'@'HOST';

    

對用戶設定密碼的方法:

1、mysql中更改

mysql> set password for 'root'@'localhost'=password('123456');  #password('1234')是函數
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;        #改完密碼需刷新表,讓mysql重讀授權表
Query OK, 0 rows affected (0.00 sec)

2、shell中修改

   mysqladmin -uroot  -hHOST -p password 'password'

3、使用update更新表項完成密碼修改

mysql> update user set Password=password('123456') where User='root' and host='localhost';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select User,Host,Password from user;
+-------+-----------+-------------------------------------------+
| User  | Host      | Password                                  |
+-------+-----------+-------------------------------------------+
| root  | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root  | 127.0.0.1 |                                           |
|       | localhost |                                           |
| jerry | %         | *09FB9E6E2AA0750E9D8A8D22B6AA8D86C85BF3D0 |
+-------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)



mysql客戶端圖形管理工具:

    1、phpmyadmin

    2、workbench

    3、mysql front

    4、navicat for mysql

    5、toad







練習:

MySQL基礎操作練習(所屬的庫叫做testdb):


新建如下表(包括結構和內容):


ID    Name          Age     Gender     Course

1     Ling Huchong   24      Male       Hamogong

2     Huang Rong    19      Female     Chilian Shenzhang

3     Lu Wushaung   18      Female     Jiuyang Shenggong

4     Zhu Ziliu     52      Male       Pixie Jianfa

5     Chen Jialuo   22      Male       Xianglong Shiba Zhang


2、完成如下操作

(1)找出性別爲女性的所有人;

(2)找出年齡大於20的所有人;

(3)修改Zhu Ziliu的Course爲Kuihua Baodian; 

(4)刪除年齡小於等於19歲的所有人;

(5)創建此表及所屬的庫;

(6)授權給testuser對testdb庫有所有訪問權限;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章