一、資料庫簡介
我們常用的資料存盤方式,比如記憶體和檔案,資料保存在記憶體中時,存取速度快,但是資料不能永久保存 ;資料保存在檔案時,資料永久,但是速度比記憶體操作慢,頻繁的IO操作,并且查詢資料不方便,而資料庫的存盤方式,資料持久化保存,高可靠,高可用,資料的快速提取,所以在企業中得以廣泛使用,
安裝MySQL的詳細步驟在這篇文章MYSQL安裝
二、查看資料庫
查看有已有哪些資料庫:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql默認4個資料庫
information_schema: 定義訪問資料庫元資料的方式,資料庫名和表名,列的資料型別、訪問權限等,
mysql:核心資料庫,負責存盤資料庫用戶、權限、關鍵字等用戶自己需要使用的控制和管理資訊,
performance_schema:資料庫的性能引數,存盤引擎等,
sys:sys系統庫下包含許多視圖,它們以各種方式對preformance_schema表進行聚合計算展示,
查看資料庫中有哪些表:
mysql> use mysql; #use后跟資料庫名
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
......
Mysql資料庫的資料檔案都存放在/usr/local/mysql/data目錄下,每個資料庫對應一個子目錄,用于儲存資料表檔案,每一個資料表對應為三個檔案,后綴名分別為’’.frm “.myd” 和“.myi",當然也有少數以opt、csm、csv、ibd結尾的,
查看表的結構:
mysql> use mysql;#先使用資料庫
mysql> desc user;#再查看表
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
或者
mysql> desc mysql.user;#用 資料庫名.表名 的格式查看
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
三、SQL陳述句
SQL分類
- DDL:資料定義語言
- DML:資料操縱語
- DQL:資料查詢語言(select)
- DCL:資料控制語言
3.1 DDL陳述句
DDL陳述句用于創建資料庫物件,如庫、表、索引等,
1、新建庫、表
mysql> create database student;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;#可查看到
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| student |
| sys |
+--------------------+
5 rows in set (0.00 sec)
#建表
mysql> use student;
Database changed
mysql> create table info (id int(3) not null primary key,name char(10) not null,address varchar(50) default 'nj');
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| info |
+-------------------+
1 row in set (0.00 sec)
#查看表結構
mysql> describe info;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(3) | NO | PRI | NULL | |
| name | char(10) | NO | | NULL | |
| address | varchar(50) | YES | | nj | |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
create table 表名(欄位01名稱 欄位01型別 欄位01約束,欄位02名 欄位02型別 欄位02約束)存盤引擎 字符集
多個欄位用逗號加空格隔開,
欄位01名稱:屬性名稱,自定義
欄位01型別:
int (5) 整型 00000-99999
double 浮點型
decimal(5,2) 有效數字是5位,小數點后面保留2位
fioat 單精度浮點 4位元組
varchar(50) 可變長度字串
char(10) 固定長度字串
欄位01約束:
非空約束:內容不允許為空
主鍵約束:非空且唯一 典型的標識
默認值:假如沒有填資料,默認預先設定的值
自增值:自動排序1、2、3、4…
存數引擎:myisam innodb
字符集:UTF-8
2、洗掉庫、洗掉表
mysql> drop database 后面跟庫名或者 庫名.表名;
Query OK, 0 rows affected (0.02 sec)
3.2 DML陳述句
DML陳述句用于對表中的資料進行管理
- INSERT:插入新資料
- UPDATE:更新原有資料
- DELETE:洗掉不不需要的資料
1、表中插入資料
#方法1:
insert into info (id,name,address) values (1,'lisi','上海'),(3,'wangwu','北京');#對應各個欄位
#方法2:
insert into info values (4,'yiyi','北京');
查看:
mysql> select * from info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 上海 |
| 3 | wangwu | 北京 |
| 4 | yiyi | 北京 |
+----+--------+---------+
3 rows in set (0.00 sec)
2、修改、更新資料表中的資料記錄
UPDATE 表名 SET 欄位名1=值1[,欄位名2=值2] WHERE條件運算式
#將info表中lisi的地址替換為蘇州
mysql> update tom set address=‘蘇州’ where name='lisi';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
查看
mysql> select * from info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 蘇州 |
| 3 | wangwu | 北京 |
| 4 | yiyi | 北京 |
+----+--------+---------+
3 rows in set (0.00 sec)
修改用戶登錄資料庫密碼
mysql> update mysql.user set authentication_string=password('123123') where user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1
在資料庫中刪除指定的資料記錄
delete from 表名 where 條件運算式(不帶where代表洗掉表中所有記錄)
mysql> select * from student.info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 蘇州 |
| 3 | wangwu | 北京 |
| 4 | yiyi | 北京 |
+----+--------+---------+
3 rows in set (0.00 sec)
mysql> delete from student.info where name='yiyi';
Query OK, 1 row affected (0.01 sec)
mysql> select * from student.info;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 蘇州 |
| 3 | wangwu | 北京 |
+----+--------+---------+
2 rows in set (0.00 sec)
3.3 資料庫高級操作
1、清空表
delete from info;
truncate table info;
truncate清空表資料,表還在;
drop是洗掉資料和表;
2、臨時表
臨時建立的表,用于保存一些臨時資料,不會長期存在
mysql> create temporary table cdc (id int(3) not null auto_increment,name varchar(10) not null,hobby varchar(10) not null,primary key(id))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> describe cdc;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(3) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| hobby | varchar(10) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> insert into cdc (name,hobby) values ('boy','dog');
Query OK, 1 row affected (0.00 sec)
mysql> select * from cdc;
+----+------+-------+
| id | name | hobby |
+----+------+-------+
| 1 | boy | dog |
+----+------+-------+
1 row in set (0.00 sec)
mysql> show tables;#并沒有cdc表
+-------------------+
| Tables_in_student |
+-------------------+
| info |
| jerry |
| tom |
+-------------------+
3 rows in set (0.00 sec)
#不在硬碟上,在記憶體上
3、克隆表
like方法:從info表完整復制結構生成test表
mysql> use student;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table test like info;
Query OK, 0 rows affected (0.02 sec)
匯入資料
mysql> insert into test select * from info;
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from test;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 蘇州 |
| 3 | wangwu | 北京 |
+----+--------+---------+
2 rows in set (0.00 sec)
或者用as
mysql> create table zf as select * from info;
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from zf;
+----+--------+---------+
| id | name | address |
+----+--------+---------+
| 1 | lisi | 蘇州 |
| 3 | wangwu | 北京 |
+----+--------+---------+
2 rows in set (0.00 sec)
3.4 DCL資料庫用戶授權
1、DCL陳述句設定用戶權限(用戶不存在時;則會新建用戶)
mysql> create user 'lisi'@'%' identified by '123123';
Query OK, 0 rows affected (0.00 sec)
#設定登錄密碼為abc123的lisi用戶,可以從任意終端(%)登錄
#若要限制只能本地登錄,%換為localhost,(主機名或終端IP地址)
mysql> grant all on *.* to 'lisi'@'%' identified by '123123';
Query OK, 0 rows affected, 1 warning (0.01 sec)
#對所有庫和所有表(*.*)有全部權限
#若只允許對mysql庫中user表有select權限
mysql> grant select on mysql.user to 'lisi'@'%' identified by '123123';
2、查看當前用戶的權限
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| 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> show grants for 'lisi'@'localhost';
+------------------------------------------------------+
| Grants for lisi@localhost |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'lisi'@'localhost' |
| GRANT SELECT ON `mysql`.`user` TO 'lisi'@'localhost' |
+------------------------------------------------------+
3、查看當前系統中的用戶
mysql> select user from mysql.user;
+---------------+
| user |
+---------------+
| lisi |
| mysql.session |
| mysql.sys |
| root |
+---------------+
4 rows in set (0.00 sec)
4、撤銷用戶的權限
mysql> revoke select on mysql.user from 'lisi'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'lisi'@'localhost';
+------------------------------------------+
| Grants for lisi@localhost |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'lisi'@'localhost' |
+------------------------------------------+
1 row in set (0.00 sec)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/201021.html
標籤:其他
