MySQL基本操作

一、簡介

MySQL是由David Axmark、Allan Larsson和Michael Widenius3個瑞典人於20世紀90年代開發的一個關係型數據庫管理系統,主要用於存儲和管理數據。所謂關係型數據庫,是建立在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據;它將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這增加了速度並提高了靈活性。
MySQL使用標準的SQL數據語言形式,主要包括DDL語句(數據定義語言)、DML語句(數據操作語句)和DCL語句(數據控制語句)。

二、DDL語句

對數據庫內部的對象進行創建、刪除、修改等操作的語言。它與DML語句的最大區別是:DML只是對錶內部數據操作,不涉及表的定義、結構的修改。
1、啓動mysql服務器

mysql service start
mysql -uroot -p

然後輸入密碼,出現“mysql>”提示符。

  • 命令的結束符:用‘;’或‘\g’結束
  • 通過‘help’或‘\h’命令顯示幫助內容
  • 通過‘\c’命令清除命令行buffer

命令的結束符:
2、創建數據庫

creat database dbname
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| TESTDB             |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
6 rows in set (0.00 sec)

2、選擇數據庫

use dbname
mysql> use test1;
Database changed
mysql> show tables;
Empty set (0.01 sec)

3、刪除數據庫

drop database dbname;
mysql> drop database test1;
Query OK, 0 rows affected (0.00 sec)

4、創建表

create table tablename(column_name1 column_type1, column_name2 column_type2,...)
mysql> create table emp(ename varchar(10),hiredate date,sal decimal(10,2), deptno int(2));
Query OK, 0 rows affected (0.06 sec)

mysql> desc emp;

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(10)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

查看創建的SQL語句

mysql> show create table emp \G;
*************************** 1. row ***************************
       Table: emp
Create Table: CREATE TABLE `emp` (
  `ename` varchar(10) DEFAULT NULL,
  `hiredate` date DEFAULT NULL,
  `sal` decimal(10,2) DEFAULT NULL,
  `deptno` int(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

ERROR: 
No query specified

5、刪除表

drop table emp;

6、修改表
(1)、修改表類型
alter table tablename modify col_name column_definition
該命令無法修改列名稱
修改表emp的ename字段定義,將varchar(10)改爲varchar(20):

mysql> alter table emp modify ename varchar(20);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

(2)、增加表字段
alter table tablename add column col_name column_definition
在表emp中新增字段age,類型爲int(3):

mysql> alter table emp add column age int(3);
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
| age      | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

(3)、刪除表字段
alter table tablename drop column col_name
將字段age刪除掉:

mysql> alter table emp drop column age;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

(4)、字段改名
alter table tablename change old_col_name column_definition
將age改名爲age1,同時修改字段類型爲int(4):

mysql> alter table emp change age age1 int(4);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
| age1     | int(4)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

(5)、修改字段排列順序
alter table tablename add col_name1 col_type after col_name2
將新增字段birth date 加在ename之後:

mysql> alter table emp add birth date after ename;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| birth    | date          | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
| age      | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

alter table tablename modify col_name col_type first
修改字段age,將它放在最前面:

mysql> alter table emp modify age int(3) first;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| age      | int(3)        | YES  |     | NULL    |       |
| ename    | varchar(20)   | YES  |     | NULL    |       |
| birth    | date          | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)

(6)、更改表名
alter table tablename rename new_tablename
將表emp改名爲emp1:

mysql> alter table emp rename emp1;
Query OK, 0 rows affected (0.03 sec)

mysql> desc emp;
ERROR 1146 (42S02): Table 'test1.emp' doesn't exist

mysql> desc emp1;

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| age      | int(3)        | YES  |     | NULL    |       |
| ename    | varchar(20)   | YES  |     | NULL    |       |
| birth    | date          | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

三、DML語句

對數據庫中表記錄的操作,主要包括表記錄的插入、更新、刪除和查詢。
1、插入記錄
insert into tablename (field1, field2,…) values (value1, value2,…)
向表emp中插入記錄:

mysql> insert into emp values('lisa','2003-02-01','3000',2);
Query OK, 1 row affected (0.01 sec)

mysql> insert into emp (ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from emp;

+-------+------------+---------+--------+
| ename | hiredate   | sal     | deptno |
+-------+------------+---------+--------+
| lisa  | 2003-02-01 | 3000.00 |      2 |
| zzx1  | 2000-01-01 | 2000.00 |      1 |
+-------+------------+---------+--------+
2 rows in set (0.00 sec)

只對表中ename和sal字段插入記錄(未插入記錄字段顯示爲NULL
):

mysql> insert into emp (ename,sal) values('dony',1000);
Query OK, 1 row affected (0.01 sec)

mysql> select * from emp;

+-------+------------+---------+--------+
| ename | hiredate   | sal     | deptno |
+-------+------------+---------+--------+
| lisa  | 2003-02-01 | 3000.00 |      2 |
| zzx1  | 2000-01-01 | 2000.00 |      1 |
| dony  | NULL       | 1000.00 |   NULL |
+-------+------------+---------+--------+
3 rows in set (0.00 sec)

一次性插入多條記錄
insert into tablename tablename values (value11,value12,…),(value21,value22,…)

mysql> create table dept(deptno int(2),deptname varchar(10));
Query OK, 0 rows affected (0.05 sec)

mysql> desc dept;

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| deptno   | int(2)      | YES  |     | NULL    |       |
| deptname | varchar(10) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into dept values(1,'tech'),(2,'sale'),(5,'fin'),(5,'dept5'),(6,'dept6');
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from dept;

+--------+----------+
| deptno | deptname |
+--------+----------+
|      1 | tech     |
|      2 | sale     |
|      5 | fin      |
|      5 | dept5    |
|      6 | dept6    |
+--------+----------+
5 rows in set (0.00 sec)

2、更新記錄
update tablename set field1=value1, field2=value2 where condition
將表emp中ename爲lisa的sal改爲4000:

mysql> update emp set sal=4000 where ename='lisa';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from emp;
+-------+------------+---------+--------+
| ename | hiredate   | sal     | deptno |
+-------+------------+---------+--------+
| lisa  | 2003-02-01 | 4000.00 |      2 |
| zzx1  | 2000-01-01 | 2000.00 |      1 |
| dony  | NULL       | 1000.00 |   NULL |
+-------+------------+---------+--------+
3 rows in set (0.00 sec)

同時更新多個表的數據:
update emp a, dept b set a.sal=a.sal*b.deptno, b.deptname = a.ename where a.deptno=b.deptno
用於同時修改表emp中的字段sal和表dept中的字段的deptname

3、刪除記錄
delete from tablename where condition
從表emp中刪除ename爲dony的記錄

mysql> delete from emp where ename='dony';
Query OK, 1 row affected (0.01 sec)

mysql> select * from emp;

+-------+------------+---------+--------+
| ename | hiredate   | sal     | deptno |
+-------+------------+---------+--------+
| lisa  | 2003-02-01 | 4000.00 |      2 |
| zzx1  | 2000-01-01 | 2000.00 |      1 |
+-------+------------+---------+--------+
2 rows in set (0.00 sec)

同時刪除多個表的數據:
delete a, b from emp a, dept b where a.deptno = b.deptno and a.deptno =3;
同時刪除表emp和表dept中deptno爲3的記錄,如果不加where條件,將會刪除表中的所有記錄。

4、查詢記錄

  • 將表中全部記錄查詢出來:
    select * from tablename
  • 查詢不重複的記錄:
    select distinct deptno from emp;
  • 條件查詢
    select * from emp where deptno=1;
    select * from emp where deptno=1 and sal < 3000;
  • 排序和限制
    select * from emp order by sal;
    如果排序字段的值一樣,則這些字段相同的記錄將會無序排序。
    select * from emp order by deptno, sal desc;
    先按deptno排序,然後sal 按從高到低排序;desc表示按字段進行降序排序,asc則爲升序排序。
    select * from emp order by sal limit 3;
    顯示按sal排序後的前3條記錄。
  • 聚合
    常用聚合函數有sum、count(*)、max和min。
    group by表示要進行分類聚合的字段。
    with rollup表示是否對分類聚合後的結果進行彙總。
    having表示對分類後的結果在進行條件過濾。
select count(1) from emp;
select deptno, count(1) from emp group by deptno;
select deptno, count(1) from emp group by deptno with rollup;
select deptno, count(1) from emp gourp by deptno having count(1)>1;
select sun(sal), max(sal), min(sal) from emp;
  • 表連接
    內連接選出兩張表中互相匹配的記錄
select ename, deptname from emp, dept where emp.deptno = dept.deptno;

外連接選出其他不匹配的記錄
左連接:

select ename, deptname from emp left join dept on emp.deptno=dept.deptno;

右連接:

select ename, deptname form dept right join emp on dept.deptno=emp.deptno;
  • 子查詢
    子查詢關鍵字:in、not in、=、!=、exists、not exists等
select * from emp where deptno in (select deptno from dept);select emp.* from emp, dept where emp.deptno=dept.deptno;
  • 記錄聯合
mysql> select deptno from emp
    -> union all
    -> select deptno from dept;
mysql> select deptno from emp
    -> union
    -> select deptno from dept;

四、DCL語句

用於管理系統中的對象權限時使用。

grant select, insert on sakila.* to 'z1'@'localhost' identified by '123';
exit
use sakila
insert into emp values('bzshen','2005-04-01',3000,'3');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章