有關MySQL資料處理
有關MySQL資料處理
有關MySQL資料處理
資料的基本概念
- 資料
1.描述事物的符號記錄
2.包括數字,文字 圖形、影象、聲音、檔案記錄
3.以記錄 形式按統一的格式進行儲存
- 表
1.將不同的記錄組織在一起
2.用來存現具體資料
- 資料庫
- 表的集合 是存現資料的倉庫
2.以一定的組織方式儲存的相關的資料集合
- 資料庫管理系統
實現現對資料庫資源有效組織,管理和存取的系統軟體
- 資料庫系統
1.是一個人機系統、有硬體 、OS、資料庫 DBMS 應用軟體和使用者組成
2.使用者可以通過DBMS或應用程式操作資料庫
資料庫系統發展史
- 第一代資料庫
自20世紀60年代起,第一代資料庫系統問世是層次模型與網狀模型的資料庫系統為統一管理和共享資料提供了有力的支撐
- 第二代資料庫
1.20世紀70年代初,第二代資料庫——關係資料庫開始出現
2.20世紀80年代初,IBM公司的關係資料庫系統DB2問世,開始逐步取代層次與網狀模型的資料庫,成為行業主流
3.到目前為止,關係資料庫系統仍佔領資料庫應用的主要地位
- 第三代資料庫
1.自20世紀80年代開始,適應不同領域的新型資料庫系統不斷湧現
2.面向物件的資料庫系統,實用性強、適應面廣
3.20世紀90年代後期,形成了多種資料庫系統共同支撐應用的局面
4.一些新的元素被新增進主流資料庫系統中(1).例如 Oracle支援的“關係——物件” 資料庫模型
關係資料庫
- 關係資料庫系統時基於關係模型的資料庫系統
- 關係模型的資料結構使用簡單易懂的二維資料表
- 關係模型可用簡單的“實體-關係” (E-R)圖來表示
- E-R圖中包含了實體(資料物件)、關係和屬性三個要素
- 實體
1.也稱為例項 對應顯示世界中可區別與其他物件的“事件” 或 “事物”
- 屬性
1.實體所具有的某一特性 一個實體可以有多個人屬性
(1)如“銀行客戶”實體基中的 每個實體均具有姓名,住址 電話 等屬性
- 聯絡
- 實體集之間的對應關係稱為聯絡,也稱為關係
1).如銀行客戶和銀行賬戶之間存在:儲蓄的關係
- 所有實體及實體之間聯絡的集合構成一個關係資料庫
- 關係資料庫的儲存結構是二維表格
- 在沒個二維表中
1.每一行稱為一條記錄 用來描述一個物件的資訊
2.每一列稱為一個欄位 用來描述物件的一個屬性
關係型資料庫應用
- 關係型資料庫
- Oracle MySQL
- SQLServer Sybase
- Informix access
- DB2 FoxPRO
非關係資料庫介紹
- l非關係資料庫也被稱為NoSQL (Not Only SQL)
- l儲存資料不易關係模型為依據,不需要固定的表格式
- 非關係資料庫的優點
- 資料庫可高併發讀寫
- 對海量資料高效率儲存與訪問
- 資料庫具有高擴充套件性與高可用性
- 常用的非關係資料庫:Redis、MongoDB等。
MySQL資料庫介紹
- 一款深受歡迎的開源關係資料庫
- Oracle旗下的產品
- 遵守l GPL協議,可以免費使用與修改
- 特點
- 效能卓越、服務穩定
- 開源、無版權限制。成本低
- 多執行緒、多使用者
- 基於C/S(客戶端/伺服器)架構
- 安全可靠
SQL語句概述
- SQL語言
1、structured query language的縮寫,即結構化查詢語言
2、關係型資料庫的標準語言
3、使用者維護管理資料庫
包括資料查詢、資料更新、訪問控制、物件管理等功能
MySQL操作管理命令
- 檢視資料庫結構
1、檢視資料庫們——show databases
2、進入某個資料庫——use 資料庫名
3、檢視資料庫中的表們——show tables
4、顯示錶的結構(欄位)——describe 表名
附:
(1)若未進入對應資料庫中,顯示錶的結構(欄位)——describe 資料庫名.表名
(2)describe 表名=desc 表名
DDL操作命令
建立一個數據庫:create database 資料庫名
建立一個數據表:create table 表名(欄位定義01、欄位定義02…)
欄位定義(名稱+型別+約束)
1名稱:屬性名稱,自定義
2型別:
整數型:int(5) 00000-99999
小數型:decimal(5,2) 有效數字是5位 小數點後面保留2位 100.00
固定長度字串:char(255)
可變長度字串:varchar(65535)
3約束:
非空約束(not null):內容不允許為空
主鍵約束(primary key):非空且唯一標識
預設值(default):假如沒有填資料,預設預先設定的值填寫
自增特性(auto_increment): id 1234
新增表中的一列:alter table 資料表名 add column (欄位定義)
刪除某個資料庫:drop database 資料庫名
刪除某個資料表:drop table 資料表名
示例
mysql> create database aaa; # 建立一個“aaa”的資料庫
mysql> use aaa; #進入“aaa”資料庫
mysql> create table test (id int(3) auto_increment primary key,age int(3) not null,name varchar(100) not null,score decimal(5)); #建立一個“cj”表,包含id、age、name、score
Query OK, 0 rows affected (0.02 sec)
mysql> desc cj;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| age | int(3) | NO | | NULL | |
| name | varchar(128) | NO | | NULL | |
| score | decimal(5,0) | YES | | NULL | |
mysql> alter table cj add column addr int(3); #增加一列“addr”
mysql> desc cj
-> ^C
mysql> desc cj;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| age | int(3) | NO | | NULL | |
| name | varchar(128) | NO | | NULL | |
| score | decimal(5,0) | YES | | NULL | |
| addr | int(3) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
mysql> show databases; ## 檢視有哪些資料庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| aaa |
| auth |
| mysql |
| performance_schema |
| sys |
+--------------------+
mysql> show tables; #檢視資料表們
mysql> show tables;
+---------------+
| Tables_in_aaa |
+---------------+
| cj |
+---------------+
mysql> drop database aaa; #刪掉“AAA”這個資料庫
mysql> drop table ccc; #刪除“bbb”這個資料表
DML操作命令(管理)
1、insert:插入新資料
insert into 表名(欄位1,欄位2,…)values(欄位1的值,欄位2的值,…)
2、update:更新原有資料
3、delete:刪除不需要的資料
示例
mysql> insert into test(age,name,score,addr) values(17,'zhangsna',80,101),(18,'lisi',66,102)
mysql> select * from cj;
+----+-----+----------+-------+------+
| id | age | name | score | addr |
+----+-----+----------+-------+------+
| 1 | 17 | zhangsna | 60 | 101 |
| 2 | 18 | lisi | 66 | 102 |
+----+-----+----------+-------+------+
mysql> update cj set age=19 where name='zhangsna';
mysql> select * from cj;
+----+-----+----------+-------+------+
| id | age | name | score | addr |
+----+-----+----------+-------+------+
| 1 | 19 | zhangsna | 60 | 101 |
| 2 | 18 | lisi | 66 | 102 |
+----+-----+----------+-------+------+
mysql> delete from aaa. cj where name='zhangsna';
mysql> select * from cj;
+----+-----+------+-------+------+
| id | age | name | score | addr |
+----+-----+------+-------+------+
| 2 | 18 | lisi | 66 | 102 |
+----+-----+------+-------+------+
DQL操作命令(查詢)
select:用於從資料表中查詢符合條件的資料記錄
select 欄位名1,欄位名2…from 表名
示例
mysql> use auth ##切換資料庫
mysql> select user_name from users;
+-----------+
| user_name |
+-----------+
| laowang |
| lisi |
| wanger |
| zhangsan |
+-----------+
mysql> use aaa; ## 切換資料庫
mysql> select * from cj;
+----+-----+------+-------+------+
| id | age | name | score | addr |
+----+-----+------+-------+------+
| 2 | 18 | lisi | 66 | 102 |
+----+-----+------+-------+------+
mysql> select age,name from cj;
+-----+------+
| age | name |
+-----+------+
| 18 | lisi |
+-----+------+
DCL操作命令(控制)
1、設定使用者許可權的命令
grant 許可權列表 on 資料庫名.表名 to 使用者名稱@來源地址 [identified by ‘密碼′ ]
附:
若使用者已存在,則更改使用者密碼
若使用者不存在,則新建使用者
示例
mysql> grant select on *.* to 'lisi'@'localhost' identified by '123456';
mysql> show grants for 'lisi'@'localhost';
+--------------------------------------------------+
| Grants for [email protected] |
+--------------------------------------------------+
| GRANT SELECT ON *.* TO 'lisi'@'localhost' |
| GRANT SELECT ON "aaa"."cj" TO 'lisi'@'localhost' |
+--------------------------------------------------+
[[email protected] ~]# mysql -ulisi -p123456 ##登入lisi
mysql> show grants for 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for [email protected] |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec
mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec) # '%'除本地外的所有終端
撤銷使用者許可權的命令
revoke 許可權列表 on 資料庫名.表名 from 使用者名稱@來源地址
mysql> revoke select on *.* from 'lisi'@'localhost';
mysql> show grants for 'lisi'@'localhost';
+--------------------------------------------------+
| Grants for [email protected] |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO 'lisi'@'localhost' |
| GRANT SELECT ON "aaa"."cj" TO 'lisi'@'localhost' |
+--------------------------------------------------+
2 rows in set (0.00 sec)
克隆
mysql> create table cj2 like cj;
mysql> show tables;
+---------------+
| Tables_in_aaa |
+---------------+
| cj |
| cj2 |
+---------------+
mysql> select * from cj;
+----+-----+------+-------+------+
| id | age | name | score | addr |
+----+-----+------+-------+------+
| 2 | 18 | lisi | 66 | 102 |
+----+-----+------+-------+------+
mysql> select * from cj2;
Empty set (0.00 sec) ## 此時是看不出資料的
mysql> insert into cj2 select * from cj;
mysql> select * from cj2;
+----+-----+------+-------+------+
| id | age | name | score | addr |
+----+-----+------+-------+------+
| 2 | 18 | lisi | 66 | 102 |
+----+-----+------+-------+------+
臨時表
在資料庫裡臨時建立的表,記錄當下的短暫資料,退出資料庫後,表將消失
mysql> create temporary table ttt (id int(5) not null, name varchar(64) not null);
mysql> show tables;
+---------------+
| Tables_in_aaa |
+---------------+
| cj |
| cj2 |
+---------------+
mysql> insert into ttt values(1,'lh'),(2,'mh');
mysql> select * from ttt;
+----+------+
| id | name |
+----+------+
| 1 | lh |
| 2 | mh |
+----+------+
mysql> exit
[[email protected] ~]# mysql
mysql> select * from ttt;
ERROR 1046 (3D000): No database selected