MySQL基本操作命令(DDL、DML、DQL、DCL)

2021-12-29 網絡技術乾貨圈
前言MySQL 是最流行的關係型資料庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational

Database Management System:關係資料庫管理系統)應用軟體之一

最早MySQL數據,瑞典AB公司開發的一款開源型的關係型資料庫。隨著時間的推移,瑞典AB公司把MySQL資料庫轉讓給Sun公司(Java語言的創始公司)後來,Sun公司經營不善,又把MySQL資料庫轉讓給甲骨文公司(Oracle資料庫)。MySQL 是一種關聯資料庫管理系統,關聯資料庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。一:資料庫基本操作命令1.1:mysql查看資料庫結構1.2:查看資料庫信息
mysql> show databases;
++
| Database |
++
| information_schema |
| mysql |
| performance_schema |
| sys |
++
4 rows in set (0.00 sec)

1.3:查看資料庫中的數據表信息
mysql> use mysql;						'進入mysql資料庫中'
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> show tables;
+--+
| Tables_in_mysql |
+--+
| columns_priv |
| db |
| engine_cost |
| event |
...省略內容

1.4:顯示數據表的結構(欄位)
mysql> describe user;				'也可以使用desc user;'
+----++-++---+--+
| Field | Type | Null | Key | Default | Extra |
+----++-++---+--+
| Host | char(60) | NO | PRI | | |

二:SQL操作管理命令2.1:SQL語言概述是Structured Query Language的縮寫,及結構化查詢語言用於維護管理資料庫,如數據查詢,數據更新,訪問控制,對象管理等功能2.2:DDL操作命令2.2.1:創建資料庫和表2.2.2:DDL語句創建庫、表的命令創建資料庫:create database 資料庫名創建數據表:create table 表名(欄位定義…)
mysql> create database school;
Query OK, 1 row affected (0.00 sec)

mysql> use school;
Database changed

mysql> create table info (id int(3) not null primary key auto_increment,name varchar(10) not null,score decimal(5,2),address varchar(50) default '未知');
Query OK, 0 rows affected (0.02 sec)
'info表名','not null設置不為空','primary key主鍵','auto_increment自動增長'

2.2.3:DDL語句刪除庫,表的命令

刪除指定的數據表:drop table [資料庫名.]表名

刪除指定的資料庫:drop database 資料庫名
  mysql> drop table info;			'刪除表'
Query OK, 0 rows affected (0.00 sec)

mysql> drop database shcool; '刪除庫'
Query OK, 0 rows affected (0.00 sec)

2.3:DML操作命令2.3.1:DML語句的作用2.3.2:向數據表中插入新的數據記錄命令
mysql> use school							'進入school資料庫'
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> select * from info; '查看表中數據'
Empty set (0.00 sec)

mysql> show tables; '查看表'
+---+
| Tables_in_school |
+---+
| info |
+---+
1 row in set (0.00 sec)

mysql> desc info; '查看表結構'
+----+----+-++----+-+
| Field | Type | Null | Key | Default | Extra |
+----+----+-++----+-+
| id | int(3) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| score | decimal(5,2) | YES | | NULL | |
| address | varchar(50) | YES | | 未知 | |
+----+----+-++----+-+
4 rows in set (0.00 sec)

mysql> insert into info (id,name,score,address) values (1,'zhangsan',88.5,'nanjing'); '插入新的數據記錄'
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;
+----++--+----+
| id | name | score | address |
+----++--+----+
| 1 | zhangsan | 88.50 | nanjing |
+----++--+----+
1 row in set (0.00 sec)

mysql> insert into info values (2,'lisi',90,'beijing'),(3,'wangwu',77,'hangzhou');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
'如果不加欄位名,默認是所有欄位,並且是按照從左往右'
mysql> select * from info;
+----++--++
| id | name | score | address |
+----++--++
| 1 | zhangsan | 88.50 | nanjing |
| 2 | lisi | 90.00 | beijing |
| 3 | wangwu | 77.00 | hangzhou |
+----++--++
3 rows in set (0.00 sec)

mysql> select * from info where score > 80; '篩選出80分以上的數據'
+----++--+----+
| id | name | score | address |
+----++--+----+
| 1 | zhangsan | 88.50 | nanjing |
| 2 | lisi | 90.00 | beijing |
+----++--+----+
2 rows in set (0.00 sec)

mysql> create table tmp as select * from info where score > 80; '篩選出80分以上的並導入進新的表中'
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

2.3.3:向表中添加欄位
mysql> alter table sibiao add (id int(3) not null primary key auto_increment);

2.3.4:修改,更新數據表中的數據記錄的命令update 表名 set 欄位名 1=值1[,欄位名2=值2] where條件表達式
  mysql> update info set score=66 where name='zhangsan';	'修改張三的分數為66'
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from info;
+----++--++
| id | name | score | address |
+----++--++
| 1 | zhangsan | 66.00 | nanjing |
| 2 | lisi | 90.00 | beijing |
| 3 | wangwu | 77.00 | hangzhou |
+----++--++
3 rows in set (0.00 sec)

mysql> update info set name='zhaoliu'; '修改所有id的name'

2.3.5:在數據表中刪除指定的數據記錄命令delete from 表名 where 條件表達式
mysql> select * from info;
+----++--++
| id | name | score | address |
+----++--++
| 1 | zhangsan | 66.00 | nanjing |
| 2 | lisi | 90.00 | beijing |
| 3 | wangwu | 77.00 | hangzhou |
+----++--++
3 rows in set (0.00 sec)

mysql> delete from info where score >= 90;
Query OK, 1 row affected (0.00 sec)

mysql> select * from info;
+----++--++
| id | name | score | address |
+----++--++
| 1 | zhangsan | 66.00 | nanjing |
| 3 | wangwu | 77.00 | hangzhou |
+----++--++
2 rows in set (0.00 sec)

不帶where條件的語句表示刪除表中所有記錄(高危操作)
mysql> delete from info;
Query OK, 4 rows affected (0.00 sec)

mysql> select * from info;
Empty set (0.00 sec)

2.3.6:查看表結構命令
mysql> desc info;
+----+----+-++----+-+
| Field | Type | Null | Key | Default | Extra |
+----+----+-++----+-+
| id | int(3) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| score | decimal(5,2) | YES | | NULL | |
| address | varchar(50) | YES | | 未知 | |
+----+----+-++----+-+
4 rows in set (0.00 sec)

2.2.7:修改用戶登錄mysql的密碼
mysql> update mysql.user set authentication_string=password('123456') where user='root';
[root@localhost ~]# vim /etc/my.cnf
skip-grant-tables '在[mysqld]下添加'
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql -uroot -p '輸入密碼123456'

2.4:DQL操作命令2.4.1:DQL語句的作用2.4.2:不指定條件查詢命令
mysql> select name from info;
++
| name |
++
| zhangsan |
| wangwu |
++
2 rows in set (0.00 sec)

mysql> select name,score from info;
++--+
| name | score |
++--+
| zhangsan | 66.00 |
| wangwu | 77.00 |
++--+
2 rows in set (0.00 sec)

2.4.3:指定條件查詢的命令select欄位名1,欄位名2…from表名 WHERE 條件表達式
mysql> select name from info where id=1 or id=3;
++
| name |
++
| zhangsan |
| wangwu |
++
2 rows in set (0.00 sec)

2.5:DCL操作命令2.5.1:DCL語句的作用2.5.2:設置用戶權限的命令grant 權限列表 on 資料庫名.表名 to 用戶名@來源地址 identified by 『密碼′
mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123' with grant option;
'all privileges:所有權限,%:所有終端'
Query OK, 0 rows affected, 1 warning (0.00 sec)

2.5.3:查看用戶權限的命令
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 'root'@'localhost';
+----+
| 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)

2.5.4:撤銷用戶權限的命令revoke 權限列表 on 資料庫名.表名 from 用戶名@來源地址
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> revoke all on *.* from 'root'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'root'@'localhost';
+--+
| Grants for root@localhost |
+--+
| GRANT USAGE ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+--+
2 rows in set (0.00 sec)

三:資料庫高級操作3.1:清空表
mysql> delete from tmp;
Query OK, 1 row affected (0.00 sec)

mysql> select * from tmp;
Empty set (0.00 sec)

3.2:臨時表

臨時建立的表,用於保存一些臨時數據,不會長期存在(連接斷開,臨時表被刪除)

mysql> create temporary table temp_info (id int(4) not null  auto_increment,name varchar(10) not null,hobbby varchar(10) not null,primary key(id))engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> desc temp_info;
+--+---+-++----+-+
| Field | Type | Null | Key | Default | Extra |
+--+---+-++----+-+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| hobby | varchar(10) | NO | | NULL | |
+--+---+-++----+-+
3 rows in set (0.00 sec)

mysql> show tables; '沒有看到臨時表,因為是放在內存當中'
+---+
| Tables_in_school |
+---+
| info |
| tmp |
+---+
2 rows in set (0.00 sec)
'退出,重新進,臨時表沒有了'

3.3:克隆表
mysql> create table kelong as select * from info;	'克隆表結構和數據'
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> show tables;
+---+
| Tables_in_school |
+---+
| info |
| kelong |
| tmp |
+---+
3 rows in set (0.00 sec)

從表完整複製結構生成新表,再導入數據

mysql> create table k like info;		'相比較like不能克隆表中的數據'
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+---+
| Tables_in_school |
+---+
| info |
| k |
| kelong |
| tmp |
+---+
4 rows in set (0.00 sec)

mysql> select * from k;
Empty set (0.00 sec)

mysql> insert into k select * from info;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from k;
+----++--++
| id | name | score | address |
+----++--++
| 1 | zhangsan | 66.00 | nanjing |
| 3 | wangwu | 77.00 | hangzhou |
+----++--++
2 rows in set (0.00 sec)

mysql> show create table info\G;
*************************** 1. row ***************************
Table: info
Create Table: CREATE TABLE "info" (
"id" int(3) NOT NULL AUTO_INCREMENT,
"name" varchar(10) NOT NULL,
"score" decimal(5,2) DEFAULT NULL,
"address" varchar(50) DEFAULT '未知',
PRIMARY KEY ("id")
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR:
No query specified

mysql> create table test (id int(3) not null primary key auto_increment,name varchar(10) not null,score decimal(5,2),address varchar(50) default '未知');
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test select * from info;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
'先查看info表完整結構,根據此結構創建名字不同結構相同的表test,再導入數據'

相關焦點

  • DDL、DML、DCL基本應用
    創建資料庫CREATE DATABASE zabbix CHARSET utf8mb4 COLLATE utf8mb4_bin;--- 查看庫情況SHOW DATABASES;SHOW CREATE DATABASE zabbix;--- 刪除資料庫(不代表生產操作
  • MySQL的DDL/DML/DCL到底是什麼?
    點擊上方「JavaEdge」,關注公眾號SQL 語句主要可劃分為如下:DDL(Data Definition Languages)語句數據定義語言,這些語句定義了不同的數據段、資料庫、表、列、索引等資料庫對象的定義。
  • ③:MySQL中 DDL 常見操作命令匯總
    對 mysql 感興趣的,加一下我的微信 itsoku,拉你入群交流技術。這是 Mysql 系列第 4 篇。環境:mysql5.7.25,cmd 命令中進行演示。DDL 介紹DDL:Data Define Language 數據定義語言,主要用來對資料庫、表進行一些管理操作。如:建庫、刪庫、建表、修改表、刪除表、對列的增刪改等等。
  • 一看就會,MySQL資料庫的基本操作(四)
    第二種方法:利用命令打開。打開命令:net start mysql;關閉命令:net stop mysql打開、關閉資料庫命令2、登陸資料庫命令:mysql -h 主機地址 -u 用戶名 -p 用戶密碼。退出命令:exit
  • MySQL EXPLAIN 命令詳解
    如果作用在表上,那麼此命令等同於DESC 表命令。UPDATE和DELETE 命令也需要進行性能改進,當這些命令不是直接在表的主碼上運行時,為了確保最優化的索引使用率,需要把它們改寫成SELECT 語句(以便對它們執行EXPLAIN 命令)。
  • Oracle、MySQL最常用的SQL語句(DDL、DQL、DML)
    DDL(Data Definition Language)數據定義語言(1)操作資料庫-- 創建庫create database db1;-- 創建庫是否存在,不存在則創建create database if not exists db1;-- 查看所有資料庫
  • MySQL EXPLAIN 命令詳解學習
    UPDATE和DELETE 命令也需要進行性能改進,當這些命令不是直接在表的主碼上運行時,為了確保最優化的索引使用率,需要把它們改寫成SELECT 語句(以便對它們執行EXPLAIN 命令)。語句進行explain分析操作的.
  • 總結零散的 MySQL 基礎知識
    SQL命令SQL命令分可以分為四組:DDL、DML、DCL和TCL。四組中包含的命令分別如下DDLDDL是數據定義語言(Data Definition Language)的簡稱,它處理資料庫schemas和描述數據應如何駐留在資料庫中。
  • SQL四種語言:DDL DML DCL TCL
    其主要命令有CREATE,ALTER,DROP等,下面用例子詳解。該語言不需要commit,因此慎重。DML – Data Manipulation Language資料庫操作語言:SQL中處理資料庫中的數據其主要命令有SELECT,INSERT,UPDATE,DELETE等,這些例子大家常用就不一一介紹了。該語言需要commit。
  • MySQL 常用命令手冊
    (如這裡用到的.sql)  1011mysql>source wcnc_db.sql  1213B:使用mysqldump命令  1415mysqldump -u username -p dbname < filename.sql  1617C:使用mysql命令  1819mysql -u username
  • mysql show processlist Time為負數的思考
    1、執行命令如果主庫執行常見的命令都會在命令發起的時候調用重載1,設置start_time為命令開始執行的時間如下:堆棧:#0 THD::set_time (this=0x7ffe7c000c90) at /mysqldata/percona-server-locks-detail-5.7.22/sql
  • MySQL基本資料庫管理命令
    # yum install mysql mysql-client mysql-server  (on `Yum` based Systems)# apt-get install mysql mysql-client mysql-server (on `Apt` based Systems)啟動 MySQL
  • Online DDL 工具 gh-ost實戰(一)
    –cut-over string:選擇cut-over類型:atomic/two-step,atomic(默認)類型的cut-over是github的算法,two-step採用的是facebook-OSC的算法。
  • 發現一個關於MySQL的metadata lock的BUG
    請進行以下操作實現復現: 表結構如下:mysql> create table xcy_test_utf8( id
  • MySQL的Online DDL語句
    訴求背景我們平時所說的在線的 DDL操作一般情況是指以下操作:在表中增加欄位在表中增加索引在表中修改欄位類型刪除表中的欄位刪除表中的索引如果是一張小表,只有幾百行或者幾千行的數據表,我們要增加欄位或增加索引,基本不用考慮什麼,一個字:幹,就完了。但如果是一個大表呢?
  • 技術分享 | mysql show processlist Time 為負數的思考
    (QUERY_START_TIME_INFO *time_info){ start_time= time_info->start_time; start_utime= time_info->start_utime;}其實簡單的說就是其中有一個 start_utime,如果設置了 start_utime
  • python對mysql資料庫的操作(一)
    本文章介紹python對mysql資料庫的基本操作,以及編寫一個模擬用戶的註冊。
  • 解密TenDB(MySQL) Flashback 實現(二):按記錄回滾實現
    結合 mysql row 模式 和 這裡的 mysqlbinlog 單用戶過濾,可以直接操作 binlog 實現回檔。選項說明相比原生 mysqlbinlog 命令增加了以下選項 -L, --databases=name List entries for these databases (local log only).Give
  • 連載 Oracle命令(DML、DDL和SELECT)
    年-月-日小時:分鐘:秒的格式YYYY-MM-DD HH24:MI:SSINSERT時最大可操作的字符串長度小於等於4000個單字節, 如果要插入更長的字符串, 請考慮欄位用CLOB類型,方法借用ORACLE裡自帶的DBMS_LOB程序包.