mysql資料庫基礎操作大全(小白必看)
5 人贊了文章
一、概念:
數據: data
資料庫: DB
資料庫管理系統:DBMS
資料庫系統:DBS
MySQL:資料庫
mysql:客戶端命令(用來連接服務或發送sql指令)
SQL:結構化查詢語言 ,其中MySQL支持這個。
SQL語言分為4個部分:DDL(定義)、DML(操作)、DQL(查詢)、DCL(控制)
MySQL->庫->表->數據
SQL語句中的快捷鍵
G 格式化輸出(文本式,豎立顯示)
s 查看伺服器端信息
c 結束命令輸入操作
q 退出當前sql命令行模式
h 查看幫助
二、連接資料庫:
mysql -h 主機名 -u 用戶名 -p密碼 庫名
C:>mysql --採用匿名賬號和密碼登陸本機服務
C:>mysql -h localhost -u root -proot --採用root賬號和root密碼登陸本機服務
C:>mysql -u root -p --推薦方式默認登陸本機
Enter password: ****
C:>mysql -u root -p lamp61 --直接進入lamp61資料庫的方式登陸
三、授權:
格式:grant 允許操作 on 庫名.表名 to 賬號@來源 identified by 密碼;
--實例:創建zhangsan賬號,密碼123,授權lamp61庫下所有表的增/刪/改/查數據,來源地不限
mysql> grant select,insert,update,delete on lamp61.* to zhangsan@% identified by 123;
mysql> grant all on *.* to zhangsan@% identified by 123;
Query OK, 0 rows affected (0.00 sec)
四、SQL的基本操作
mysql> show databases; --查看當前用戶下的所有資料庫
mysql> create database [if not exists] 資料庫名; --創建資料庫
mysql> use test; --選擇進入test資料庫
mysql> show create database 資料庫名G --查看建資料庫語句
mysql> select database(); --查看當前所在資料庫位置
mysql> drop database [if exists] 資料庫名; --刪除一個資料庫
mysql> show tables; --查看當前庫下的所有表格
mysql> desc tb1; --查看tb1的表結構。
mysql> show create table 表名G --查看錶的建表語句。
mysql> create table demo( --創建demo表格
-> name varchar(16) not null,
-> age int,
-> sex enum(w,m) not null default m);
Query OK, 0 rows affected (0.05 sec)
mysql> desc demo; --查看錶結構
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| name | varchar(16) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | enum(w,m) | NO | | m | |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql>drop table if exists mytab; -- 嘗試刪除mytab表格
--添加一條數據
mysql> insert into demo(name,age,sex) values(zhangsan,20,w);
Query OK, 1 row affected (0.00 sec)
mysql> insert into demo values(lisi,22,m); --不指定欄位名來添加數據
Query OK, 1 row affected (0.00 sec)
mysql> insert into demo(name,age) values(wangwu,23); --指定部分欄位名來添加數據
Query OK, 1 row affected (0.00 sec)
--批量添加數據
mysql> insert into demo(name,age,sex) values(aaa,21,w),("bbb",22,m);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from demo; --查詢數據
mysql> update demo set age=24 where name=aaa; --修改
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> delete from demo where name=bbb; --刪除
Query OK, 1 row affected (0.00 sec)
mysql>h -- 快捷幫助
mysql>c -- 取消命令輸入
mysql>s -- 查看當前資料庫的狀態
mysql>q -- 退出mysql命令行
五、 MySQL資料庫的數據類型:
MySQL的數據類型分為四大類:數值類型、字串類型、日期類型、NULL。
5.1 數值類型:
*tinyint(1位元組) 0~255 -128~127
smallint(2位元組)
mediumint(3位元組)
*int(4位元組)
bigint(8位元組)
*float(4位元組) float(6,2)
*double(8位元組)
decimal(自定義)字串形數值
5.2 字串類型
普通字串
*char 定長字串 char(8)
*varchar 可變字串 varchar(8)
二進位類型
tinyblob
blob
mediumblob
longblob
文本類型
tinytext
*text 常用於<textarea></textarea>
mediumtext
longtext
*enum枚舉
set集合
5.3 時間和日期類型:
date 年月日
time 時分秒
datetime 年月日時分秒
timestamp 時間戳
year 年
5.4 NULL值
NULL意味著「沒有值」或「未知值」
可以測試某個值是否為NULL
不能對NULL值進行算術計算
對NULL值進行算術運算,其結果還是NULL
0或NULL都意味著假,其餘值都意味著真
MySQL的運算符:
算術運算符:+ - * / %
比較運算符:= > < >= <= <> !=
資料庫特有的比較:in,not in, is null,is not null,like, between and
邏輯運算符:and or not
like: 支持特殊符號%和_ ; 其中 %表示任意數量的任意字元,_表示任意一位字元。
六、 表的欄位約束:
unsigned 無符號(正數)
zerofill 前導零填充
auto_increment 自增
default 默認值
not null 非空
PRIMARY KEY 主鍵 (非null並不重複)
unique 唯一性 (可以為null但不重複)
index 常規索引
七、 建表語句格式:
create table 表名(
欄位名 類型 [欄位約束],
欄位名 類型 [欄位約束],
欄位名 類型 [欄位約束]
...
);
mysql> create table stu(
-> id int unsigned not null auto_increment primary key,
-> name varchar(8) not null unique,
-> age tinyint unsigned,
-> sex enum(m,w) not null default m,
-> classid char(6)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> desc stu;
+---------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(8) | NO | UNI | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
| sex | enum(m,w) | NO | | m | |
| classid | char(6) | YES | | NULL | |
+---------+---------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stuG --查看建表的語句
*************************** 1. row ***************************
Table: stu
Create Table: CREATE TABLE `stu` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(8) NOT NULL,
`age` tinyint(3) unsigned default NULL,
`sex` enum(m,w) NOT NULL default m,
`classid` char(6) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql>
mysql> insert into stu(id,name,age,sex,classid) values(1,zhangsan,20,m,lamp
61);
Query OK, 1 row affected (0.00 sec)
mysql> insert into stu(name,age,sex,classid) values(lisi,22,w,lamp61);
Query OK, 1 row affected (0.00 sec)
mysql> insert into stu(name,age,classid) values(wangwu,21,lamp61);
Query OK, 1 row affected (0.00 sec)
mysql> insert into stu values(null,qq,24,w,lamp62);
Query OK, 1 row affected (0.00 sec)
mysql> insert into stu values(null,aa,20,m,lamp62),(null,bb,25,m,lamp
63);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from stu;
+----+----------+------+-----+---------+
| id | name | age | sex | classid |
+----+----------+------+-----+---------+
| 1 | zhangsan | 20 | m | lamp61 |
| 2 | lisi | 22 | w | lamp61 |
| 3 | wangwu | 21 | m | lamp61 |
| 4 | qq | 24 | w | lamp62 |
| 5 | aa | 20 | m | lamp62 |
| 6 | bb | 25 | m | lamp63 |
+----+----------+------+-----+---------+
6 rows in set (0.00 sec)
八、修改表結構:
-------------------------------------
格式: alter table 表名 action(更改選項);
更改選項:
1. 添加欄位:alter table 表名 add 欄位名信息
例如:
-- 在user表的最後追加一個num欄位 設置為int not null
mysql> alter table user add num int not null;
-- 在user表的email欄位後添加一個age欄位,設置int not null default 20;
mysql> alter table user add age int not null default 20 after email;
-- 在user表的最前面添加一個aa欄位設置為int類型
mysql> alter table user add aa int first;
2. 刪除欄位:alter table 表名 drop 被刪除的欄位名
例如:-- 刪除user表的aa欄位
mysql> alter table user drop aa;
3. 修改欄位:alter table 表名 change[modify] 被修改後的欄位信息
其中:change可以修改欄位名, modify 不修改
例如:
-- 修改user表中age欄位信息(類型),(使用modify關鍵字的目的不修改欄位名)
mysql> alter table user modify age tinyint unsigned not null default 20;
-- 修改user表的num欄位改為mm欄位並添加了默認值(使用change可改欄位名)
mysql> alter table user change num mm int not null default 10;
4. 添加和刪除索引
-- 為user表中的name欄位添加唯一性索引,索引名為uni_name;
mysql> alter table user add unique uni_name(name);
-- 為user表中的email欄位添加普通索引,索引名為index_eamil
mysql> alter table user add index index_email(email);
-- 將user表中index_email的索引刪除
mysql> alter table user drop index index_email;
5. 更改表名稱:
ALTER TABLE 舊錶名 RENAME AS 新表名
6. 更改AUTO_INCREMENT初始值:
ALTER TABLE 表名稱 AUTO_INCREMENT=1
7. 更改表類型:
ALTER TABLE 表名稱 ENGINE="InnoDB"
MySQL資料庫中的表類型一般常用兩種:MyISAM和InnoDB
區別:MyISAM類型的數據文件有三個frm(結構)、MYD(數據)、MYI(索引)
MyISAM類型中的表數據增 刪 改速度快,不支持事務,沒有InnoDB安全。
InnoDB類型的數據文件只有一個 .frm
InnoDB類型的表數據增 刪 改速度沒有MyISAM的快,但支持事務,相對安全。
九、數據的DML操作:添加數據,修改數據,刪除數據:
----------------------------------------------------------
1. 添加數據
格式: insert into 表名[(欄位列表)] values(值列表...);
--標準添加(指定所有欄位,給定所有的值)
mysql> insert into stu(id,name,age,sex,classid) values(1,zhangsan,20,m,lamp138);
Query OK, 1 row affected (0.13 sec)
mysql>
--指定部分欄位添加值
mysql> insert into stu(name,classid) value(lisi,lamp138);
Query OK, 1 row affected (0.11 sec)
-- 不指定欄位添加值
mysql> insert into stu value(null,wangwu,21,w,lamp138);
Query OK, 1 row affected (0.22 sec)
-- 批量添加值
mysql> insert into stu values
-> (null,zhaoliu,25,w,lamp94),
-> (null,uu01,26,m,lamp94),
-> (null,uu02,28,w,lamp92),
-> (null,qq02,24,m,lamp92),
-> (null,uu03,32,m,lamp138),
-> (null,qq03,23,w,lamp94),
-> (null,aa,19,m,lamp138);
Query OK, 7 rows affected (0.27 sec)
Records: 7 Duplicates: 0 Warnings: 0
2. 修改操作:
格式:update 表名 set 欄位1=值1,欄位2=值2,欄位n=值n... where 條件
-- 將id為11的age改為35,sex改為m值
mysql> update stu set age=35,sex=m where id=11;
Query OK, 1 row affected (0.16 sec)
Rows matched: 1 Changed: 1 Warnings: 0
-- 將id值為12和14的數據值sex改為m,classid改為lamp92
mysql> update stu set sex=m,classid=lamp92 where id=12 or id=14 --等價於下面
mysql> update stu set sex=m,classid=lamp92 where id in(12,14);
Query OK, 2 rows affected (0.09 sec)
Rows matched: 2 Changed: 2 Warnings: 0
3. 刪除操作
格式:delete from 表名 [where 條件]
-- 刪除stu表中id值為100的數據
mysql> delete from stu where id=100;
Query OK, 0 rows affected (0.00 sec)
-- 刪除stu表中id值為20到30的數據
mysql> delete from stu where id>=20 and id<=30;
Query OK, 0 rows affected (0.00 sec)
-- 刪除stu表中id值為20到30的數據(等級於上面寫法)
mysql> delete from stu where id between 20 and 30;
Query OK, 0 rows affected (0.00 sec)
-- 刪除stu表中id值大於200的數據
mysql> delete from stu where id>200;
Query OK, 0 rows affected (0.00 sec)
十、數據的DQL操作:數據查詢
==============================================
格式:
select [欄位列表]|* from 表名
[where 搜索條件]
[group by 分組欄位 [having 子條件]]
[order by 排序 asc|desc]
[limit 分頁參數]
mysql> select * from stu;
+----+----------+-----+-----+---------+
| id | name | age | sex | classid |
+----+----------+-----+-----+---------+
| 1 | zhangsan | 20 | m | lamp138 |
| 2 | lisi | 20 | m | lamp138 |
| 3 | wangwu | 21 | w | lamp138 |
| 4 | zhaoliu | 25 | w | lamp94 |
| 5 | uu01 | 26 | m | lamp94 |
| 6 | uu02 | 28 | w | lamp92 |
| 7 | qq02 | 24 | m | lamp92 |
| 8 | uu03 | 32 | m | lamp138 |
| 9 | qq03 | 23 | w | lamp94 |
| 10 | aa | 19 | m | lamp138 |
| 11 | sad | 35 | m | lamp94 |
| 12 | tt | 25 | m | lamp92 |
| 13 | wer | 25 | w | lamp94 |
| 14 | xx | 25 | m | lamp92 |
| 15 | kk | 0 | w | lamp94 |
+----+----------+-----+-----+---------+
15 rows in set (0.00 sec)
十一、where條件查詢:
1. 查詢班級為lamp138期的學生信息
mysql> select * from stu where classid=lamp138;
2. 查詢lamp138期的男生信息(sex為m)
mysql> select * from stu where classid=lamp138 and sex=m;
3. 查詢id號值在10以上的學生信息
mysql> select * from stu where id>10;
4. 查詢年齡在20至25歲的學生信息
mysql> select * from stu where age>=20 and age<=25;
mysql> select * from stu where age between 20 and 25;
5. 查詢年齡不在20至25歲的學生信息
mysql> select * from stu where age not between 20 and 25;
mysql> select * from stu where age<20 or age>25;
6. 查詢id值為1,8,4,10,14的學生信息
select * from stu where id in(1,8,4,10,14);
mysql> select * from stu where id=1 or id=8 or id=4 or id=10 or id=14;
7. 查詢lamp138和lamp94期的女生信息
mysql> select * from stu where classid in(lamp138,lamp94) and sex=w;
mysql> select * from stu where (classid=lamp138 or classid=lamp94) and sex=w
十二、導入和導出:
-----------------------------------
-- 將lamp138庫導出
D:>mysqldump -u root -p lamp138 >lamp138.sql
Enter password:
---- 將lamp138庫中的stu表導出
D:>mysqldump -u root -p lamp138 stu >lamp138_stu.sql
Enter password:
-- 將lamp138庫導入
D:>mysql -u root -p lamp138<lamp138.sql
Enter password:
-- 將lamp138庫中stu表導入
D:>mysql -u root -p lamp138<lamp138_stu.sql
Enter password:
D:>
mysql資料庫基礎操作就是這些啦,如果你還意猶未盡,如果你還想掌握更多技術知識,歡迎找到我們的Python交流群。我們一起聊聊啊,大神坐鎮,隨時解答你自學過程中的難題哦~戳我呀~戳我呀~戳我呀~
推薦閱讀:
※django鏈接mysql資料庫
※資料庫優化,自己瞎扒的
※SQL每日一練【180604】
※基於REDIS實現的點贊功能設計思路詳解
※Linux安裝MySQL解決的一些問題